source: trunk/prototype/modules/mail/interceptors/Helpers.php @ 5533

Revision 5533, 6.3 KB checked in by douglasz, 12 years ago (diff)

Ticket #1875 - Commit inicial do codigo das funcionalidades de marcadores e sinalizadores

Line 
1<?php
2include_once ROOTPATH."/../expressoMail1_2/inc/class.imap_functions.inc.php";
3
4class Helpers {   
5
6/**
7 * LABELS
8 */
9        public function deepnessLabeleds( &$uri , &$result , &$criteria , $original ){               
10
11                if(isset($original['criteria']['deepness']))
12                {
13                        foreach ($result as $i => $v)
14                        {
15                                if(isset($v['labelId']))
16                                {
17                                        $labels = Controller::find( array( 'concept' => 'label' ) , false, array( 'filter' => array('=', 'id'  ,  $v['labelId']) ));     
18                                        $result[$i]['label'] = $labels[0];
19                                }             
20
21                        }
22                }
23
24                return $result;
25        }
26       
27        /**
28         * Método a ser chamado na exclusão de um label, procedendo com a
29         * desvinculação deste label com todas as mensagens a que estava vinculado
30         */
31        public function clearAllLabeledsOfLabel( &$uri , &$result , &$criteria , $original ){
32               
33                $labeleds = Controller::find( array( 'concept' => 'labeled' ) , false, array( 'filter' => array('=', 'labelId'  ,  $uri['id']) ));
34                if (empty($labeleds))
35                        return;
36               
37                $labeledsIds = array();
38                foreach ($labeleds as $e) {
39                                $labeledsIds[] = $e['id'];
40                }
41               
42                Controller::delete( array( 'concept' => 'labeled' ), false, array( 'filter' => array( 'IN', 'id', $labeledsIds )) );
43
44                //return $result;
45        }
46        /**
47         * Método a ser chamado ao listar os labeleds, uma vez que as função de IMAP do PHP não são capazes de
48         * obter a lista de todos os labels e nem são capazes de obter os labels de uma dada mensagem
49         */
50        public function makeLabelListFilter( &$uri , &$result , &$criteria , $original ){
51
52                if (!isset($criteria['filter']) || !self::in_arrayr('labelId', $criteria['filter'])) {
53                        $labels = Controller::find( array( 'concept' => 'label' ) );
54
55                        $list = array();
56                        foreach ($labels as $label)
57                                $list[] = $label['id'];
58                               
59                        $filter = array( 'IN' , 'labelId' , $list );
60                       
61                        if (isset($criteria['filter']) && $criteria['filter']!=NULL && count($criteria['filter']) != 0)
62                                $criteria['filter'] = array( 'AND', $criteria['filter'], $filter );
63                        else
64                                $criteria['filter'] =  $filter;
65                }
66        }
67       
68        public static function in_arrayr($needle, $haystack) {
69                foreach ($haystack as $v) {
70                                if ($needle == $v) return true;
71                                elseif (is_array($v)) return self::in_arrayr($needle, $v);
72                }
73                return false;
74        }
75               
76       
77/**
78 * FOLLOWUPFLAGS
79 */
80
81        public function deepnessFollowupflaggeds( &$uri , &$result , &$criteria , $original ){               
82       
83                if(isset($original['criteria']['deepness']))
84                {
85                        foreach ($result as $i => $v)
86                        {
87                                if(isset($v['followupflagId']))
88                                {
89                                        $followupflag = Controller::find( array( 'concept' => 'followupflag' ) , false, array( 'filter' => array('=', 'id'  ,  $v['followupflagId']) ));     
90                                        $result[$i]['followupflag'] = $followupflag[0];
91                                }
92                               
93                                if(isset($v['messageNumber']) && isset($v['folderName']))
94                                {
95                                        $details = $criteria['deepness'] == '1' ? 'headers' : 'all';
96                                       
97                                        $imapService = new imap_functions();
98                                        $message = $imapService->getMessages(array('messages' => array($v['folderName'] => array($v['messageNumber'])), 'details' => $details));
99                                        $result[$i]['message'] = $message[$v['folderName']][0];                         
100                                }     
101                        }
102                }
103
104                return $result;
105        }       
106
107        public function letFollowupflaggedKeepUnique (&$uri , &$params , &$criteria , $original ){
108                if (isset($params['folderName']) && isset($params['messageNumber'])) {
109                        $filter = array ( 'AND', array('=', 'folderName', $params['folderName']), array('=', 'messageNumber', $params['messageNumber']) );
110                        Controller::delete( array( 'concept' => 'followupflagged' ), false, array( 'filter' => $filter));
111                }
112        }
113
114/*     
115        public function clearAllFlaggedOfFollowupflag( &$uri , &$result , &$criteria , $original ){
116                //TODO - filter
117                return $result;
118        }
119*/     
120
121        //PostgreSQL.after.create
122        public function doImapCreate( &$uri , &$params , &$criteria , $original ) {
123       
124                $imap_uri = $uri;
125                $imap_uri['service'] = 'Imap';
126               
127                $imap_params = $params + $original['properties'];
128                if ($imap_params['folderName'] && $imap_params['messageNumber'] && $imap_params['id']) {
129                        $imap_uri['id'] = $imap_params['folderName'] . '/' . $imap_params['messageNumber'] . '#' . $imap_params['id'];
130                        $imap_params['id'] = $imap_params['folderName'] . '/' . $imap_params['messageNumber'] . '#' . $imap_params['id'];
131                        $result = Controller::create($imap_uri, $imap_params);
132                }
133               
134        }
135       
136        //PostgreSQL.before.find
137        public function doImapFind( &$uri , &$params , &$criteria , $original ) {
138                $imap_uri = $uri;
139                $imap_uri['service'] = 'Imap';
140                $result = Controller::find($imap_uri, $params, $criteria);
141               
142                if($result) {
143                        /** TODO:
144                         *      - se achar no Imap, passar as referencias para o PostgresSQL para que
145                         *  seja conferida a consistência dos dados no postgres (Nota: os dados podem
146                         *  ficar inconsistentes no postgres se a mensagem for movida no Imap, assim
147                         *  messageNumber e/ou folderName podem estar desatualizados no postgres)
148                         */
149                }
150        }
151       
152        //PostgreSQL.before.read
153        public function doImapRead( &$uri , &$params , &$criteria , $original ) {
154                $imap_uri = $uri;
155                $imap_uri['service'] = 'Imap';
156                $result = Controller::read($imap_uri, $params, $criteria);
157        }
158       
159        //PostgreSQL.before.delete
160        public function doImapDelete( &$uri , &$params , &$criteria , $original ) {
161                $toGetURI = $uri;
162                $flagged = Controller::read($toGetURI);
163
164                //assumindo que $criteria['filter'] venha sempre vazio no delete
165                $imap_criteria['filter'] = array();
166                foreach ($flagged as $key => $value) {
167                        $imap_criteria['filter'][] = array('=', $key, $value);
168                }
169                if($imap_criteria['filter']) array_unshift($imap_criteria['filter'], 'AND');
170               
171                $imap_uri = $uri;
172                $imap_uri['service'] = 'Imap';
173                if ($flagged && $flagged['id']) {
174                        $flagged['id']  = $flagged['folderName'] . '/' . $flagged['messageNumber'] . '#' . $flagged['id'];
175                        $imap_uri['id'] = $flagged['id'];
176                }
177
178                $result = Controller::delete($imap_uri, $params, $imap_criteria);               
179        }
180       
181        //PostgreSQL.before.update
182        public function doImapUpdate( &$uri , &$params , &$criteria , $original ) {
183                //TODO - update
184                //$imap_uri = $uri;
185                //$imap_uri['service'] = 'Imap';
186                //$result = Controller::update($imap_uri, $params, $criteria);
187        }
188        /*
189    public function createCalendarToSchedulable( &$uri , &$result , &$criteria , $original ){
190                Controller::create(array('concept' => 'calendarToSchedulable'), array('calendar' => $original['properties']['calendar'], 'schedulable' => $result['id'] ));
191        }
192        */
193}
194
195?>
Note: See TracBrowser for help on using the repository browser.