source: trunk/expressoAdmin1_2/inc/class.bomessages_size.inc.php @ 7673

Revision 7673, 17.5 KB checked in by douglasz, 11 years ago (diff)

Ticket #3236 - Correcoes para Performance: Function Within Loop Declaration.

Line 
1<?php
2        /***********************************************************************************\
3        * Expresso Administração                                                                                                                        *
4        * by Prognus Software Livre (prognus@prognus.com.br, airton@prognus.com.br)             *
5        * ----------------------------------------------------------------------------------*
6        *  This program is free software; you can redistribute it and/or modify it                      *
7        *  under the terms of the GNU General Public License as published by the                        *
8        *  Free Software Foundation; either version 2 of the License, or (at your                       *
9        *  option) any later version.                                                                                                           *
10        \***********************************************************************************/
11
12include_once('class.functions.inc.php');
13include_once('class.ldap_functions.inc.php');
14include_once('class.somessages_size.inc.php');
15require_once 'class.db_functions.inc.php';
16include_once(PHPGW_API_INC.'/class.common.inc.php');
17
18
19        class bomessages_size
20        {
21                var $so;
22                var $dbFunctions;
23                var $functions;
24                var $ldap_functions;
25                var $manager_contexts;
26                var $current_config;
27               
28                /**
29         * Construtor
30         */
31                function bomessages_size()
32                {                                       
33                        $this->so = new somessages_size();
34                        $this->dbFunctions = new db_functions();
35                        $this->ldap_functions = new ldap_functions();                   
36                        $this->functions = new functions();
37                        $common = new common();
38                       
39                        /*
40                        if ((!empty($GLOBALS['phpgw_info']['server']['ldap_master_host'])) &&
41                                (!empty($GLOBALS['phpgw_info']['server']['ldap_master_root_dn'])) &&
42                                (!empty($GLOBALS['phpgw_info']['server']['ldap_master_root_pw'])) )
43                        {
44                                $this->ldap_functions = $common->ldapConnect($GLOBALS['phpgw_info']['server']['ldap_master_host'],
45                                                                                                                        $GLOBALS['phpgw_info']['server']['ldap_master_root_dn'],
46                                                                                                                        $GLOBALS['phpgw_info']['server']['ldap_master_root_pw']
47                                                                                                                        );
48                        }
49                        else
50                        {
51                                $this->ldap_functions = $common->ldapConnect();
52                        }*/
53                }
54               
55       
56                /**
57         * @abstract Cria uma nova regra.
58                 * @params array params com as informações do formulário com os dados da nova regra.
59         * @return mixed retorna um status informando se a operação foi concluída com sucesso e uma mensagem de erro ou sucesso.
60         */
61                function create_rule($params)
62                {                       
63                        /* Início da validação dos campos do form */
64                       
65                        /* Verifica se o nome da regra foi preenchida */
66                        if(empty($params['rule_name']))
67                        {
68                                $result['status'] = false;
69                                $result['msg']  = $this->functions->lang('Field rule name is empty');           
70                                return $result;
71                        }
72                        /* Verifica se o valor máximo da mensagem foi configurado */
73                        if (empty($params['max_messages_size']))
74                        {
75                                $result['status'] = false;
76                                $result['msg']  = $this->functions->lang('Field message size is empty');       
77                                return $result;
78                        }
79                        /* Verifica se esse valor é um número */
80                        if((!preg_match("/^[0-9]+$/i", $params['max_messages_size'])))
81                        {
82                                $result['status'] = false;
83                                $result['msg']  = $this->functions->lang('Field size must be a number');
84                                return $result;
85                       
86                        }
87                        /* Verifica se no nome da regra existe o caracter % (não permitido) */
88                        if(strpos($params['rule_name'],"%"))
89                        {
90                                $result['status'] = false;
91                                $result['msg']  = $this->functions->lang('Invalid character in name.');
92                                return $result;
93                        }
94                        /* Verifica se já existe uma regra com o mesmo nome */
95                        if($this->so->get_rule($params['rule_name']))
96                        {       
97                                $result['status'] = false;
98                                $result['msg']  = $this->functions->lang('Rule name already in use.');
99                                return $result;
100                        }
101                        /* Verifica se selecionou algum usuário pra nova regra */                               
102                        if(!$params['owners'])
103                return array('status' => false , 'msg' => 'no groups or user selecteds');
104                       
105                        /* Fim da validação dos campos do form */
106                       
107                       
108                        foreach ($params['owners'] as $user_selected)
109            {
110               
111                                $check_user_selected = explode(',', $user_selected);
112                                $user_selected = $check_user_selected[0];
113                                $type_user = $check_user_selected[1];
114
115                                $fields = array(
116                            'email_user' => $user_selected,
117                            'configuration_type' => 'MessageMaxSize',
118                            'email_max_recipient' => $params['max_messages_size'],
119                            'email_user_type' => $type_user,
120                                                        'email_recipient' => $params['rule_name']
121                                                        );
122
123                if(!$this->so->insert_rule_db($fields))
124                    return array('status' => false , 'msg' => 'Error on insert');
125                                else
126                                        $this->dbFunctions->write_log('Rule message size created', $userInRuleDB);
127            }
128                        return array('status' => true);
129                }
130               
131               
132                /**
133         * @abstract Salva a regra padrão de tamanho de mensagens.
134                 * @params params - informação do novo tamanho padrão.
135         * @return retorna um status informando se a operação foi concluída com sucesso e uma mensagem de erro ou sucesso.
136         */     
137                function save_default_rule($params)
138                {
139                        if(!$this->so->insert_default_rule_2($params['default_max_size']))
140                                return array('status' => false, 'msg' => 'Error on insert default rule');
141                        else
142                                $this->dbFunctions->write_log('Default size rule message saved', $params['default_max_size']);
143                               
144                        return array('status' => true, 'msg' => 'Default rule insert ok!');
145                }
146               
147
148                /**
149         * @abstract Salva uma regra que foi aberta para edição.
150                 * @params params - informações da regra vindas do formulário.
151         * @return retorna um status informando se a operação foi concluída com sucesso e uma mensagem de erro ou sucesso.
152         */
153                function save_rule($params)
154                {
155                        $usuarios = array();
156                        foreach($params['owners'] as $i=>$value)
157                        {
158                                $usuarios[] = $value;
159                        }
160                       
161                        $users = $this->so->get_users_by_rule($params['original_rule_name']);   
162
163                        /* Início da validação dos campos do form */
164                       
165                        /* Verifica se o nome da regra foi preenchida */
166                        if(empty($params['rule_name']))
167                        {
168                                $result['status'] = false;
169                                $result['msg']  = $this->functions->lang('Field rule name is empty');           
170                                return $result;
171                        }
172                        /* Verifica se o valor máximo da mensagem foi configurado */
173                        if (empty($params['max_messages_size']))
174                        {
175                                $result['status'] = false;
176                                $result['msg']  = $this->functions->lang('Field message size is empty');       
177                                return $result;
178                        }
179                        /* Verifica se esse valor é um número */
180                        if((!preg_match('/^[0-9]+$/i', $params['max_messages_size'])))
181                        {
182                                $result['status'] = false;
183                                $result['msg']  = $this->functions->lang('Field size must be a number');
184                                return $result;
185                       
186                        }
187                        /* Verifica se no nome da regra existe o caracter % (não permitido) */
188                        if(strpos($params['rule_name'],"%"))
189                        {
190                                $result['status'] = false;
191                                $result['msg']  = $this->functions->lang('Invalid character in name.');
192                                return $result;
193                        }
194                        /* Fim da validação dos campos do form */       
195
196                        $rule_name = $users[0]['email_recipient'];
197                        $max_size  = $users[0]['email_max_recipient'];
198                       
199                        // Deleto os usuários da regra que está sendo editada pra inserir novamente pra ter um controle dos usuários excluídos e adicionados.
200                        if (!($this->so->remove_rule($rule_name)))
201                        {
202                                return array('status' => false , 'msg' => 'Error on delete a parada!');
203                        }
204       
205                        foreach ($usuarios as $user_selected)
206            {     
207                                $check_user_selected = explode(',', $user_selected);
208                                $user_selected = $check_user_selected[0];
209                                $type_user = $check_user_selected[1];
210                       
211                $fields = array(
212                            'email_user' => $user_selected,
213                            'configuration_type' => 'MessageMaxSize',
214                            'email_max_recipient' => $params['max_messages_size'],
215                            'email_user_type' => $type_user,
216                                                        'email_recipient' => $params['rule_name']
217                            );
218       
219                                if(!$this->so->insert_rule_db($fields))
220                    return array('status' => false , 'msg' => 'Error on insert');
221                                else
222                                        $this->dbFunctions->write_log('Rule message size created', $userInRuleDB);     
223            }
224                        return array('status' => true, 'msg' => 'Salvo com sucessso!!');
225                }
226               
227               
228                /**
229         * @abstract Recupera o valor da regra padrão.
230         * @return retorna o valor da regra padrão.
231         */
232                function get_default_rule()
233                {
234                        $return = $this->so->get_default_rule();
235                        if (!$return)
236                                return false;
237                       
238                        foreach($return as $i=>$value)
239                        {                       
240                                return $value['config_value'];
241                        }                               
242
243                }
244               
245               
246                /**
247         * @abstract Deleta uma regra.
248                 * @params params['rule_name'] - nome da regra que deseja excluir
249         * @return retorna um status informando se a operação foi concluída com sucesso e uma mensagem de erro ou sucesso.
250         */
251                function delete_rule($params)
252                {
253                        if (!($this->so->remove_rule($params['rule_name'])))
254                                return array('status' => false , 'msg' => 'Error on delete!');
255                        else
256                                $this->dbFunctions->write_log('Rule message size removed', $params['rule_name']);       
257                               
258                        return array('status' => true , 'msg' => 'Rule successful deleted!');
259                }
260               
261               
262                /**
263         * @abstract Busca todas as regras cadastradas.
264         * @return array com as informações das regras cadastradas
265         */
266                function get_all_rules()
267                {
268                        $return = $this->so->get_all_rules();
269                        return $return;
270                }
271               
272               
273            /**
274         * @abstract Busca as regras cadastradas por usuário.
275                 * @params input - parte do nome do usuário que deseja encontrar a regra a que ele pertence.
276         * @return array com as informações das regras cadastradas que batem com o padrão da busca.
277         */
278                function get_rules_by_user($params)
279                {
280                        if(!empty($params['input']))
281                                $rules = $this->so->get_rules($params['input'], true);
282                        else
283                                $rules = $this->get_all_rules();
284                               
285                        $rules_tr = '';
286
287            $rules_count = count($rules);
288                        for ($i = 0; $i<$rules_count; ++$i)
289                        {
290                                $name_link = (string)str_replace(" ", "%", $rules[$i]['email_recipient']);
291                                $rules_tr .= "<tr class='normal' onMouseOver=this.className='selected' onMouseOut=this.className='normal'><td onClick=javascript:edit_messages_size('" . $name_link . "')>" . $rules[$i]['email_recipient'] . "</td><td onClick=edit_messages_size('$name_link')>" . $rules[$i]['email_max_recipient'] . " MB</td><td align='center' onClick=delete_messages_size('$name_link')><img HEIGHT='16' WIDTH='16' src=./expressoAdmin1_2/templates/default/images/delete.png></td></tr>";
292                        }
293                       
294                        $return['status'] = 'true';
295                        $return['trs'] = $rules_tr;                     
296                        return $return;         
297                }
298               
299               
300                /**
301         * @abstract Busca as regras cadastradas por nome de regra.
302                 * @params input - parte do nome da regra que deseja encontrar.
303         * @return array com as informações das regras cadastradas que batem com o padrão da busca.
304         */
305                function get_rules($params)
306                {
307                        if($params['input']!='')
308                                $rules = $this->so->get_rules($params['input']);
309                        else
310                                $rules = $this->get_all_rules();
311                       
312                        $rules_tr = '';
313
314            $rules_count = count($rules);
315                        for ($i = 0; $i<$rules_count; ++$i)
316                        {
317                                $name_link = (string)str_replace(" ", "%", $rules[$i]['email_recipient']);
318                                $rules_tr .= "<tr class='normal' onMouseOver=this.className='selected' onMouseOut=this.className='normal'><td onClick=javascript:edit_messages_size('" . $name_link . "')>" . $rules[$i]['email_recipient'] . "</td><td onClick=edit_messages_size('$name_link')>" . $rules[$i]['email_max_recipient'] . " MB</td><td align='center' onClick=delete_messages_size('$name_link')><img HEIGHT='16' WIDTH='16' src=./expressoAdmin1_2/templates/default/images/delete.png></td></tr>";
319                        }
320                       
321                        $return['status'] = 'true';
322                        $return['trs'] = $rules_tr;                     
323                        return $return;         
324                }
325               
326               
327                /**
328         * @abstract Pega usuários de uma regra.
329                 * @params params['rule_name'] - nome da regra que deseja os usuários.
330         * @return retorna os usuários dessa regra. Se o parâmetro option for true, ele retorna já formatado com os options.
331         */
332                function get_users_by_rule($params, $option=true)
333                {
334                        $return = $this->so->get_users_by_rule($params['name_rule']);
335
336                        if($return)
337                        {
338                                if($option)
339                                {
340                                        if (count($return))
341                                        {
342                                                foreach ($return as $i => $value)
343                                                {       
344                                                        if($return[$i]['email_user_type'] == 'G')
345                                                        {
346                                                                $gid_grupo = $return[$i]['email_user'];
347                                                                $cn = $this->ldap_functions->get_group_cn_by_gidnumber($return[$i]['email_user']);
348                                                                $options .= '<option value="'.$gid_grupo.',G">'.$cn.'('.$gid_grupo.')</option>';
349                                                        }
350                                                        else
351                                                        {
352                                                                $uid_usuario = $return[$i]['email_user'];
353                                                                $cn = $this->ldap_functions->get_user_cn_by_uid($return[$i]['email_user']);                                                     
354                                                                $options .= '<option value="'.$uid_usuario.',U">'.$cn.'('.$uid_usuario.')</option>';
355                                                        }
356                                                }
357                                        }
358                                        $return[0]['options'] = $options;
359                                        $return[0]['status'] = true;
360                                        $return[0]['msg'] = "Retornou alguma coisa do banco. Agora é só tratar de chamar o modal.";
361               
362                                        return $return[0];
363                                }
364                                else // Retornar os usuários mas não com formatação de option
365                                {
366                                        $users;
367                                        if (count($return))
368                                        {
369                                                foreach ($return as $i => $value)
370                                                {
371                                                        $users .= $return[$i]['email_user'] . "%";
372                                                        //array_push($users, $return[$i]['email_user']);
373                                                }
374                                        }
375
376                                       
377                                        $return[0]['users'] = $users;
378                                        $return[0]['status'] = true;
379                                        $return[0]['msg'] = "Retornou alguma coisa do banco. Agora é só tratar de chamar o modal.";     
380                                        return $return[0];
381                                }
382                                       
383                        }
384                        else 
385                                return array('status' => false , 'msg' => 'Error on read rule');
386                }
387               
388               
389            /** @abstract Busca usuarios de um contexto.
390                 *      @params array parrams que vem com as informações do contexto e outros dados vindos do formulário.
391                 *  @reutn retorna os usuários já com as opções do select pra preencher a tela modal com os usuários disponíveis.
392                 */
393                function get_available_users($params)
394                {
395                        $context= $params['context'];
396                        $justthese = array("cn", "uid");
397                        $filter = "&(phpgwAccountType=u)(!(phpgwAccountVisible=-1))";
398       
399                        if( $params['sentence'] )
400                                $filter .= "(cn=*${params[sentence]}*)";
401       
402                        if ($this->ldap_functions)
403                        {
404                                $sr=ldap_search($this->ldap_functions, $context, "($filter)", $justthese);
405                                $entries = ldap_get_entries($this->ldap_functions, $sr);                       
406       
407                                for ($i=0; $i<$entries["count"]; ++$i){
408                                                $u_tmp[$entries[$i]["uid"][0]] = $entries[$i]["cn"][0];
409                                }
410       
411                                natcasesort($u_tmp);
412       
413                                $i = 0;
414                                $users = array();
415                                $options = array();
416       
417                                if (count($u_tmp))
418                                {
419                                        foreach ($u_tmp as $uidnumber => $cn)
420                                        {
421                                                $options[] = '"'.$uidnumber.'"'.':'.'"'.utf8_decode($cn).'"';
422                                        }
423                                        unset($u_tmp);
424                                }                       
425                                return "{".implode(',',$options)."}";
426                        }
427                }
428               
429               
430            /** @abstract Busca usuarios e grupos de um contexto.
431                 *      @params array parrams que vem com as informações do contexto e outros dados vindos do formulário.
432                 *  @reutn retorna os usuários já com as opções do select pra preencher a tela modal com os usuários disponíveis.
433                 */
434                function get_available_users_and_groups($params)
435        {
436
437            $this->ds = $this->ldap_functions->ldapMasterConnect();
438
439             //Monta lista de Grupos e Usuarios
440                $users = Array();
441                $groups = Array();
442                $user_context= $this->ldap_functions->ldap_context;
443               
444                $filtro =utf8_encode($params['filter']);
445                $context =utf8_encode($params['context']);
446
447                if ($this->ds)
448                {
449                    $justthese = array("gidNumber","cn","dn");
450                    $sr=ldap_search($this->ds, $context, ("(&(phpgwaccounttype=g)(!(phpgwaccountvisible=-1))(cn=*$filtro*))"),$justthese);
451                    $info = ldap_get_entries($this->ds, $sr);
452
453                    for ($i=0; $i<$info["count"]; ++$i)
454                        $groups[$uids=$info[$i]["gidnumber"][0]] = Array('name'    =>    $uids=$info[$i]["cn"][0], 'type'    =>    g);
455
456                    $justthese = array("phpgwaccountvisible","uidNumber","cn","uid");
457                         $sr=ldap_search($this->ds, $context, ("(&(phpgwaccounttype=u)(!(phpgwaccountvisible=-1))(phpgwaccountstatus=A)(|(cn=*$filtro*)(mail=$filtro*)))"),$justthese);
458                 
459                    $info = ldap_get_entries($this->ds, $sr);
460
461                    for ($i=0; $i<$info["count"]; ++$i)
462                    {
463                        if ($info[$i]["phpgwaccountvisible"][0] == '-1')
464                      continue;
465                        $users[$uids=$info[$i]["uidnumber"][0]] = Array('name'    =>    $uids=$info[$i]["cn"][0], 'type'    =>    u,'uid' => $info[$i]["uid"][0]);
466                    }
467                }
468                ldap_close($this->ds);
469
470                @asort($users);
471                @reset($users);
472                @asort($groups);
473                @reset($groups);
474                $user_options ='';
475                $group_options ='';
476                $user_options2 ='';
477                $group_options2 ='';
478
479            foreach($groups as $id => $group_array) {
480                    $group_options .= '<option  value="'.$id.'">'.utf8_decode($group_array['name']).'</option>'."\n";
481                    $group_options2 .= '<option  value="'.$id.',G">'.utf8_decode($group_array['name']).'</option>'."\n";
482            }
483            foreach($users as $id => $user_array) {
484                    $user_options .= '<option  value="'.utf8_decode($user_array['uid']).'">'.utf8_decode($user_array['name']).'</option>'."\n";
485                    $user_options2 .= '<option  value="'.utf8_decode($user_array['uid']).',U">'.utf8_decode($user_array['name']).'</option>'."\n";
486               
487            }
488
489            return array("users" => $user_options, "groups" => $group_options , "users2" => $user_options2, "groups2" => $group_options2);
490        }
491               
492               
493                function get_available_users_and_groups2($params)
494                {
495                        $returnLDAP = $this->ldap_functions->get_available_users3($params);
496
497                        $return = array();
498                        $return['users'] = $returnLDAP['users2'];
499                        $return['groups'] = $returnLDAP['groups2'];
500
501                        return $return;
502                }
503               
504               
505        } // end class bomessages_size
506?>
Note: See TracBrowser for help on using the repository browser.