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

Revision 13, 70.6 KB checked in by niltonneto, 17 years ago (diff)

* empty log message *

  • 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
73                                $this -> typeContact = 'contacts';
74                }
75
76                /*!
77               
78                        @function index
79                        @abstract Builds the Main Page
80                        @author Raphael Derosso Pereira
81                        @author Jonas Goes
82                       
83                */             
84                function index()
85                {       
86                        if(!@is_object($GLOBALS['phpgw']->js))
87                        {
88                                $GLOBALS['phpgw']->js = CreateObject('phpgwapi.javascript');
89                        }
90                        $GLOBALS['phpgw']->js->validate_file('venus','table');
91                        $GLOBALS['phpgw']->js->validate_file('venus','shapes');
92                        $GLOBALS['phpgw']->js->validate_file('venus','jsStructUtil');
93                        $GLOBALS['phpgw']->js->validate_file('venus','cssUtil');
94                       
95//                      $GLOBALS['phpgw']->js->set_onload('setTimeout(\'updateCards()\',1000)');
96                        $GLOBALS['phpgw']->common->phpgw_header();
97                       
98                        $GLOBALS['phpgw']->template->set_file(array('index' => 'index.tpl'));
99                        $GLOBALS['phpgw']->template->set_var('cc_root_dir', $GLOBALS['phpgw_info']['server']['webserver_url'].'/contactcenter/');
100                       
101                        /* Quick Add */
102                        $GLOBALS['phpgw']->template->set_var('cc_qa_alias',lang('Alias').':');
103                        $GLOBALS['phpgw']->template->set_var('cc_qa_given_names',lang('Given Names').':');
104                        $GLOBALS['phpgw']->template->set_var('cc_qa_family_names',lang('Family Names').':');
105                        $GLOBALS['phpgw']->template->set_var('cc_qa_phone',lang('Phone').':');
106                        $GLOBALS['phpgw']->template->set_var('cc_qa_email',lang('Email').':');
107                        $GLOBALS['phpgw']->template->set_var('cc_qa_save',lang('Save'));
108                        $GLOBALS['phpgw']->template->set_var('cc_qa_clear',lang('Clear'));
109                        /* End Quick Add */
110                       
111                        $cc_css_file = $GLOBALS['phpgw_info']['server']['webserver_url'].'/contactcenter/styles/cc.css';
112                        $cc_card_image_file = $GLOBALS['phpgw_info']['server']['webserver_url'].'/contactcenter/templates/default/images/card.png';
113                        $GLOBALS['phpgw']->template->set_var('cc_css',$cc_css_file);
114                        $GLOBALS['phpgw']->template->set_var('cc_dtree_css', $cc_dtree_file);
115                        $GLOBALS['phpgw']->template->set_var('cc_card_image',$cc_card_image_file);
116                       
117                        $GLOBALS['phpgw']->template->set_var('cc_personal',lang('Personal'));
118                       
119                        $GLOBALS['phpgw']->template->set_var('cc_full_add',lang('Full Add'));
120                        $GLOBALS['phpgw']->template->set_var('cc_reset',lang('Reset'));
121                       
122                        $GLOBALS['phpgw']->template->set_var('cc_personal_data',lang('Personal Data'));
123                        $GLOBALS['phpgw']->template->set_var('cc_addresses',lang('Addresses'));
124                        $GLOBALS['phpgw']->template->set_var('cc_connections',lang('Connections'));
125                        $GLOBALS['phpgw']->template->set_var('cc_relations',lang('Relations'));
126
127                        $GLOBALS['phpgw']->template->set_var('cc_quick_add',lang('Quick Add'));
128                        $GLOBALS['phpgw']->template->set_var('cc_catalogs',lang('Catalogues'));
129                        $GLOBALS['phpgw']->template->set_var('cc_group_add',lang('Group Add'));
130                       
131                        /* Panel */
132                        $GLOBALS['phpgw']->template->set_var('cc_panel_new',lang('New').'...');
133                        $GLOBALS['phpgw']->template->set_var('cc_panel_search',lang('Search').'...');
134                        $GLOBALS['phpgw']->template->set_var('cc_panel_table',lang('Table View'));
135                        $GLOBALS['phpgw']->template->set_var('cc_panel_cards',lang('Cards View'));
136                       
137                        $GLOBALS['phpgw']->template->set_var('cc_panel_search_found',lang('Showing found entries'));
138                        $GLOBALS['phpgw']->template->set_var('cc_panel_first_page',lang('First Page'));
139                        $GLOBALS['phpgw']->template->set_var('cc_panel_previous_page',lang('Previous Page'));
140                        $GLOBALS['phpgw']->template->set_var('cc_panel_next_page',lang('Next Page'));
141                        $GLOBALS['phpgw']->template->set_var('cc_panel_last_page',lang('Last Page'));
142                        $GLOBALS['phpgw']->template->set_var('cc_all',lang('all'));
143                        /* End Panel */
144                       
145                        /* Messages */
146                        $GLOBALS['phpgw']->template->set_var('cc_msg_no_cards',lang('No Cards'));
147                        $GLOBALS['phpgw']->template->set_var('cc_msg_err_no_room',lang('No Room for Cards! Increase your browser area.'));
148                        $GLOBALS['phpgw']->template->set_var('cc_msg_card_new',lang('New from same Company'));
149                        $GLOBALS['phpgw']->template->set_var('cc_msg_card_edit',lang('Edit Contact'));
150                        $GLOBALS['phpgw']->template->set_var('cc_msg_card_remove',lang('Remove Contact'));
151                        $GLOBALS['phpgw']->template->set_var('cc_send_mail',lang('Send Mail'));
152                        $GLOBALS['phpgw']->template->set_var('cc_msg_group_edit',lang('Edit Group'));
153                        $GLOBALS['phpgw']->template->set_var('cc_msg_group_remove',lang('Remove Group'));
154                        $GLOBALS['phpgw']->template->set_var('cc_msg_group_remove_confirm',lang('Confirm Removal of this Group?'));
155                        $GLOBALS['phpgw']->template->set_var('cc_msg_card_remove_confirm',lang('Confirm Removal of this Contact?'));
156                        $GLOBALS['phpgw']->template->set_var('cc_participants',lang('Participants'));
157                        $GLOBALS['phpgw']->template->set_var('cc_empty',lang('Empty'));
158                        /* End Messages */
159                       
160                        $GLOBALS['phpgw']->template->set_var('cc_results',lang('Results'));
161                        $GLOBALS['phpgw']->template->set_var('cc_is_my',lang('Is My'));
162                        $GLOBALS['phpgw']->template->set_var('cc_btn_search',lang('Search'));
163                        $GLOBALS['phpgw']->template->set_var('cc_add_relation',lang('Add Relation'));
164                        $GLOBALS['phpgw']->template->set_var('cc_del_relation',lang('Remove Selected Relations'));
165                       
166                        $GLOBALS['phpgw']->template->set_var('cc_contact_title',lang('Contact Center').' - '.lang('Contacts'));
167                        $GLOBALS['phpgw']->template->set_var('cc_window_views_title',lang('Contact Center').' - '.lang('Views'));
168                        $GLOBALS['phpgw']->template->set_var('phpgw_img_dir', $GLOBALS['phpgw_info']['server']['webserver_url'] . '/phpgwapi/images');
169                       
170                        $GLOBALS['phpgw']->template->parse('out','index');
171                       
172                        $api = CreateObject('contactcenter.ui_api');
173                        $main = $api->get_full_add();
174                        $main .= $api->get_search_obj();
175                        $main .= $api->get_quick_add_plugin();
176                        $main .= $api->get_add_group();
177                        $main .= $GLOBALS['phpgw']->template->get_var('out');
178
179                        echo $main;
180                }
181
182               
183                /*!
184               
185                        @function data_manager
186                        @abstract Calls the right method and passes to it the right
187                                parameters
188                        @author Raphael Derosso Pereira
189               
190                */
191                function data_manager()
192                {
193                        switch($_GET['method'])
194                        {
195                                /* Cards Methods */
196                                case 'set_n_cards':
197                                        return $this->set_n_cards((int)$_GET['ncards']);
198                                       
199                                case 'get_cards_data':
200                                        return $this->get_cards_data($_POST['letter'], $_POST['page'], unserialize(str_replace('\\"','"',$_POST['ids'])));
201                                case 'get_cards_data_get':
202                                        return $this->get_cards_data($_GET['letter'], $_GET['page'], unserialize(str_replace('\\"','"',$_GET['ids'])));
203
204
205                                case 'get_photo':
206                                        return $this->get_photo($_GET['id']);
207
208                                       
209                                /* Catalog Methods */
210                                case 'set_catalog':
211                                        return $this->set_catalog($_GET['catalog']);
212                                       
213                                case 'get_catalog_tree':
214                                        echo serialize($this->get_catalog_tree($_GET['level']));
215                                        return;
216
217                                case 'get_actual_catalog':
218                                        echo serialize($this->get_actual_catalog());
219                                        return;
220
221                                case 'get_catalog_participants_list':
222                                        echo serialize($this->get_catalog_participants_list($_POST['id']));
223                                        return;
224
225                                case 'get_catalog_add_contact':
226                                        echo serialize($this->get_catalog_add_contact($_POST['id']));
227                                        return;
228                                       
229                                /* Full Add Methods */
230                                case 'get_full_data':
231                                        return $this->get_full_data($_GET['id']);
232                               
233                                case 'get_group':
234                                        return $this->get_group_data($_GET['id']);
235                                       
236                                case 'get_contact_full_add_const':
237                                        return $this->get_contact_full_add_const();
238
239                                case 'post_full_add':
240                                        return $this->post_full_add();
241
242                                case 'post_photo':
243                                        return $this->post_photo((int) $_GET['id'] ? (int) $_GET['id'] : '_new_');
244
245                                case 'get_states':
246                                        return $this->get_states($_GET['country']);
247                                       
248                                case 'get_cities':
249                                        return $this->get_cities($_GET['country'], $_GET['state'] ? $_GET['state'] : null);
250                                       
251                                       
252                                /* Other Methods */
253                                case 'quick_add':                                                                                                                       
254                                        return $this->quick_add($_POST['add']);
255                               
256                                case 'add_group':                                                                                                                       
257                                        return $this->add_group($_POST['add']);
258                                                                       
259                                case 'remove_entry':
260                                        return $this->remove_entry((int)$_GET['remove']);
261                               
262                                case 'remove_all_entries':
263                                        return $this->remove_all_entries();
264
265                                case 'remove_group':
266                                                                               
267                                        return $this->remove_group((int)$_GET['remove']);                                       
268
269                                case 'search':
270                                        return $this->search(str_replace('\\"', '"', $_GET['data']));
271
272                                case 'email_win':
273                                        $GLOBALS['phpgw']->common->phpgw_header();
274                                        $api = CreateObject('contactcenter.ui_api');
275                                        $win = $api->get_email_win();
276                                        $win .= $api->get_quick_add_plugin();
277                                        $win .= '<input id="QAbutton" type="button" value="QuickAdd" />'
278                                                .'<br><input type="button" value="EmailWin" onclick="ccEmailWin.open()" />'
279                                                .'<script type="text/javascript">'
280                                                .'      ccQuickAdd.associateAsButton(Element("QAbutton"));'
281                                                .'</script>';
282                                        echo $win;
283                                        return;
284
285                                /* Information Gathering */
286                                case 'get_multiple_entries':
287                                        echo serialize($this->get_multiple_entries(str_replace('\\"','"',$_POST['data'])));
288                                        return;
289
290                                case 'get_all_entries':
291                                        echo serialize($this->get_all_entries(str_replace('\\"','"',$_POST['data'])));
292                                        return;
293
294                                case 'import_contacts':
295                                        return $this->import_contacts($_GET['typeImport']);
296
297                                case 'export_contacts':
298                                        return $this->export_contacts($_POST['typeExport']);
299
300                        }
301                }
302
303                /*!
304               
305                        @function set_n_cards
306                        @abstract Informs the class the number of cards the page can show
307                        @author Raphael Derosso Pereira
308                       
309                        @param integer $n_cards The number of cards
310                       
311                */
312                function set_n_cards($n_cards)
313                {
314                        if (is_int($n_cards))
315                        {
316                                $this->page_info['n_cards'] = $n_cards;
317                                echo 1;
318                        }
319                       
320                        $this->save_session();
321                }
322                               
323                /*!
324               
325                        @function set_catalog
326                        @abstract Sets the current catalog selected by the user
327                        @author Raphael Derosso Pereira
328                       
329                        @param string $id_catalog The sequence of IDs to reach the catalog
330                                separated by commas
331               
332                */
333                function set_catalog($id_catalog)
334                {
335                        $id_catalog = str_replace('\\"', '"', $id_catalog);
336                        $temp =& $this->bo->set_catalog($id_catalog);
337                       
338                        if ($temp)
339                        {
340                                $this->page_info['changed'] = true;
341                                $this->page_info['actual_entries'] = false;
342                                $this->page_info['actual_catalog'] =& $temp;
343                                $this->save_session();
344
345                                $catalog_info = $this->bo->get_branch_by_level($this->bo->catalog_level[0]);
346                               
347                                if ($catalog_info['class'] === 'bo_global_ldap_catalog' ||
348                                    $catalog_info['class'] === 'bo_catalog_group_catalog')
349                                {
350                                        $perms = 1;
351                                }
352                                else
353                                {
354                                        $perms = 15;
355                                }
356                               
357                                echo serialize(array(
358                                        'status' => 'ok',
359                                        'perms'  => $perms
360                                ));
361
362                                return;
363                        }
364                       
365                        echo serialize(array(
366                                'status' => 'ok',
367                                'perms'  => 0
368                        ));
369                }
370               
371               
372                /*!
373               
374                        @function get_catalog_tree
375                        @abstract Returns the JS serialized array to used as the tree
376                                level
377                        @author Raphael Derosso Pereira
378                       
379                        @param (string) $level The level to be taken
380               
381                */
382                function get_catalog_tree($level)
383                {
384                        if ($level === '0')
385                        {
386                                $folderImageDir = $GLOBALS['phpgw_info']['server']['webserver_url'] . '/phpgwapi/dftree/images/';
387
388                                $parent = '0';
389                               
390                                if (!($tree = $this->bo->get_catalog_tree($level)))
391                                {
392                                        return array(
393                                                'msg'    => lang('Couldn\'t get the Catalogue Tree. Please contact the Administrator.'),
394                                                'status' => 'fatal'
395                                        );
396                                }
397                        }
398                        else
399                        {
400                                $last_dot = strrpos($level,'.');
401                                $parent = substr($level, 0, $last_dot);
402                                $child = substr($level, $last_dot+1, strlen($level));
403                       
404                                if (!($tree[$child] = $this->bo->get_catalog_tree($level)))
405                                {
406                                        return array(
407                                                'msg'    => lang('Couldn\'t get the Catalogue Tree. Please contact the Administrator.'),
408                                                'status' => 'fatal'
409                                        );
410                                }
411                        }
412                       
413                        $folderImageDir = $GLOBALS['phpgw']->common->image('contactcenter','globalcatalog-mini.png');
414                        $folderImageDir = substr($folderImageDir, 0, strpos($folderImageDir, 'globalcatalog-mini.png'));
415                       
416                        $tree_js = $this->convert_tree($tree, $folderImageDir, $parent);
417                       
418                        return array(
419                                'data' => $tree_js,
420                                'msg'  => lang('Catalog Tree Successfully taken!'),
421                                'status' => 'ok'
422                        );
423                }
424               
425/*              function get_catalog_tree($level, $name = 'tree')
426                {
427                        if ($level === '0')
428                        {
429                                $folderImageDir = $GLOBALS['phpgw_info']['server']['webserver_url'] . '/phpgwapi/dftree/images/';
430                                $tree_js =  $name." = new dFTree({'name': '".$name."'});\n";
431
432                                $parent = '0';
433                                $child  = '0';
434                               
435                                if (!($tree = $this->bo->get_catalog_tree($level)))
436                                {
437                                        return '0';
438                                }
439                        }
440                        else
441                        {
442                                $last_dot = strrpos($level,'.');
443                                $parent = substr($level, 0, $last_dot);
444                                $child = substr($level, $last_dot+1, strlen($level));
445                       
446                                $tree_js = '';
447                               
448                                if (!($tree[$child] = $this->bo->get_catalog_tree($level)))
449                                {
450                                        return '0';
451                                }
452                        }
453                       
454                        $folderImageDir = $GLOBALS['phpgw']->common->image('contactcenter','globalcatalog-mini.png');
455                        $folderImageDir = substr($folderImageDir, 0, strpos($folderImageDir, 'globalcatalog-mini.png'));
456                       
457                        $tree_js .= $this->convert_tree($tree, $name, $folderImageDir, $parent);
458                       
459                        return $tree_js;
460                }
461*/             
462               
463                /*!
464               
465                        @function get_actual_catalog
466                        @abstract Returns the actual selected Catalog
467                        @author Raphael Derosso Pereira
468
469                */
470                function get_actual_catalog()
471                {
472                        $level = $this->bo->get_level_by_branch($this->bo->get_actual_catalog(), $this->bo->tree['branches'], '0');
473
474                        if ($level)
475                        {
476                                return array(
477                                        'status' => 'ok',
478                                        'data'   => $level
479                                );
480                        }
481
482                        return array(
483                                'status' => 'fatal',
484                                'msg'    => lang('Couldn\'t get the actual catalog.'),
485                        );
486                }
487               
488                /*!
489               
490                        @function get_cards_data
491                        @abstract Returns the information that is placed on the cards
492                        @author Raphael Derosso Pereira
493                       
494                        @param string $letter The first letter to be searched
495                        @param (int)  $page The page to be taken
496                        @param (str)  $ids The ids to be taken in case of search
497
498                        TODO: This function is not well done. It must be rewritten
499                                using the new array 'msg','status','data' schema.
500                */
501                function get_cards_data($letter, $page, $ids)
502                {
503                        //echo $page."\n";
504                        if ($letter !== 'search' and ($letter != $this->page_info['actual_letter'] or
505                            ($letter == $this->page_info['actual_letter'] and $page == $this->page_info['actual_page']) or
506                            $this->page_info['changed']))
507                        {
508                                unset($ids);
509                                $this->page_info['changed'] = false;
510                                 
511                                switch ($this->page_info['actual_catalog']['class'])
512                                {
513                                        case 'bo_people_catalog':
514                                                $field_name = 'id_contact';
515
516                                                if ($letter !== 'number')
517                                                {
518                                                        $find_restric[0] = array(
519                                                                0 => array(
520                                                                        'field' => 'contact.names_ordered',
521                                                                        'type'  => 'iLIKE',
522                                                                        'value' => $letter !== 'all' ? $letter.'%' : '%'
523                                                                ),
524                                                                1 => array(
525                                                                        'field' => 'contact.id_owner',
526                                                                        'type'  => '=',
527                                                                        'value' => $GLOBALS['phpgw_info']['user']['account_id']
528                                                                )
529                                                        );
530                                                }
531                                                else
532                                                {
533                                                        $find_restric[0] = array(
534                                                                0 => array(
535                                                                        'type'  => 'branch',
536                                                                        'value' => 'OR',
537                                                                        'sub_branch' => array(
538                                                                                0 => array(
539                                                                                        'field' => 'contact.names_ordered',
540                                                                                        'type'  => 'LIKE',
541                                                                                        'value' => '0%'
542                                                                                ),
543                                                                                1 => array(
544                                                                                        'field' => 'contact.names_ordered',
545                                                                                        'type'  => 'LIKE',
546                                                                                        'value' => '1%'
547                                                                                ),
548                                                                                2 => array(
549                                                                                        'field' => 'contact.names_ordered',
550                                                                                        'type'  => 'LIKE',
551                                                                                        'value' => '2%'
552                                                                                ),
553                                                                                3 => array(
554                                                                                        'field' => 'contact.names_ordered',
555                                                                                        'type'  => 'LIKE',
556                                                                                        'value' => '3%'
557                                                                                ),
558                                                                                4 => array(
559                                                                                        'field' => 'contact.names_ordered',
560                                                                                        'type'  => 'LIKE',
561                                                                                        'value' => '4%'
562                                                                                ),
563                                                                                5 => array(
564                                                                                        'field' => 'contact.names_ordered',
565                                                                                        'type'  => 'LIKE',
566                                                                                        'value' => '5%'
567                                                                                ),
568                                                                                6 => array(
569                                                                                        'field' => 'contact.names_ordered',
570                                                                                        'type'  => 'LIKE',
571                                                                                        'value' => '6%'
572                                                                                ),
573                                                                                7 => array(
574                                                                                        'field' => 'contact.names_ordered',
575                                                                                        'type'  => 'LIKE',
576                                                                                        'value' => '7%'
577                                                                                ),
578                                                                                8 => array(
579                                                                                        'field' => 'contact.names_ordered',
580                                                                                        'type'  => 'LIKE',
581                                                                                        'value' => '8%'
582                                                                                ),
583                                                                                9 => array(
584                                                                                        'field' => 'contact.names_ordered',
585                                                                                        'type'  => 'LIKE',
586                                                                                        'value' => '9%'
587                                                                                ),
588                                                                        ),
589                                                                ),
590                                                                1 => array(
591                                                                        'field' => 'contact.id_owner',
592                                                                        'type'  => '=',
593                                                                        'value' => $GLOBALS['phpgw_info']['user']['account_id']
594                                                                ),
595                                                        );
596                                                }
597                                               
598                                                $find_field[0] = array('contact.id_contact','contact.names_ordered');
599                                               
600                                                $find_other[0] = array(
601                                                        //'offset' => (($page-1)*$this->page_info['n_cards']),
602                                                        //'limit'  => $this->page_info['n_cards'],
603                                                        'order'  => 'contact.names_ordered'
604                                                );
605                                               
606                                                break;
607                                       
608                                        case 'bo_global_ldap_catalog':
609                                                $field_name = 'id_contact';
610
611                                                if ($letter !== 'number')
612                                                {
613                                                        $find_restric[0] = array(
614                                                                0 => array(
615                                                                        'field' => 'contact.names_ordered',
616                                                                        'type'  => 'iLIKE',
617                                                                        'value' => $letter !== 'all' ? $letter.'%' : '%'
618                                                                )
619                                                        );
620                                                        $find_restric[0][1] =  array(
621                                                                        'type'  => 'branch',
622                                                                        'value' => 'OR',
623                                                                        'sub_branch' => array(
624                                                                                0 => array(
625                                                                                'field' => 'contact.account_type',
626                                                                                'type'  => '=',
627                                                                                'value' => 'u'
628                                                                                ),
629                                                                                /*1 => array(
630                                                                                'field' => 'contact.account_type',
631                                                                                'type'  => '=',
632                                                                                'value' => 'g'
633                                                                                ),*/
634                                                                                2 => array(
635                                                                                'field' => 'contact.account_type',
636                                                                                'type'  => '=',
637                                                                                'value' => 'l'
638                                                                                )
639                                                                        )
640                                                        );
641                                                }
642                                                else
643                                                {
644                                                        $find_restric[0] = array(
645                                                                0 => array(
646                                                                        'type'  => 'branch',
647                                                                        'value' => 'OR',
648                                                                        'sub_branch' => array(
649                                                                                0 => array(
650                                                                                        'field' => 'contact.names_ordered',
651                                                                                        'type'  => 'LIKE',
652                                                                                        'value' => '0%'
653                                                                                ),
654                                                                                1 => array(
655                                                                                        'field' => 'contact.names_ordered',
656                                                                                        'type'  => 'LIKE',
657                                                                                        'value' => '1%'
658                                                                                ),
659                                                                                2 => array(
660                                                                                        'field' => 'contact.names_ordered',
661                                                                                        'type'  => 'LIKE',
662                                                                                        'value' => '2%'
663                                                                                ),
664                                                                                3 => array(
665                                                                                        'field' => 'contact.names_ordered',
666                                                                                        'type'  => 'LIKE',
667                                                                                        'value' => '3%'
668                                                                                ),
669                                                                                4 => array(
670                                                                                        'field' => 'contact.names_ordered',
671                                                                                        'type'  => 'LIKE',
672                                                                                        'value' => '4%'
673                                                                                ),
674                                                                                5 => array(
675                                                                                        'field' => 'contact.names_ordered',
676                                                                                        'type'  => 'LIKE',
677                                                                                        'value' => '5%'
678                                                                                ),
679                                                                                6 => array(
680                                                                                        'field' => 'contact.names_ordered',
681                                                                                        'type'  => 'LIKE',
682                                                                                        'value' => '6%'
683                                                                                ),
684                                                                                7 => array(
685                                                                                        'field' => 'contact.names_ordered',
686                                                                                        'type'  => 'LIKE',
687                                                                                        'value' => '7%'
688                                                                                ),
689                                                                                8 => array(
690                                                                                        'field' => 'contact.names_ordered',
691                                                                                        'type'  => 'LIKE',
692                                                                                        'value' => '8%'
693                                                                                ),
694                                                                                9 => array(
695                                                                                        'field' => 'contact.names_ordered',
696                                                                                        'type'  => 'LIKE',
697                                                                                        'value' => '9%'
698                                                                                ),
699                                                                        ),
700                                                                ),
701                                                        );
702                                                        $find_restric[0][1] =  array(
703                                                                'type'  => 'branch',
704                                                                'value' => 'OR',
705                                                                'sub_branch' => array(
706                                                                        0 => array(
707                                                                        'field' => 'contact.account_type',
708                                                                        'type'  => '=',
709                                                                        'value' => 'u'
710                                                                        ),
711                                                                        /*1 => array(
712                                                                        'field' => 'contact.account_type',
713                                                                        'type'  => '=',
714                                                                        'value' => 'g'
715                                                                        ),*/
716                                                                        2 => array(
717                                                                        'field' => 'contact.account_type',
718                                                                        'type'  => '=',
719                                                                        'value' => 'l'
720                                                                        )
721                                                                )
722                                                        );
723                                                }
724                                               
725                                                $find_field[0] = array('contact.id_contact','contact.names_ordered','contact.account_type');
726                                               
727                                                $find_other[0] = array(
728                                                        //'offset' => (($page-1)*$this->page_info['n_cards']),
729                                                        //'limit'  => $this->page_info['n_cards'],
730                                                        'order'  => 'contact.names_ordered'
731                                                );
732                                               
733                                                break;
734                                       
735                                        case 'bo_company_manager':
736                                                $field_name = 'id_company';
737       
738                                                $find_field[0] = array('company.id_company','company.company_name');
739                                               
740                                                $find_other[0] = array(
741                                                        //'offset' => (($page-1)*$this->page_info['n_cards']),
742                                                        //'limit'  => $this->page_info['n_cards'],
743                                                        'order'  => 'company.company_name'
744                                                );
745       
746                                                $find_restric[0] = array(
747                                                        0 => array(
748                                                                'field' => 'company.company_name',
749                                                                'type'  => 'iLIKE',
750                                                                'value' => $letter !== 'all' ? $letter.'%' : '%'
751                                                        )
752                                                );
753                                                       
754                                                break;
755
756                                        case 'bo_group_manager':
757                                       
758                                                $field_name = 'id_group';
759                                               
760                                                if ($letter !== 'number')       {
761                                                       
762                                                        $find_restric[0] = array(
763                                                                0 => array(
764                                                                        'field' => 'group.title',
765                                                                        'type'  => 'iLIKE',
766                                                                        'value' => $letter !== 'all' ? $letter.'%' : '%'
767                                                                )
768                                                        );
769                                                }
770                                                 else {
771                                                       
772                                                        $find_restric[0] = array(
773                                                                0 => array(
774                                                                                        'field' => 'group.title',
775                                                                                        'type'  => 'LIKE',
776                                                                                        'value' => '0%'                                                                         
777                                                                )
778                                                        );                                             
779                                                }
780                                               
781                                                array_push($find_restric[0],  array(
782                                                                                        'field' => 'group.owner',
783                                                                                        'type'  => '=',
784                                                                                        'value' => $GLOBALS['phpgw_info']['user']['account_id']                                                                         
785                                                                )
786                                                );
787                                               
788                                                $find_field[0] = array('group.id_group','group.title','group.short_name');                                             
789                                                $find_other[0] = array(
790                                                        'order'  => 'group.title'
791                                                );
792                                               
793                                                break;
794                                               
795                                        case 'bo_catalog_group_catalog':
796                                                $this->page_info['actual_entries'] = false;
797                                               
798                                                $this->page_info['actual_letter'] = $letter;
799                                                $this->page_info['actual_page'] = 0;
800                                               
801                                                $this->save_session();
802                                                $final[0] = 0;
803                                                $final[1] = $this -> typeContact;
804                                                echo serialize($final);                                         
805                                                return;
806
807                                }
808                               
809                                $result = $this->bo->find($find_field[0],$find_restric[0],$find_other[0]);
810                                $n_entries = count($result);
811                               
812                                if ($n_entries)
813                                {
814                                        //echo 'N_entries: '.$n_entries.'<br>';
815                                        $this->page_info['n_pages'] = ceil($n_entries/($this->page_info['n_cards'] ? $this->page_info['n_cards'] : 1));
816                                }
817                                else
818                                {
819                                        $this->page_info['n_pages'] = 0;
820                                }
821
822                                if (!$result)
823                                {
824                                        $this->page_info['actual_entries'] = false;
825                                       
826                                        $this->page_info['actual_letter'] = $letter;
827                                        $this->page_info['actual_page'] = 0;
828                                       
829                                        $this->save_session();                         
830                                        $final[0] = 0;
831                                        $final[1] = $this -> typeContact;
832                                        echo serialize($final);                                                                                 
833                                        return;
834                                }
835                                else
836                                {
837                                        unset($this->page_info['actual_entries']);
838                                        foreach ($result as $id => $value)
839                                        {
840                                                $this->page_info['actual_entries'][] = $value[$field_name];
841                                        }
842                                        //print_r($this->page_info['actual_entries']);
843                                }
844                        }
845                        else if ($letter === 'search')
846                        {
847                                if (!$ids and $this->page_info['actual_letter'] !== 'search')
848                                {
849                                        $this->page_info['actual_entries'] = false;
850                                       
851                                        $this->page_info['actual_letter'] = $letter;
852                                        $this->page_info['actual_page'] = 0;
853                                       
854                                        $this->save_session();
855                                        $final[0] = 0;
856                                        $final[1] = $this -> typeContact;
857                                        echo serialize($final);                                 
858                                        return;
859                                }
860                                else if ($ids)
861                                {                               
862                                        $this->page_info['actual_letter']  = $letter;
863                                        $this->page_info['actual_entries'] = $ids;
864                                        $this->page_info['n_pages'] = ceil(count($ids)/($this->page_info['n_cards'] ? $this->page_info['n_cards'] : 1));
865                                }
866                        }
867                        else
868                        {
869                                unset($ids);
870                        }
871
872                        if ($this->page_info['actual_entries'])
873                        {
874                                if ($page >= $this->page_info['n_pages'])
875                                {
876                                        $page = $this->page_info['n_pages'];
877                                }
878                               
879                                $final = array(
880                                        0 => (int)$this->page_info['n_pages'],
881                                        1 => (int)$page,
882                                        2 => array(
883                                                0 => 'cc_company',
884                                                1 => 'cc_name',
885                                                2 => 'cc_title',
886                                                3 => 'cc_phone',
887                                                4 => 'cc_mail',
888                                                5 => 'cc_alias',
889                                                6 => 'cc_id',
890                                                7 => 'cc_forwarding_address'
891                                        )
892                                );
893                               
894                                //echo 'Page: '.$page.'<br>';
895                                $id_i = (($page-1)*$this->page_info['n_cards']);
896                                $id_f = $id_i + $this->page_info['n_cards'];
897                                $n_entries = count($this->page_info['actual_entries']);
898                               
899                                //echo 'ID_I: '.$id_i.'<br>';
900                                //echo 'ID_F: '.$id_f.'<br>';
901                                ///---------------- Correção Temporária PHP5 -----------------------///
902                                $ids = array();
903                                $array_temp = array();                 
904                                                               
905                                foreach($this->page_info['actual_entries'] as $key=>$tmp){
906                                        $array_temp[] = $tmp;                           
907                                }       
908                               
909                                for($i = $id_i; $i < $id_f and $i < $n_entries; $i++)
910                                {
911                                        $ids[] = $array_temp[$i];
912                                }
913                               
914                                /// Original
915                                //for($i = $id_i; $i < $id_f and $i < $n_entries; $i++)
916                                //{
917                                //      $ids[] = $this->page_info['actual_entries'][$i];
918                                //}
919                                ///
920                               
921                                $fields = $this->bo->catalog->get_fields(false);
922
923                                if( $this -> typeContact == 'groups') {
924                                        $final = array(
925                                                0 => (int)$this->page_info['n_pages'],
926                                                1 => (int)$page,
927                                                2 => array(
928                                                        0 => 'cc_title',
929                                                        1 => 'cc_short_name',
930                                                        2 => 'cc_id',
931                                                        3 => 'cc_contacts'
932                                                )                                               
933                                        );                                     
934                                       
935                                        $groups =& $this->bo->catalog->get_multiple_entries($ids,$fields);
936                                       
937                                        $i = 0;
938                                        // contatos do grupo
939                                        $boGroups = CreateObject('contactcenter.bo_group');                                     
940                                        $contacts = array();
941                                        foreach($groups as $group)              {
942                                                                               
943                                                $final[3][$i][0] = $group['title'] ? $group['title'] : 'none';
944                                                $final[3][$i][1] = $group['short_name'] ? $group['short_name'] : 'none';                                               
945                                                $final[3][$i][2] = $group['id_group'] ? $group['id_group'] : 'none';
946                                                $contacts = $boGroups -> get_contacts_by_group($group['id_group']);
947                                                $final[3][$i][3] = $contacts;
948                                                $i++;                                                   
949                                        }
950                                       
951                                        $this->page_info['actual_letter'] = $letter;
952                                        $this->page_info['actual_page'] = $page;                                       
953                                       
954                                       
955                                        $lnk_compose = "location.href=('../expressoMail1_2/index.php?to=";
956                                       
957                                        $final[5] = '<span class="link"  onclick="'.$lnk_compose;
958                                        $final[10] = 'groups';                                                                                                                                                                                                                         
959                                        $this->save_session();                                 
960                                        echo serialize($final);
961                                        return;                                 
962                                }
963                               
964                                $fields['photo'] = true;
965                                $fields['names_ordered'] = true;
966                                $fields['alias'] = true;
967                                $fields['account_type'] = true;
968                                $fields['companies'] = 'default';
969                                $fields['connections'] = 'default';
970                                $contacts =& $this->bo->catalog->get_multiple_entries($ids,$fields);
971                               
972                               
973                                if (!is_array($contacts) or !count($contacts))
974                                {
975                                        $final[0] = 0;
976                                        $final[1] = $this -> typeContact;
977                                        echo serialize($final);
978                                        return;
979                                }
980                               
981                                $i = 0;
982                                foreach($contacts as $contact)
983                                {
984                                        $final[3][$i][0] = $contact['companies']['company1']['company_name']?$contact['companies']['company1']['company_name']:'none';
985                                        $final[3][$i][1] = $contact['names_ordered'] ? $contact['names_ordered'] : 'none';
986                                        $final[3][$i][2] = $contact['companies']['company1']['title']?$contact['companies']['company1']['title']:'none';
987
988                                        /* Select the correct Email and Telephone to be shown */
989                                        $preferences = ExecMethod('contactcenter.ui_preferences.get_preferences');
990                                        if (!is_array($preferences))
991                                        {
992                                                $preferences['personCardEmail'] = 1;
993                                                $preferences['personCardPhone'] = 2;
994                                        }
995                                        if ($contact['connections'])
996                                        {
997                                                $default_email_found = false;
998                                                $default_phone_found = false;
999                                                foreach($contact['connections'] as $conn_info)
1000                                                {
1001                                                        if ($conn_info['id_type'] == $preferences['personCardEmail'] and !$default_email_found)
1002                                                        {
1003                                                                if ($conn_info['connection_is_default'])
1004                                                                {
1005                                                                        $default_email_found = true;
1006                                                                }
1007                                                                $final[3][$i][4] = $conn_info['connection_value'] ? $conn_info['connection_value'] : 'none';
1008                                                        }
1009                                                        else if ($conn_info['id_type'] == $preferences['personCardPhone'] and !$default_phone_found)
1010                                                        {
1011                                                                if ($conn_info['connection_is_default'])
1012                                                                {
1013                                                                        $default_phone_found = true;
1014                                                                }
1015                                                                $final[3][$i][3] = $conn_info['connection_value'] ? $conn_info['connection_value'] : 'none';
1016                                                        }
1017                                                }
1018                                        }
1019                                       
1020                                        if (!$final[3][$i][3])
1021                                        {
1022                                                $final[3][$i][3] = 'none';
1023                                        }
1024                                       
1025                                        if (!$final[3][$i][4])
1026                                        {
1027                                                $final[3][$i][4] = 'none';
1028                                        }
1029
1030                                        $final[3][$i][5] = $contact['alias']?$contact['alias']:'none';
1031                                        $final[3][$i][6] = $ids[$i];
1032
1033                                //      If contact is a public list, then load the forwarding addresses.
1034                                        if($contact['account_type'][0] == 'l')
1035                                                $final[3][$i][7] = array();
1036
1037                                        $final[4][$i] = $contact['photo'] ? 1  : 0;
1038                                        $i++;
1039                                }
1040                                $lnk_compose = "location.href=('../expressoMail1_2/index.php?to=";                             
1041                                $final[5] = '<span class="link" onclick="'.$lnk_compose;
1042                               
1043                               
1044                                $this->page_info['actual_letter'] = $letter;
1045                                $this->page_info['actual_page'] = $page;
1046                               
1047                                $this->save_session();                         
1048                                echo serialize($final);
1049                                return;
1050                        }
1051                       
1052                        $this->page_info['actual_letter'] = $letter;
1053                        $this->page_info['actual_page'] = $page;
1054                       
1055                        $this->save_session();
1056                       
1057                        $final[0] = 0;
1058                        $final[1] = $this -> typeContact;
1059                        echo serialize($final);
1060                }
1061               
1062                /*!
1063               
1064                        @function get_group_data
1065                        @abstract Returns all the information of a given Group
1066                        @author Nilton Emilio Buhrer Neto
1067                       
1068                        @param (integer) $id The id to get information
1069               
1070                */             
1071                function get_group_data($id)
1072                {
1073                        $this->bo->catalog = CreateObject('contactcenter.bo_group_manager');
1074                        $fields = $this->bo->catalog->get_fields(true);
1075                        $data = $this->bo->catalog->get_single_entry($id,$fields);
1076                       
1077                        if($id) {                       
1078                                // get All Contacts by group.
1079                                $data['contact_in_list'] = $this->bo->catalog->get_contacts_by_group($id);                                                             
1080                        }
1081                       
1082                        $boGroup = CreateObject('contactcenter.bo_group');
1083                                               
1084                        $data['contact_list'] = $boGroup->get_all_contacts();
1085                       
1086                        $data['result'] = 'ok';                                                         
1087                        echo serialize($data);                 
1088                }               
1089               
1090                /*!
1091               
1092                        @function get_full_data
1093                        @abstract Returns all the information of a given Entry
1094                        @author Raphael Derosso Pereira
1095                       
1096                        @param (integer) $id The id to get information
1097               
1098                */
1099                function get_full_data($id)
1100                {
1101                        $dateformat = $GLOBALS['phpgw_info']['user']['preferences']['common']['dateformat'];
1102                        $this->bo->catalog = CreateObject('contactcenter.bo_people_catalog');           
1103                        $fields = $this->bo->catalog->get_fields(true);
1104                        $fields['photo'] = false;
1105                        $entry = $this->bo->catalog->get_single_entry($id,$fields);
1106
1107                        if (is_bool($entry['given_names']))
1108                        {
1109                                $data['result'] = 'false';
1110                                echo serialize($data);
1111                                return;
1112                        }
1113
1114                        $date = explode('-', $entry['birthdate']);
1115                        $j = 0;
1116                        for ($i = 0; $i < 5; $i+=2)
1117                        {
1118                                switch($dateformat{$i})
1119                                {
1120                                        case 'Y':
1121                                                $birthdate[$j] = $date[0];
1122                                                break;
1123
1124                                        case 'm':
1125                                        case 'M':
1126                                                $birthdate[$j] = $date[1];
1127                                                break;
1128
1129                                        case 'd':
1130                                                $birthdate[$j] = $date[2];
1131                                }
1132                                $j++;
1133                        }
1134                        $datecount = 0;
1135                       
1136                        $data['result'] = 'ok';
1137                        $data['cc_full_add_contact_id'] = $id;
1138
1139                        /* Personal Data */
1140                        $data['personal']['cc_pd_photo'] = '../index.php?menuaction=contactcenter.ui_data.data_manager&method=get_photo&id='.$id;
1141                        $data['personal']['cc_pd_alias'] = $entry['alias'];
1142                        $data['personal']['cc_pd_given_names'] = $entry['given_names'];
1143                        $data['personal']['cc_pd_family_names'] = $entry['family_names'];
1144                        $data['personal']['cc_pd_full_name'] = $entry['names_ordered'];
1145                        $data['personal']['cc_pd_suffix'] = $entry['id_suffix'];
1146                        $data['personal']['cc_pd_birthdate_0'] = $birthdate[0];
1147                        $data['personal']['cc_pd_birthdate_1'] = $birthdate[1];
1148                        $data['personal']['cc_pd_birthdate_2'] = $birthdate[2];
1149                        //$data['personal']['cc_pd_sex'] = $entry['sex'] === 'M' ? 1 : ($entry['sex'] === 'F' ? 2 : 0);
1150                        $data['personal']['cc_pd_prefix'] = $entry['id_prefix'];
1151                        $data['personal']['cc_pd_gpg_finger_print'] = $entry['pgp_key'];
1152                        $data['personal']['cc_pd_notes'] = $entry['notes'];
1153
1154                        /* Addresses */
1155                        if (is_array($entry['addresses']))
1156                        {
1157                                $data['addresses'] = $entry['addresses'];
1158                        }
1159
1160                        /* Connections */
1161                        if (is_array($entry['connections']))
1162                        {
1163                                $data['connections'] = array();
1164                                foreach ($entry['connections'] as $connection)
1165                                {
1166                                        $type = $connection['id_type'];
1167                                        $i = count($data['connections'][$type]);
1168                                        $data['connections'][$type][$i]['id'] = $connection['id_connection'];
1169                                        $data['connections'][$type][$i]['name'] = $connection['connection_name'];
1170                                        $data['connections'][$type][$i]['value'] = $connection['connection_value'];
1171                                        $data['connections'][$type][$i]['is_default'] = $connection['connection_is_default'];
1172                                }
1173                        }
1174//                      print_r($data);
1175
1176                        /* Relations */
1177                       
1178                        echo serialize($data);
1179                }
1180
1181                /*!
1182
1183                        @function get_contact_full_add_const
1184                        @abstract Returns all the constant fields in Contact Full Add Window to the JS
1185                        @author Raphael Derosso Pereira
1186                */
1187                function get_contact_full_add_const()
1188                {
1189                        $data = array();
1190                        $boPeopleCatalog = CreateObject('contactcenter.bo_people_catalog');
1191                        $predata[] = $boPeopleCatalog -> get_all_prefixes();
1192                        $predata[] = $boPeopleCatalog -> get_all_suffixes();
1193                        $predata[] = $boPeopleCatalog -> get_all_addresses_types();
1194                        $predata[] = $boPeopleCatalog -> get_all_countries();
1195                        $predata[] = $boPeopleCatalog -> get_all_connections_types();
1196                        //$predata[] = $this->bo->catalog->get_all_relations_types();
1197
1198                        $i = 0;
1199                        foreach($predata as $data_)
1200                        {
1201                                if ($data_)
1202                                {
1203                                        $data[$i] = $data_;
1204                                }
1205
1206                                $i++;
1207                        }
1208
1209                        if (count($data))
1210                        {
1211                                echo serialize($data);
1212                                return;
1213                        }
1214                       
1215                        echo 0;
1216                }
1217               
1218                /*!
1219               
1220                        @function quick_add
1221                        @abstract Adds a new Contact using the Quick Add interface
1222                        @author Raphael Derosso Pereira
1223                       
1224                        @param string $sdata Serialized data
1225                */
1226                function quick_add($sdata)
1227                {
1228                       
1229                        $sdata = str_replace('\\"', '"', $sdata);
1230                        $new_array = unserialize($sdata);
1231                        $tdata = array();
1232                       
1233                        foreach($new_array as $tmp)
1234                                $tdata[] = $tmp;
1235                       
1236                        if (!$tdata)
1237                        {
1238                                echo serialize(array(
1239                                        'msg'    => lang('Problems on adding your Contact. Invalid Data came from client. No Contact added!'),
1240                                        'status' => 'abort'
1241                                ));
1242                               
1243                                return;
1244                        }
1245                       
1246                        // verifica se email já existe!
1247                        $boGroup = CreateObject('contactcenter.bo_group');
1248                        $contact = $boGroup->verify_contact($tdata[4]);
1249                                                                                               
1250                        if($contact)
1251                        {                                                       
1252                                $str_contact = "\r\n - ".implode("\r\n - ",$contact);
1253                               
1254                                echo serialize(array(
1255                                        'msg'    => lang('Problems on adding your Contact. The email "%1" already exists in: %2',$tdata[4], $str_contact),
1256                                        'status' => 'alreadyExists'
1257                                ));
1258                               
1259                                return;                 
1260                        }
1261
1262                        $data['alias'] = $tdata[0];
1263                        $data['given_names'] = $tdata[1];
1264                        $data['family_names'] = $tdata[2];
1265//                      $data['connections']['default_phone']['id_typeof_connection'] = 1;
1266                        $data['connections']['default_phone']['connection_name'] = lang('Main');
1267                        $data['connections']['default_phone']['connection_value'] = $tdata[3];
1268//                      $data['connections']['default_email']['id_typeof_connection'] = 2;
1269                        $data['connections']['default_email']['connection_name'] = lang('Main');
1270                        $data['connections']['default_email']['connection_value'] = $tdata[4];
1271
1272                        $boPeople = CreateObject('contactcenter.bo_people_catalog');
1273
1274                        if ($boPeople ->quick_add($data))
1275                        {                               
1276                                $this->page_info['changed'] = true;
1277                               
1278                                echo serialize(array(
1279                                        'msg'    => lang('Entry added with success!'),
1280                                        'status' => 'ok'
1281                                ));
1282                        }
1283                        else
1284                        {
1285                                echo serialize(array(
1286                                        'msg'    => lang('Problems on adding your Contact. No Contact added!'),
1287                                        'status' => 'error'
1288                                ));
1289                        }
1290
1291                        $this->save_session(); 
1292                       
1293                }
1294
1295                /*!
1296               
1297                        @function add_group
1298                        @abstract Adds a new Group using the Add Group interface
1299                        @author Nilton Emilio Buhrer Neto
1300                       
1301                        @param string $sdata Serialized data
1302                */
1303                function add_group($sdata)
1304                {
1305                        $sdata = str_replace('\\"', '"', $sdata);
1306                        $tdata = unserialize($sdata);
1307                        $new_tdata = array();
1308                       
1309                        if (!$tdata)
1310                        {
1311                                echo serialize(array(
1312                                        'msg'    => lang('Problems on adding your Contact. Invalid Data came from client. No Contact added!'),
1313                                        'status' => 'abort'
1314                                ));
1315                               
1316                                return;
1317                        }
1318                       
1319                        foreach($tdata as $tmp)
1320                                $new_tdata[] = $tmp;
1321                       
1322                        $data['title'] = $new_tdata[0];                 
1323                        $data['contact_in_list'] = $new_tdata[1];
1324                        $data['id_group'] = $new_tdata[2];
1325                                               
1326                        $boGroup = CreateObject('contactcenter.bo_group_manager');
1327                        $id = $boGroup -> add_group($data);
1328                       
1329                        if ($id)
1330                        {
1331                                $this->page_info['changed'] = true;
1332                               
1333                                echo serialize(array(
1334                                        'msg'    => lang('Entry added with success!'),
1335                                        'status' => 'ok'
1336                                ));
1337                        }
1338                        else
1339                        {
1340                                echo serialize(array(
1341                                        'msg'    => lang('Problems on adding your Contact. No Contact added!'),
1342                                        'status' => 'error'
1343                                ));
1344                        }
1345
1346                        $this->save_session();
1347                }
1348
1349                /*!
1350               
1351                        @function remove_group
1352                        @abstract Removes a group if the user has the right to do it
1353                        @author Nilton Emilio Buhrer Neto                       
1354                        @param (integer) $id The id to be removed
1355                               
1356                */
1357                function remove_group($id)
1358                {                               
1359                                $soGroup = CreateObject('contactcenter.so_group');                             
1360                                $data = array ('id_group' => $id);
1361                                if($soGroup -> delete($data)) {
1362                                        echo serialize(array(
1363                                                'msg'    => lang('Removed Entry ID '.$id.'!'),
1364                                                'status' => 'ok'
1365                                        ));                                                     
1366                                }
1367                                else {
1368                                        echo serialize(array(
1369                                                'msg'    => lang('Problems on adding your Contact. No Contact added!'),
1370                                                'status' => 'error'
1371                                        ));
1372                                }
1373
1374                        $this->save_session();                         
1375                }
1376
1377
1378                function remove_all_entries (){
1379               
1380                        $error = false;
1381                        $this->all_entries = $this->bo->catalog->get_all_entries_ids();
1382
1383                        foreach($this->all_entries as $index => $id) {
1384                                $result = $this->bo->catalog->remove_single_entry($id);
1385                                if(!$result) {
1386                                        $error = true;
1387                                        break;         
1388                                }
1389                        }
1390
1391                        if(!$error) {
1392                                echo serialize(array(
1393                                        'msg'    => lang('Removed Entry ID '.$id.'!'),
1394                                        'status' => 'ok'
1395                                ));
1396                        }
1397                        else {
1398                                echo serialize(array(
1399                                        'msg'    => lang('Couldn\'t remove this entry. Inform the Site Admin!'),
1400                                        'status' => 'fail'
1401                                ));
1402                        }
1403
1404                        $this->save_session();
1405                }
1406
1407                /*!
1408               
1409                        @function remove_entry
1410                        @abstract Removes an entry if the user has the right to do it
1411                        @author Raphael Derosso Pereira
1412                       
1413                        @param (integer) $id The id to be removed
1414                               
1415                */
1416                function remove_entry ($id)
1417                {
1418                        if (!is_int($id))
1419                        {
1420                                echo lang('Couldn\'t remove entry! Problem passing data to the server. Please inform admin!');
1421                                return;
1422                        }
1423                       
1424                        $this->page_info['changed'] = true;
1425                        $result = $this->bo->catalog->remove_single_entry($id);
1426                       
1427                        if ($result)
1428                        {
1429                                if ($pos = array_search($id, $this->page_info['actual_entries']))
1430                                {
1431                                        unset($this->page_info['actual_entries'][$pos]);
1432                                }
1433                               
1434                                $temp = false;
1435                                reset($this->page_info['actual_entries']);
1436                                foreach($this->page_info['actual_entries'] as $t)
1437                                {
1438                                        $temp[] = $t;
1439                                }
1440                               
1441                                $this->page_info['actual_entries'] = $temp;
1442
1443                                echo serialize(array(
1444                                        'msg'    => lang('Removed Entry ID '.$id.'!'),
1445                                        'status' => 'ok'
1446                                ));
1447                        }
1448                        else
1449                        {
1450                                echo serialize(array(
1451                                        'msg'    => lang('Couldn\'t remove this entry. Inform the Site Admin!'),
1452                                        'status' => 'fail'
1453                                ));
1454                        }
1455                       
1456                        $this->save_session();
1457                }
1458
1459               
1460                /*!
1461               
1462                        @function post_full_add
1463                        @abstract Saves all the information altered/entered in the Full Add
1464                                window
1465                        @author Raphael Derosso Pereira
1466
1467                */
1468                function post_full_add()
1469                {
1470                        $data = unserialize(str_replace('\\"', '"', $_POST['data']));
1471                        $this -> bo -> catalog = CreateObject('contactcenter.bo_people_catalog');
1472
1473//                      echo str_replace('\\"', '"', $_POST['data']);
1474                       
1475                        if (!is_array($data))
1476                        {
1477                                echo serialize(array(
1478                                        'msg' => lang('<p>Some problem receiving data from browser. This is probably a bug in ContactCenter<br>'.
1479                                                  'Please go to eGroupWare Bug Reporting page and report this bug.<br>'.
1480                                                          'Sorry for the inconvenient!<br><br>'.
1481                                                          '<b><i>ContactCenter Developer Team</i></b></p>'),
1482                                        'status' => 'fatal'
1483                                ));
1484                                return;
1485                        }
1486//                      print_r($data);
1487//                      echo '<br><br>';
1488
1489                        $replacer = $data['commercialAnd'];
1490                        unset($data['commercialAnd']);
1491                        if (!is_string($replacer) or strpos($replacer, "'") or strpos($replacer, '"'))
1492                        {
1493                                echo serialize(array(
1494                                        'msg' => lang('Invalid \'&\' replacer! This may be an attempt to bypass Security! Action aborted!'),
1495                                        'status' => 'fatal'
1496                                ));
1497                               
1498                                return;
1499                        }
1500
1501                        if ($data['id_contact'])
1502                        {
1503                                $id = $data['id_contact'];
1504                                $id_photo = $id;
1505                                unset($data['id_contact']);
1506                        }
1507                        else
1508                        {
1509                                $id_photo = '_new_';
1510                        }
1511                       
1512                        /*
1513                         * Process Photo, if available
1514                         */
1515                        $sleep_count = 0;
1516                        $photo_ok = $GLOBALS['phpgw']->session->appsession('ui_data.photo','contactcenter');
1517                        while($photo_ok[0]{0} !== 'o' and $photo_ok[1]{0} === 'y')
1518                        {
1519                                sleep(1);
1520                                $photo_ok = $GLOBALS['phpgw']->session->appsession('ui_data.photo','contactcenter');
1521                                $sleep_count++;
1522
1523                                if ($sleep_count > 35)
1524                                {
1525                                        // TODO
1526                                        return;
1527                                }
1528                        }
1529                        $GLOBALS['phpgw']->session->appsession('ui_data.photo','contactcenter', array('wait', 'n'));
1530                       
1531                        if (isset($this->page_info['photos'][$id_photo]))
1532                        {
1533                                if (array_search($this->page_info['photos'][$id_photo]['status'], array('changed', 'sync')) === false)
1534                                {
1535                                        echo serialize(array(
1536                                                'msg' => $this->page_info['photos'][$id_photo]['msg'],
1537                                                'status' => $this->page_info['photos'][$id_photo]['status']
1538                                        ));
1539
1540                                        return;
1541                                }
1542
1543                                $data['photo'] = $this->page_info['photos'][$id_photo]['content'];
1544                                unset($this->page_info['photos'][$id_photo]);
1545                                $this->save_session();
1546                        }
1547                       
1548                        /*
1549                         * Arrange Date so it gets inserted correctly
1550                         */
1551                         
1552                        $dateformat = $GLOBALS['phpgw_info']['user']['preferences']['common']['dateformat'];
1553               
1554                        $j = 0;
1555                        for ($i = 0; $i < 5; $i+=2)
1556                        {
1557                                switch($dateformat{$i})
1558                                {
1559                                        case 'Y':
1560                                                $date[$j]['size'] = 4;
1561                                                $date[$j]['digit'] = 'Y';
1562                                                break;
1563
1564                                        case 'm':
1565                                        case 'M':
1566                                                $date[$j]['size'] = 2;
1567                                                $date[$j]['digit'] = 'M';
1568                                                break;
1569
1570                                        case 'd':
1571                                                $date[$j]['size'] = 2;
1572                                                $date[$j]['digit'] = 'D';
1573                                }
1574                                $j++;
1575                        }
1576                        $datecount = 0;
1577
1578                        /* Verify Data and performs insertion/update */
1579                        foreach($data as $field => $value)
1580                        {
1581                                if ($value == '' or is_null($value))
1582                                {
1583                                        unset($data[$field]);
1584                                        continue;
1585                                }
1586                               
1587                                switch($field)
1588                                {
1589                                        case 'alias':
1590                                        case 'given_names':
1591                                        case 'family_names':
1592                                        case 'names_ordered':
1593                                        case 'pgp_key':
1594                                        case 'notes':
1595                                        case 'photo':
1596                                                /* Do Nothing. This is just to make sure no invalid field is passed */
1597                                                break;
1598                                       
1599                                        case 'id_status':
1600                                        case 'id_prefix':
1601                                        case 'id_suffix':
1602                                                if ($data[$field] == 0)
1603                                                {
1604                                                        unset($data[$field]);
1605                                                }
1606                                                break;
1607                                       
1608                                        case 'birthdate_0':
1609                                        case 'birthdate_1':
1610                                        case 'birthdate_2':
1611                                       
1612                                                switch($date[$datecount]['digit'])
1613                                                {
1614                                                        case 'Y':
1615                                                                $date['value'][2] = (int) $data[$field];
1616                                                                break;
1617
1618                                                        case 'M':
1619                                                                $date['value'][0] = (int) $data[$field];
1620                                                                break;
1621
1622                                                        case 'D':
1623                                                                $date['value'][1] = (int) $data[$field];
1624                                                                break;
1625                                                }
1626                                                unset($data[$field]);
1627                                                $datecount++;
1628
1629                                                if ($datecount != 3)
1630                                                {
1631                                                        break;
1632                                                }
1633                                               
1634                                                if (!checkdate($date['value'][0], $date['value'][1], $date['value'][2]))
1635                                                {
1636                                                        echo serialize(array(
1637                                                                'msg' => lang('Invalid Date'),
1638                                                                'status' => 'invalid_data'
1639                                                        ));
1640                                                        return;
1641                                                }
1642                                               
1643                                                $data['birthdate'] = $date['value'][2].'-'.$date['value'][0].'-'.$date['value'][1];
1644                                                break;
1645
1646                                        case 'sex':
1647                                                if ($data[$field] !== 'M' and $data[$field] !== 'F')
1648                                                {
1649                                                        echo serialize(array(
1650                                                                'msg' => lang('Invalid Sex'),
1651                                                                'status' => 'invalid_data'
1652                                                        ));
1653                                                        return;
1654                                                }
1655                                                break;
1656
1657
1658                                        case 'addresses':
1659                                                /* Insert new cities/states */
1660                                                if (isset($value['new_states']))
1661                                                {
1662                                                        foreach($value['new_states'] as $type => $state_info)
1663                                                        {
1664                                                                $index = 'address'.$type;
1665                                                               
1666                                                                $id_state = $this->bo->catalog->add_state($state_info);
1667                                                                $data['addresses'][$index]['id_state'] = $id_state;
1668
1669                                                                if ($value['new_cities'][$type])
1670                                                                {
1671                                                                        $value['new_cities'][$type]['id_state'] = $id_state;
1672                                                                }
1673                                                        }
1674
1675                                                        unset($data['addresses']['new_states']);
1676                                                }
1677
1678                                                if (isset($value['new_cities']))
1679                                                {
1680                                                        foreach($value['new_cities'] as $type => $city_info)
1681                                                        {
1682                                                                $index = 'address'.$type;
1683                                                               
1684                                                                $id_city = $this->bo->catalog->add_city($city_info);
1685                                                                $data['addresses'][$index]['id_city'] = $id_city;
1686                                                        }
1687
1688                                                        unset($data['addresses']['new_cities']);
1689                                                }
1690
1691                                        break;
1692
1693                                        case 'connections':
1694                                                /* Does nothing... */
1695                                                break;
1696
1697                                        default:
1698                                                echo serialize(array(
1699                                                        'msg' => lang('Invalid field: ').$field,
1700                                                        'status' => 'invalid_data'
1701                                                ));
1702                                                return;
1703                                }
1704                        }
1705
1706                        $code = '$id = $this->bo->catalog->';
1707
1708                        if (!is_null($id) and $id !== '')
1709                        {
1710                                $code .= $code.'update_single_info($id, $data);';
1711                                $result = array(
1712                                        'msg' => lang('Updated Successfully!'),
1713                                        'status' => 'ok'
1714                                );
1715                        }
1716                        else
1717                        {
1718                                $code .= 'add_single_entry($data);';
1719                                $result = array(
1720                                        'msg' => lang('Entry Added Successfully!'),
1721                                        'status' => 'ok'
1722                                );
1723                        }
1724                       
1725                        eval($code);
1726
1727                        if (!($id))
1728                        {
1729                                $result = array(
1730                                        'msg' => lang('Some problem occured when trying to insert/update contact information.<br>'.
1731                                                   'Report the problem to the Administrator.'),
1732                                        'status' => 'fail'
1733                                );
1734                        }
1735
1736                        echo serialize($result);
1737                }
1738
1739                /*!
1740               
1741                        @function post_photo
1742                        @abstract Wrapper to post a photo without reload a page.
1743                        @author Raphael Derosso Pereira
1744
1745                */
1746                function post_photo($id)
1747                {
1748                        //print_r($_FILES);
1749                        $GLOBALS['phpgw']->session->appsession('ui_data.photo','contactcenter', array('wait', 'y'));
1750                       
1751                        if (!is_array($_FILES) and is_array(!$_FILES['cc_pd_photo']))
1752                        {
1753                                $this->page_info['photos'][$id]['status'] = 'no_upload';
1754                                $this->page_info['photos'][$id]['msg'] = lang('No Photos uploaded to Server.');
1755                               
1756                                $this->save_session();
1757                                $GLOBALS['phpgw']->session->appsession('ui_data.photo','contactcenter', array('ok', 'y'));
1758                                return;
1759                        }
1760
1761                        if (!function_exists('imagecreate'))
1762                        {
1763                                $this->page_info['photos'][$id]['status'] = 'no_GD_lib';
1764                                $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.');
1765                               
1766                                $this->save_session();
1767                                $GLOBALS['phpgw']->session->appsession('ui_data.photo','contactcenter', array('ok', 'y'));
1768                                return;
1769                        }
1770
1771                        // TODO: Get Max Size from preferences!
1772                        if ($_FILES['cc_pd_photo']['size'] > 1000000)
1773                        {
1774                                $this->page_info['photos'][$id]['status'] = 'too_large';
1775                                $this->page_info['photos'][$id]['msg'] = lang('Image too large! ContactCenter limits the image size to 1 Mb');
1776
1777                                $this->save_session();
1778                                $GLOBALS['phpgw']->session->appsession('ui_data.photo','contactcenter', array('ok', 'y'));
1779                                return;
1780                        }
1781
1782                        if ($_FILES['cc_pd_photo']['error'])
1783                        {
1784                                $this->page_info['photos'][$id]['status'] = 'error';
1785                                $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'];
1786
1787                                $this->save_session();
1788                                $GLOBALS['phpgw']->session->appsession('ui_data.photo','contactcenter', array('ok', 'y'));
1789                                return;
1790                        }
1791                       
1792                        switch($_FILES['cc_pd_photo']['type'])
1793                        {
1794                                case 'image/jpeg':
1795                                case 'image/pjpeg':
1796                                        $src_img = imagecreatefromjpeg($_FILES['cc_pd_photo']['tmp_name']);
1797                                        if ($src_img == '')
1798                                        {
1799                                                $bogus = true;
1800                                        }
1801                                        break;
1802
1803                                case 'image/png':
1804                                case 'image/x-png':
1805                                        $src_img = imagecreatefrompng($_FILES['cc_pd_photo']['tmp_name']);
1806                                        if ($src_img == '')
1807                                        {
1808                                                $bogus = true;
1809                                        }
1810                                        break;
1811
1812                                case 'image/gif':
1813                                        $src_img = imagecreatefromgif($_FILES['cc_pd_photo']['tmp_name']);
1814                                        if ($src_img == '')
1815                                        {
1816                                                $bogus = true;
1817                                        }
1818                                        break;
1819
1820                                default:
1821                                       
1822                                        $this->page_info['photos'][$id]['status'] = 'invalid_image';
1823                                        $this->page_info['photos'][$id]['msg'] = lang('The file must be an JPEG, PNG or GIF Image.');
1824
1825                                        $this->save_session();
1826                                        $GLOBALS['phpgw']->session->appsession('ui_data.photo','contactcenter', array('ok', 'y'));
1827                                        return;
1828                        }
1829
1830                        if ($bogus)
1831                        {
1832                                        $this->page_info['photos'][$id]['status'] = 'invalid_file';
1833                                        $this->page_info['photos'][$id]['msg'] = lang('Couldn\'t open Image. It may be corrupted or internal library doesn\'t support this format.');
1834                                       
1835                                        $this->save_session();
1836                                        $GLOBALS['phpgw']->session->appsession('ui_data.photo','contactcenter', array('ok', 'y'));
1837                                        return;
1838                        }
1839                       
1840                        $img_size = getimagesize($_FILES['cc_pd_photo']['tmp_name']);
1841                        $dst_img = imagecreatetruecolor(60, 80);
1842                       
1843                        if (!imagecopyresized($dst_img, $src_img, 0, 0, 0, 0, 60, 80, $img_size[0], $img_size[1]))
1844                        {
1845                                $this->page_info['photos'][$id]['status'] = 'invalid_file';
1846                                $this->page_info['photos'][$id]['msg'] = lang('Couldn\'t open Image. It may be corrupted or internal library doesn\'t support this format.');
1847                               
1848                                $this->save_session();
1849                                $GLOBALS['phpgw']->session->appsession('ui_data.photo','contactcenter', array('ok', 'y'));
1850                                return;
1851                        }
1852                       
1853                        ob_start();
1854                        imagepng($dst_img);
1855                        $this->page_info['photos'][$id]['content'] = ob_get_contents();
1856                        ob_end_clean();
1857
1858                        $this->page_info['photos'][$id]['status'] = 'changed';
1859                        $this->page_info['photos'][$id]['msg'] = lang('Photo Successfully Updated!');
1860
1861                        $this->save_session();
1862               
1863                        $GLOBALS['phpgw']->session->appsession('ui_data.photo','contactcenter', array('ok', 'y'));
1864
1865                        imagedestroy($src_img);
1866                        imagedestroy($dst_img);
1867                        echo 'ok';
1868                        return;
1869                }
1870
1871
1872                /*!
1873
1874                        @function get_photo
1875                        @abstract Returns the photo to the browser
1876                        @author Raphael Derosso Pereira
1877
1878                */
1879                function get_photo($id)
1880                {
1881                        $fields = $this->bo->catalog->get_fields(false);
1882                        $fields['photo'] = true;
1883                       
1884                        $contact = $this->bo->catalog->get_single_entry($id, $fields);
1885
1886                        if (!$contact['photo'])
1887                        {
1888                                header('Content-type: image/png');
1889                                echo file_get_contents(PHPGW_INCLUDE_ROOT.'/contactcenter/templates/default/images/photo_celepar.png');
1890                                return;
1891                        }
1892                       
1893                        header('Content-type: image/jpeg');
1894                        $photo = imagecreatefromstring ($contact['photo']);
1895                        $width = imagesx($photo);
1896                        $height = imagesy($photo);
1897                        $twidth = 80;
1898                        $theight = 106;
1899                        $small_photo = imagecreatetruecolor ($twidth, $theight);
1900                        imagecopyresampled($small_photo, $photo, 0, 0, 0, 0,$twidth, $theight, $width, $height);
1901                        imagejpeg($small_photo,"",100);
1902                        return;
1903                }
1904               
1905                /*!
1906               
1907                        @function get_states
1908                        @abstract Echos a serialized array containing all the states for the given country
1909                        @author Raphael Derosso Pereira
1910
1911                        @params $id_country The ID of the Country that contains the requested states
1912
1913                */
1914                function get_states($id_country)
1915                {
1916                        $states = $this->bo->catalog->get_all_states($id_country);
1917
1918                        if (!$states)
1919                        {
1920                                $result = array(
1921                                        'msg'    => lang('No States found for this Country.'),
1922                                        'status' => 'empty'
1923                                );
1924
1925                                echo serialize($result);
1926                                return;
1927                        }
1928                       
1929                        $result = array(
1930                                'msg'    => lang('States Successfully retrieved!'),
1931                                'status' => 'ok'
1932                        );
1933                       
1934                        foreach ($states as $state_info)
1935                        {
1936                                $result['data'][$state_info['id_state']] = $state_info['name'];
1937
1938                                if ($state_info['symbol'])
1939                                {
1940                                        $result['data'][$state_info['id_state']] .= ', '.$state_info['symbol'];
1941                                }
1942                        }
1943
1944                        echo serialize($result);
1945                }
1946
1947                /*!
1948
1949                        @function get_cities
1950                        @abstract Echos a serialized array containing all the cities of a given state
1951                        @author Raphael Derosso Pereira
1952
1953                        @param $id_country The ID of the Country that has the specified Cities (in case the
1954                                Country doesn't have any States)
1955                        @param $id_state The ID of the State that has the Cities requested
1956
1957                */
1958                function get_cities($id_country, $id_state=false)
1959                {
1960                        $cities = $this->bo->catalog->get_all_cities($id_country, $id_state);
1961
1962                        if (!$cities)
1963                        {
1964                                $result = array(
1965                                        'msg'    => lang('No Cities found for this State.'),
1966                                        'status' => 'empty'
1967                                );
1968
1969                                echo serialize($result);
1970                                return;
1971                        }
1972                       
1973                        $result = array(
1974                                'msg'    => lang('Cities Successfully retrieved!'),
1975                                'status' => 'ok'
1976                        );
1977                       
1978                        foreach ($cities as $city_info)
1979                        {
1980                                $result['data'][$city_info['id_city']] = $city_info['name'];
1981                        }
1982                       
1983                        echo serialize($result);
1984                }
1985
1986
1987                /*!
1988               
1989                        @function search
1990                        @abstract Echos a serialized array containing the IDs
1991                                of the entries that matches the search argument
1992                        @author Raphael Derosso Pereira
1993
1994                        @param string $str_data A serialized array with two informations:
1995                                $data = array(
1996                                        'search_for' => (string),
1997                                        'recursive'  => (boolean),
1998                                );
1999
2000                */
2001                function search($str_data)
2002                {
2003                        $data = unserialize($str_data);
2004
2005                        if (!is_array($data) || !$data['search_for'] || !is_array($data['fields']))
2006                        {
2007                                echo serialize(array(
2008                                        'msg'    => lang('Invalid parameters'),
2009                                        'status' => 'abort'
2010                                ));
2011
2012                                return;
2013                        }
2014
2015                        $rules  = array();
2016
2017                        if ($data['search_for'] === '*')
2018                        {
2019                                $rules = array(
2020                                        0 => array(
2021                                                'field' => $data['fields']['search'],
2022                                                'type'  => 'LIKE',
2023                                                'value' => '%'
2024                                        )
2025                                );
2026                        }
2027                        else
2028                        {
2029                                $names = explode(' ', $data['search_for']);
2030
2031                                if (!is_array($names))
2032                                {
2033                                        echo serialize(array(
2034                                                'msg'    => lang('Invalid Search Parameter'),
2035                                                'status' => 'abort'
2036                                        ));
2037                                       
2038                                        return;
2039                                }
2040                               
2041                                foreach ($names as $name)
2042                                {
2043                                        if ($name != '')
2044                                        {
2045                                                array_push($rules, array(
2046                                                        'field' => $data['fields']['search'],
2047                                                        'type'  => 'iLIKE',
2048                                                        'value' => '%'.$name.'%'
2049                                                ));
2050                                        }
2051                                }
2052                        }
2053                       
2054                        /*
2055                        $catalog = $this->bo->get_branch_by_level($this->bo->catalog_level[0]);
2056                       
2057                        if ($catalog['class'] === 'bo_people_catalog')
2058                        {
2059                                array_push($rules, array(
2060                                        'field' => 'contact.id_owner',
2061                                        'type'  => '=',
2062                                        'value' => $GLOBALS['phpgw_info']['user']['account_id']
2063                                ));
2064                        }
2065                        */
2066                       
2067                        $ids = $this->bo->find(array($data['fields']['id'], $data['fields']['search']), $rules, array('order' => $data['fields']['search'], 'sort' => 'ASC'));
2068
2069                        if (!is_array($ids) || !count($ids))
2070                        {
2071                                echo serialize(array(
2072                                        'msg'    => lang('No Entries Found!'),
2073                                        'status' => 'empty'
2074                                ));
2075
2076                                return;
2077                        }
2078
2079                        $id_field = substr($data['fields']['id'], strrpos($data['fields']['id'], '.')+1);
2080
2081                        $ids_f = array();
2082                        foreach ($ids as $e_info)
2083                        {
2084                                $ids_f[] = $e_info[$id_field];
2085                        }
2086                       
2087                        echo serialize(array(
2088                                'data'   => $ids_f,
2089                                'msg'    => lang('Found %1 Entries', count($ids)),
2090                                'status' => 'ok'
2091                        ));
2092                }
2093
2094                /*!
2095
2096                        @function get_multiple_entries
2097                        @abstract Returns an array containing the specifiend data in the default
2098                                CC UI format
2099                        @author Raphael Derosso Pereira
2100
2101                        @param array str_data A serialized array containing the ID's of the entries
2102                                to be taken, the fields to be taken and the rules to be used on the
2103                                retrieval:
2104                                $data = array(
2105                                        'ids'    => array(...),
2106                                        'fields' => array(...),
2107                                        'rules'  => array(...)
2108                                );
2109
2110                */
2111                function get_multiple_entries($str_data)
2112                {
2113                        $data = unserialize($str_data);
2114                       
2115                        if (!is_array($data) or !count($data) or !count($data['fields']) or !count($data['ids']))
2116                        {
2117                                return array(
2118                                        'msg'    => lang('Invalid Parameters'),
2119                                        'status' => 'abort'
2120                                );
2121                        }
2122
2123                        $entries = $this->bo->catalog->get_multiple_entries($data['ids'], $data['fields']);
2124                       
2125                        if (!is_array($entries) or !count($entries))
2126                        {
2127                                return array(
2128                                        'msg'    => lang('No Entries Found!'),
2129                                        'status' => 'empty'
2130                                );
2131                        }
2132
2133                        return array(
2134                                'msg'    => lang('Found %1 Entries!', count($entries)),
2135                                'status' => 'ok',
2136                                'data'   => $entries
2137                        );
2138                }
2139
2140                /*
2141
2142                        @function get_all_entries
2143                        @abstract Returns the specified fields for all catalog's entries
2144                                in the default CC UI format
2145                        @author Raphael Derosso Pereira
2146
2147                        @params array str_data A serialized array containing the fields to
2148                                be grabbed, the maximum number of entries to be returned and a
2149                                boolean specifying if the calls refers to a new grab or to an
2150                                unfinished one.
2151
2152                */
2153                function get_all_entries($str_data)
2154                {
2155                        $data = unserialize($str_data);
2156                       
2157                        if (!is_array($data) or
2158                            !count($data) or
2159                                !count($data['fields']) or
2160                                !$data['maxlength'] or
2161                                (!$data['new'] and !$data['offset']))
2162                        {
2163                                return array(
2164                                        'msg'    => lang('Invalid Parameters'),
2165                                        'status' => 'abort'
2166                                );
2167                        }
2168
2169                        if ($data['new'])
2170                        {
2171                                $this->all_entries = $this->bo->catalog->get_all_entries_ids();
2172
2173                                $this->save_session();
2174
2175                                if (!is_array($this->all_entries) or !count($this->all_entries))
2176                                {
2177                                        return array(
2178                                                'msg'    => lang('No Entries Found!'),
2179                                                'status' => 'empty'
2180                                        );
2181                                }
2182
2183                                $data['offset'] = 0;
2184                        }
2185                       
2186                        if ($data['maxlength'] != -1)
2187                        {
2188                                $result = $this->bo->catalog->get_multiple_entries(array_slice($this->all_entries, $data['offset'], $data['maxlength']), $data['fields']);
2189                        }
2190                        else
2191                        {
2192                                $result = $this->bo->catalog->get_multiple_entries($this->all_entries, $data['fields']);
2193                        }
2194
2195                        $prefs = ExecMethod('contactcenter.ui_preferences.get_preferences');
2196                       
2197                        $jsCode = array();
2198                        $count = 0;
2199                        foreach ($result as $each)
2200                        {
2201                                if (!is_array($each))
2202                                {
2203                                        continue;
2204                                }
2205
2206                                if($this-> typeContact == 'groups') {                           
2207                                       
2208                                        foreach ($each as $field => $value)     {
2209                                                                               
2210                                                if ($field === 'title') {
2211                                                        $optionName = '\\"'.$value.'\\"';
2212                                                         
2213                                                }
2214                                                else if ($field === 'short_name')       {
2215                                                       
2216                                                        $jsCode[] = '_this.entries.options[_this.entries.options.length] = new Option("'.$optionName.' ('.$value.')", "'.$count.'");';
2217                                                        $count++;                                                                                                                                                                       
2218                                                }                                       
2219                                        }
2220                                }
2221                               
2222                                else  {
2223                                        foreach ($each as $field => $value)     {
2224                                                if ($field === 'names_ordered') {
2225                                                         if(is_array($value))
2226                                $value = $value[0];
2227                                                        $name = '\\"'.$value.'\\"';
2228                                                }
2229                                                else if ($field === 'connections')      {
2230                                                       
2231                                                        foreach ($value as $connection)         {
2232                                                                if ($connection['id_type'] == $prefs['personCardEmail'])        {
2233                                                                        $jsCode[] = '_this.entries.options[_this.entries.options.length] = new Option("'.$name.' <'.$connection['connection_value'].'>", "'.$count.'");';
2234                                                                        $count++;
2235                                                                }
2236                                                        }
2237                                                }
2238                                        }
2239                                }
2240                        }
2241
2242                        $jsCodeFinal = implode("\n", $jsCode);
2243                       
2244                        $nEntries = count($result);
2245                       
2246                        if (!$nEntries)
2247                        {
2248                                return array(
2249                                        'msg'    => lang('Error while getting user information...'),
2250                                        'status' => 'abort'
2251                                );
2252                        }
2253
2254                        return array(
2255                                'msg'      => lang('Found %1 Entries!', $nEntries),
2256                                'status'   => 'ok',
2257                                'typeContact'   => $this -> typeContact,
2258                                'final'    => $nEntries + $data['offset'] < count($this->all_entries) ? false : true,
2259                                'offset'   => $data['offset'] + $nEntries,
2260                                'data'     => $jsCodeFinal
2261                        );
2262                }
2263               
2264                /*********************************************************************\
2265                 *                      Auxiliar Methods                             *
2266                \*********************************************************************/
2267
2268                /*!
2269               
2270                        @function save_session
2271                        @abstract Saves the data on the session
2272                        @author Raphael Derosso Pereira
2273               
2274                */
2275                function save_session()
2276                {
2277                        $GLOBALS['phpgw']->session->appsession('ui_data.page_info','contactcenter',$this->page_info);
2278                        $GLOBALS['phpgw']->session->appsession('ui_data.all_entries','contactcenter',$this->all_entries);
2279                }
2280
2281                /*!
2282               
2283                        @function convert_tree
2284                        @abstract Converts the tree array in the BO format to a JS tree array compatible
2285                                with the one available in eGW
2286                        @author Raphael Derosso Pereira
2287               
2288                        @param (array)  $tree    The tree in the BO format
2289                        @param (string) $name    The tree name
2290                        @param (string) $iconDir The dir where the icons are
2291                        @param (string) $parent  The parent
2292                */
2293
2294                function convert_tree($tree, &$iconDir, $parent='0')
2295                {
2296//                      echo "Entrou<br>\tPai: $parent <br>";
2297                        $rtree = array();
2298
2299                        if ($parent === '0')
2300                        {
2301//                              echo 'Root!<br>';
2302                                $rtree['0'] = array(
2303                                        'type'       => 'catalog_group',
2304                                        'id'         => '0',
2305                                        'pid'        => 'none',
2306                                        'caption'    => lang('Catalogues'),
2307                                        'class'      => 'bo_catalog_group_catalog',
2308                                        'class_args' => array('_ROOT_', '$this', '$this->get_branch_by_level($this->catalog_level[0])')
2309                                );
2310                        }
2311
2312                        foreach($tree as $id => $value)
2313                        {
2314//                              echo 'ID: '.$id.'<br>';
2315                                $rtree[$parent.'.'.$id] = array(
2316                                        'type'    => $value['type'],
2317                                        'id'      => $parent.'.'.$id,
2318                                        'pid'     => $parent,
2319                                        'caption' => $value['name']
2320                                );
2321                               
2322                                switch($value['type'])
2323                                {
2324                                        case 'catalog_group':
2325                                        case 'mixed_catalog_group':
2326                                                $rtree = $rtree + $this->convert_tree($value['sub_branch'],$iconDir,$parent.'.'.$id);
2327                                                break;
2328                                }
2329                        }
2330
2331                        if (count($rtree))
2332                        {
2333                                return $rtree;
2334                        }
2335                }
2336
2337                function get_catalog_add_contact($id){
2338
2339                        $array_participants = array();
2340                        if(!$this->bo->catalog->src_info) {
2341                                $ldap = CreateObject('contactcenter.bo_ldap_manager');
2342                                $this->bo->catalog->src_info = $ldap->srcs[1];
2343                        }
2344                       
2345                        $ds = $GLOBALS['phpgw']->common->ldapConnect($this->bo->catalog->src_info['host'], $this->bo->catalog->src_info['acc'], $this->bo->catalog->src_info['pw'], true);                             
2346                        $dn=$this->bo->catalog->src_info['dn'];
2347                        $justThese = array("givenname","givenname","sn","telephonenumber","mail");
2348                        $sr = ldap_read($ds,$id, "objectClass=*",$justThese);                                                   
2349                        $info = ldap_get_entries($ds, $sr);                                                     
2350                        for($z = 0; $z < 5; $z++) {
2351                                $participant = $info[0][$justThese[$z]];                                                                                                       
2352                                array_push($array_participants, $participant);
2353                        }
2354
2355                        ldap_close($ds);
2356                        echo serialize($array_participants);
2357                }       
2358               
2359                function get_catalog_participants_list($id)
2360                {
2361                       
2362                        $fields = $this->bo->catalog->get_fields(false);                       
2363                        $fields['names_ordered'] = true;
2364                        $fields['mail_forwarding_address'] = true;                     
2365                        $contact = $this->bo->catalog->get_single_entry($id,$fields);                   
2366                       
2367                        $array_participants = array();
2368                        $array_emails = array();
2369                       
2370                        $filter = null;
2371                        for($z = 0; $z < $contact['mail_forwarding_address']['count']; $z++) {                 
2372                                        if(strstr($contact['mail_forwarding_address'][$z],'@')) {
2373                                                $filter.="(mail=".$contact['mail_forwarding_address'][$z].")";
2374                                                $array_emails[$contact['mail_forwarding_address'][$z]] = "<font color=black>".$contact['mail_forwarding_address'][$z]."</font>";
2375                                        }                                                                                                                               
2376                                        else
2377                                                $array_participants[$z] = "<font color=red>".$contact['mail_forwarding_address'][$z]."</font>";
2378                        }                                       
2379                       
2380                        if($filter) {
2381                                $filter = "(|".$filter.")";                                                     
2382                                if(!$this->bo->catalog->src_info) {
2383                                        $ldap = CreateObject('contactcenter.bo_ldap_manager');
2384                                        $this->bo->catalog->src_info = $ldap->srcs[1];
2385                                }
2386                                $ds = $GLOBALS['phpgw']->common->ldapConnect($this->bo->catalog->src_info['host'], $this->bo->catalog->src_info['acc'], $this->bo->catalog->src_info['pw'], true);                             
2387                                $dn=$this->bo->catalog->src_info['dn'];
2388                                $justThese = array("cn","mail");
2389                                $sr = ldap_search($ds,$dn, $filter,$justThese);                                                         
2390                                $info = ldap_get_entries($ds, $sr);                                                     
2391                                for($z = 0; $z < $info['count']; $z++) {
2392                                        $participant =  '&quot;'.$info[$z]['cn'][0].'&quot; &lt;'.$info[$z]['mail'][0].'&gt;';
2393                                        $array_emails[$info[$z]['mail'][0]] = null;                                                             
2394                                        array_push($array_participants, $participant);                                 
2395                                }
2396                               
2397                                foreach($array_emails as $index => $email)
2398                                        if($email)
2399                                                array_push($array_participants, $email);                               
2400                                                                                               
2401                                ldap_close($ds);
2402                        }
2403                        sort($array_participants);
2404                        $array_participants['names_ordered'] = $contact['names_ordered'];
2405                        echo serialize($array_participants);
2406                }       
2407
2408                function export_contacts($typeExport){
2409
2410                        $boGroup = CreateObject('contactcenter.bo_group');
2411                        $contacts = $boGroup->get_all_contacts();
2412                        $streamBuffer = '';
2413
2414                        if(!count($contacts))
2415                                echo null;
2416
2417                        switch($typeExport) {
2418
2419                                case 'outlook_en':
2420                                        $streamBuffer = "Name;E-mail Address;Notes;Mobile Phone;Pager;Company;".
2421                                                        "Job Title;Home Phone;Home Fax;Business Phone;Business Fax\r\n";                                                       
2422                                        foreach($contacts as $index => $object){
2423                                                $streamBuffer.= $object['names_ordered'].";".$object['connection_value'].";;;;;;;;;\r\n";
2424                                        }
2425                                break;
2426                               
2427                                case 'outlook_pt-BR':
2428                                        $streamBuffer = "Nome;End. de email;Endereço residencial;".
2429                                        "Cidade do endereço residencial;CEP do endereço residencial;".
2430                                        "Estado;País/região do endereço residencial;Telefone residencial;".
2431                                        "Rua do endereço comercial;Cidade do endereço comercial;".
2432                                        "CEP do endereço comercial;Estado do endereço comercial;".
2433                                        "País/região do endereço comercial;Telefone comercial;Empresa;Cargo\r\n";                                                       
2434                                        foreach($contacts as $index => $object){
2435                                                $streamBuffer.= $object['names_ordered'].";".$object['connection_value'].";;;;;;;;;;;;;;\r\n";
2436                                        }
2437                                break;
2438                               
2439                                case 'thunderbird':
2440                                        $streamBuffer = "";                                                     
2441                                        foreach($contacts as $index => $object){
2442                                                $streamBuffer.= ",,".$object['names_ordered'].",,".$object['connection_value'].",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,\r\n";
2443                                        }
2444                                break;
2445                               
2446                                default:
2447                                        $streamBuffer = "Nome,Email,Nota\r\n";
2448                                        foreach($contacts as $index => $object){
2449                                                $streamBuffer.= $object['names_ordered'].",".$object['connection_value'].",\r\n";
2450                                        }
2451                                break;
2452                               
2453                        }
2454
2455                        $file = "contacts_".md5(microtime()).".swp";
2456                        $tempDir = ini_get("session.save_path");
2457                        $f = fopen($tempDir.'/'.$file,"w");
2458                        if(!$f)
2459                                echo null;
2460
2461                        fputs($f,$streamBuffer);
2462                        fclose($f);
2463
2464                        echo $tempDir.'/'.$file;
2465                }
2466
2467                function import_contacts($typeImport){
2468                                               
2469                        $delim          = ($typeImport == 'outlook' ? ';' : ',');
2470                        $is_default = ($typeImport == 'thunderbird' ? false : true);
2471                        //die(serialize(array('delimiter' => $delim, 'is_default' => $is_default)));
2472                       
2473                        if($file = $_SESSION['contactcenter']['importCSV']) {                           
2474                                unset($_SESSION['contactcenter']['importCSV']);                         
2475                                $len = filesize($file);
2476                                $count = 0;
2477                                $return = array('error' => false, '_new' => 0, '_existing' => 0, '_failure' => 0);
2478                                $handle = @fopen($file, "r") or die(serialize($return['error'] = true));                                                       
2479                                $header = @fgetcsv($handle, $len, $delim) or die(serialize($return['error'] = true));
2480                                if(count($header)  < 2 || count($header) > 50) {
2481                                        $return['error'] = true;
2482                                        $return['sizeheader'] = count($header);
2483                                        echo serialize($return);
2484                                        return;
2485                                }
2486
2487                                $boGroup = CreateObject('contactcenter.bo_group');
2488                                $boPeople = CreateObject('contactcenter.bo_people_catalog');
2489                                while (($data = fgetcsv($handle, $len, $delim))) {
2490
2491                                foreach ($header as $key=>$heading)
2492                                $row[$heading]=(isset($data[$key])) ? $data[$key] : '';
2493
2494                                        $sdata = array();
2495                                        $full_name  = trim($row[$is_default ? $header[0] : $header[2]]);
2496                                        $email          = trim($row[$is_default ? $header[1] : $header[4]]);
2497                                        $array_name = explode(' ', str_replace('"','',(str_replace('\'','',$full_name))));
2498                                        $sdata['given_names'] = $array_name[0];
2499                                        $array_name[0] = null;
2500                                        $sdata['family_names'] = trim(implode(' ',$array_name));
2501                                        //$sdata['connections']['default_phone']['connection_name'] = lang('Main');
2502                                        //$sdata['connections']['default_phone']['connection_value'] = $tdata[3];
2503                                        $sdata['connections']['default_email']['connection_name'] = lang('Main');
2504                                        $sdata['connections']['default_email']['connection_value'] = $email;                                   
2505
2506                                        //      verifica se email já existe!
2507                                        $contact = $boGroup->verify_contact($email);
2508
2509                                        if($contact){
2510                                                $return['_existing']++;
2511                                        }                                                                                                               
2512                                        else if(!eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$", $email)) {
2513                                                $return['_failure']++;
2514                                        }                       
2515                                        else if (!$sdata['given_names'] || !$email || !$boPeople ->quick_add($sdata)){                                         
2516                                                $return['_failure']++;                                                 
2517                                        }
2518                                        else
2519                                                $return['_new']++;
2520                        }                               
2521                                fclose($handle);
2522                                unlink($file);                         
2523                        }
2524                        else
2525                                $return['error'] = true;
2526
2527                        echo serialize($return);
2528                }
2529/*
2530                function convert_tree($tree, $name, &$iconDir, $parent='0')
2531                {
2532                        $new = null;
2533                        $code = null;
2534                       
2535                        if ($parent === '0')
2536                        {
2537
2538                                $code .= $name.".add(new dNode({id:'0', caption: '".lang('Catalogues')."'}),'none');\n";
2539                        }
2540                       
2541                        foreach ($tree as $id => $value)
2542                        {
2543                                $title = $value['name'];
2544
2545                                switch ($value['type'])
2546                                {                                       
2547                                        case 'unknown':
2548                                                $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";
2549                                                break;
2550                                       
2551                                        case 'catalog_group':
2552                                                $code .= $name.".add(new dNode({id: '{$parent}.{$id}', caption: '{$value['name']}'}),'$parent');\n";
2553                                                $code .= $this->convert_tree($value['sub_branch'],$name,$iconDir,$parent.'.'.$id);
2554                                                break;
2555
2556                                        case 'mixed_catalog_group':
2557                                                $code .= $name.".add(new dNode({id: '{$parent}.{$id}', caption: '{$value['name']}', onClick: 'setCatalog(\\'{$parent}.{$id}\\')'}),'$parent');\n";
2558
2559                                                $code .= $this->convert_tree($value['sub_branch'],$name,$iconDir,$parent.'.'.$id);
2560                                                break;
2561                                       
2562                                        case 'catalog':
2563                                                $code .= $name.".add(new dNode({id: '{$parent}.{$id}', caption: '{$value['name']}', onClick: 'setCatalog(\\'{$parent}.{$id}\\')'}),'$parent');\n";
2564                                               
2565                                }
2566                        }
2567                       
2568                        return $code;
2569                }
2570*/
2571        }
2572
2573?>
Note: See TracBrowser for help on using the repository browser.