Changeset 6754


Ignore:
Timestamp:
07/11/12 11:45:10 (12 years ago)
Author:
niltonneto
Message:

Ticket #0000 - Copiadas as alterações do Trunk. Versão final da 2.4.1.

Location:
branches/2.4
Files:
120 edited
263 copied

Legend:

Unmodified
Added
Removed
  • branches/2.4

  • branches/2.4/.htaccess

    r6625 r6754  
    126126RewriteCond %{REQUEST_METHOD} ^(TRACE|TRACK|OPTIONS|HEAD)$ [NC] 
    127127RewriteRule ^.*$ - [F]  
     128RewriteRule ^rest(.*)$ prototype/rest/$1 [QSA,L] 
     129 
    128130 
    129131# 
  • branches/2.4/INSTALL/debian/squeeze/etc/apache2/sites-available/expresso

    r6623 r6754  
    55        DocumentRoot /var/www/expresso/ 
    66         
    7                 <Directory /var/www/expresso/> 
     7        <Directory /var/www/expresso/> 
    88                Options FollowSymLinks MultiViews 
    99                AllowOverride All 
     
    1212        </Directory> 
    1313 
    14         #<Directory /var/www/expresso/setup>  
    15         #       Options None  
    16         #       AllowOverride All  
    17         #       Order deny,allow  
    18         #       allow from ##ip rede interna##  
    19         #</Directory>  
     14        #<Directory /var/www/expresso/setup> 
     15        #       Options None 
     16        #       AllowOverride All 
     17        #       Order deny,allow 
     18        #       allow from ##ip rede interna## 
     19        #</Directory> 
    2020 
    2121        ErrorLog /var/log/apache2/error.log 
     
    6464        </Directory> 
    6565 
    66         #<Directory /var/www/expresso/setup>  
    67         #       Options None  
    68         #       AllowOverride All  
    69         #       Order deny,allow  
    70         #       allow from ##ip rede interna##  
    71         #</Directory> 
     66        #<Directory /var/www/expresso/setup> 
     67        #       Options None 
     68        #       AllowOverride All 
     69        #       Order deny,allow 
     70        #       allow from ##ip rede interna## 
     71        #</Directory> 
    7272 
    7373        ErrorLog /var/log/apache2/error.log 
  • branches/2.4/INSTALL/debian/squeeze/etc/ldap/slapd.conf

    r6730 r6754  
    1414include         /etc/ldap/schema/inetorgperson.schema 
    1515# Necessario para o Expresso Livre 
    16 include         /etc/ldap/schema/expressolivre.schema  
     16include         /etc/ldap/schema/expressolivre.schema 
    1717include         /etc/ldap/schema/qmailuser.schema 
    1818include         /etc/ldap/schema/phpgwaccount.schema 
    1919include         /etc/ldap/schema/samba.schema 
    2020include         /etc/ldap/schema/phpgwcontact.schema 
    21 include         /etc/ldap/schema/phpgwquotacontrolled.schema  
     21include         /etc/ldap/schema/phpgwquotacontrolled.schema 
    2222 
    2323# Where the pid file is put. The init.d script 
  • branches/2.4/INSTALL/expressoInstall.sh

    r6595 r6754  
    44# 
    55# Criado por William Fernando Merlotto <william@prognus.com.br> 
    6 # Baseado no script original desenvolvido por João Alfredo Knopik Junior <jakjr@celepar.pr.gov.br> 
    7 # com colaborações de: 
     6# Baseado no script original desenvolvido por João Alfredo Knopik Junior <jakjr@celepar.pr.gov.br> 
     7# com colaborações de: 
    88#       "William Fernando Merlotto" <william@prognus.com.br>, para Debian, Ubuntu, Red Hat e CentOS 
    99#       "Gustavo Nakahara" <gustavonk@prognus.com.br>, para Debian, Ubuntu, Red Hat e CentOS 
    1010#       "Rafael Cristaldo" <rafael@prognus.com.br>, para Debian, Ubuntu, Red Hat e CentOS 
    1111#       "Alexandre Felipe Muller de Souza" <amuller@celepar.pr.gov.br>, para Debian 
    12 #       "Cássio Luiz" <cassiolp@cnpq.br>, para Red Hat e CentOS 
     12#       "Cássio Luiz" <cassiolp@cnpq.br>, para Red Hat e CentOS 
    1313#       "M. Rodrigo Monteiro" <mrodrigom@gmail.com>, para Red Hat e CentOS 
    1414# 
    1515# 
    16 # Versões: 
     16# Versões: 
    1717# 27/03/2012 - v1.0 
    1818#       Termino do instalador basico, para Debian Squeeze, CentOS 6 e Ubuntu Server 11.10 
     
    2424################################################################################################# 
    2525 
    26 # TODO: Internacionalizar o script de instalação: 
     26# TODO: Internacionalizar o script de instalação: 
    2727# http://www.linuxquestions.org/questions/programming-9/bash-script-how-to-get-locale-translations-802726/ 
    2828# http://tldp.org/LDP/abs/html/localization.html 
     
    4444 
    4545# Verifica o usuario que esta executando o script 
    46 # DEBUG: Comente esta linha para testar o script sem utilizar o usuário root. 
     46# DEBUG: Comente esta linha para testar o script sem utilizar o usuário root. 
    4747[ $UID != 0 ] && { echo "Este script deve ser executado como superusuario (root) ou com sudo"; exit 1; } 
    4848 
     
    6262        echo "Sistema operacional desconhecido ou incompativel com o instalador do Expresso Livre!" 
    6363        echo "$OSSTR" 
    64         echo "Por favor, utilize uma distribuição GNU/Linux compatível: Debian 6.x, Ubuntu 11.10 ou CentOS/RedHat 6.x" 
     64        echo "Por favor, utilize uma distribuição GNU/Linux compatível: Debian 6.x, Ubuntu 11.10 ou CentOS/RedHat 6.x" 
    6565        exit 1 
    6666fi 
    6767 
    68 # Telas da instalacao  
    69 BACKTITLE="Instalação do ExpressoLivre versão $VERSAO" 
     68# Telas da instalacao 
     69BACKTITLE="Instalação do ExpressoLivre versão $VERSAO" 
    7070 
    7171BACKTITLE="$BACKTITLE, para $INSTALL" 
    7272 
    73 # Inicializacao basica de instalacao, como atualização de repositório e criação de variáveis de ambiente 
     73# Inicializacao basica de instalacao, como atualização de repositório e criação de variáveis de ambiente 
    7474ini_$INSTALL 
    7575 
    76 INTRO='  
    77 Bem-Vindo(a) a instalação do ExpressoLivre!  
    78   
    79 O script de instalação lhe permitirá escolher entre instalar e configurar automaticamente todos os serviços necessários ao funcionamento do ExpressoLivre ou lhe permitirá escolher quais serviços serão instalados e configurados. Esta Última alternativa é interessante para ambientes grandes, onde os serviços são instalados e configurados em máquinas distintas.  
    80   
    81 As informações de senha, domí­nio e organização serão requisitadas de acordo com o(s) serviço(s) selecionado(s).  
    82           
    83 A equipe ExpressoLivre não se responsabiliza por danos ocasionados pelo uso deste instalador ou mesmo pelo próprio ExpressoLivre.  
    84 Você deseja prosseguir, por sua conta e risco, a instalação ExpressoLivre?'  
    85   
    86 # Se o usuario escolher "nao", será retornado 1 e consequentemente o script será encerrado.  
    87 dialog --backtitle "$BACKTITLE" --cr-wrap --yesno "$INTRO" 18 80 || exit 0  
     76INTRO=' 
     77Bem-Vindo(a) a instalação do ExpressoLivre! 
     78 
     79O script de instalação lhe permitirá escolher entre instalar e configurar automaticamente todos os serviços necessário ao funcionamento do ExpressoLivre ou lhe permitirá escolher quais serviços serão instalados e configurados. Esta última alternativa é interessante para ambientes grandes, onde os serviços são instalados e configurados em máquinas distintas. 
     80 
     81As informações de senha, domínio e organização serão requisitadas de acordo com o(s) serviço(s) selecionado(s). 
     82 
     83A equipe ExpressoLivre não se responsabiliza por danos ocasionados pelo uso deste instalador ou mesmo pelo próprio ExpressoLivre. 
     84Você deseja prosseguir, por sua conta e risco, a instalação ExpressoLivre?' 
     85 
     86# Se o usuario escolher "nao", será retornado 1 e consequentemente o script será encerrado. 
     87dialog --backtitle "$BACKTITLE" --cr-wrap --yesno "$INTRO" 18 80 || exit 0 
    8888 
    8989# Inicia a escolha/instalacao e configuracao dos servicos nessarios ao ExpressoLivre 
    9090SERVICOS=$( dialog --backtitle "$BACKTITLE" --stdout --separate-output \ 
    91         --checklist 'Por favor, selecione quais serviços serão instalados neste sistema operacional:' 14 75 14 \ 
    92         http 'Servidor http (apache) juntamente com os módulos do PHP5' on \ 
     91        --checklist 'Por favor, selecione quais serviços serão instalados neste sistema operacional:' 14 75 14 \ 
     92        http 'Servidor http (apache) juntamente com os módulos do PHP5' on \ 
    9393        ldap 'Servidor ldap (openldap)' on \ 
    9494        bd 'Servidor de banco de dados (postgresql)' on \ 
     
    102102done 
    103103 
    104 dialog --backtitle "$BACKTITLE" --cr-wrap --msgbox "A comunidade do Expresso Livre agradece a sua participação.\n\n\nEm caso de dúvidas, por favor, visite: http://www.expressolivre.org" 8 75 
     104dialog --backtitle "$BACKTITLE" --cr-wrap --msgbox "A comunidade do Expresso Livre agradece a sua participação.\n\n\nEm caso de dúvidas, por favor, visite: http://www.expressolivre.org" 8 75 
  • branches/2.4/INSTALL/rhel/6/etc/openldap/slapd.conf

    r6730 r6754  
    1616include         /etc/openldap/schema/nis.schema 
    1717# Necessario para o Expresso Livre 
    18 include         /etc/ldap/schema/expressolivre.schema  
    19 include         /etc/ldap/schema/qmailuser.schema  
    20 include         /etc/ldap/schema/phpgwaccount.schema  
    21 include         /etc/ldap/schema/samba.schema  
    22 include         /etc/ldap/schema/phpgwcontact.schema  
     18include         /etc/ldap/schema/expressolivre.schema 
     19include         /etc/ldap/schema/qmailuser.schema 
     20include         /etc/ldap/schema/phpgwaccount.schema 
     21include         /etc/ldap/schema/samba.schema 
     22include         /etc/ldap/schema/phpgwcontact.schema 
    2323include         /etc/ldap/schema/phpgwquotacontrolled.schema 
    2424 
  • branches/2.4/admin/inc/class.uiconfig.inc.php

    r5988 r6754  
    1111  \**************************************************************************/ 
    1212 
     13require_once('prototype/api/config.php'); 
     14use prototype\api\Config as Config; 
    1315 
    1416        class uiconfig 
     
    337339                        /* Seta o valor padrão para a configuração de número máximo de marcadores */ 
    338340                        $current_config['expressoMail_limit_labels'] = (isset($current_config['expressoMail_limit_labels']) && !!$current_config['expressoMail_limit_labels'] ) ? $current_config['expressoMail_limit_labels'] : 20; 
     341                        //Pegar os todos os Atributos LDAP mapeados no arquivo user.ini 
     342                        $map = Config::get('user', 'OpenLDAP.mapping'); 
     343                        $validate = false;       
     344                        $options = "<option value=''>".lang('None')."</option>"; 
     345                        foreach($map as $value){ 
     346                                $options .= "<option value='".$value."'"; 
     347                                if($current_config['expressoMail_ldap_identifier_recipient'] == $value){ 
     348                                        $validate = true; 
     349                                        $options .= " selected='selected'"; 
     350                                } 
     351                                $options .= ">". $value . "</option>"; 
     352                        } 
     353 
     354                        if(!$validate){ 
     355                                // Limpa Atributo LDAP do banco de dados caso a atribuição não exista mais.      
     356                                $db = ''; 
     357                                $db = $db ? $db : $GLOBALS['phpgw']->db;        // this is to allow setup to set the db 
     358                                $db->query("DELETE FROM phpgw_config WHERE config_app = '".$appname."' AND config_name = 'expressoMail_ldap_identifier_recipient'"); 
     359                        } 
    339360                        /* Recupera o número mínimo de marcadores que pode ser definido */ 
    340361                        $db = ''; 
     
    420441                        $t->set_var('min_labels',$cont_labels); 
    421442                         
     443                        $t->set_var('rows_ldap_identifier',$options); 
    422444                        $t->pfp('out','body'); 
    423445 
  • branches/2.4/admin/setup/phpgw_pt-br.lang

    r5988 r6754  
    565565There are users with an quantity greater than of markers. Respect the minimum number indicated. admin   pt-br   Existem usuários com uma quantidade superior de marcadores. Respeito o número mínimo indicado. 
    566566Minimum number of labels allowed        admin   pt-br   Número mínimo de marcadores permitido 
     567Identifier of the recipient of a message        admin   pt-br   Identificador do destinatário de uma mensagem 
     568LDAP attribute used to replacement      admin   pt-br   Atributo LDAP utilizado para substituição 
     569None    admin   pt-br   Nenhum 
  • branches/2.4/admin/setup/setup.inc.php

    r5298 r6754  
    1313        $setup_info['admin']['name']      = 'admin'; 
    1414        $setup_info['admin']['title']      = 'Admin'; 
    15         $setup_info['admin']['version']   = '2.4.0'; 
     15        $setup_info['admin']['version']   = '2.4.1'; 
    1616        $setup_info['admin']['app_order'] = 1; 
    1717        $setup_info['admin']['tables']    = ''; 
     
    4848        $setup_info['admin']['depends'][] = array( 
    4949                'appname' => 'phpgwapi', 
    50                 'versions' => Array('2.4') 
     50                'versions' => Array('2.4.1') 
    5151        ); 
    5252?> 
  • branches/2.4/calendar/setup/setup.inc.php

    r5298 r6754  
    1212 
    1313        $setup_info['calendar']['name']    = 'calendar'; 
    14         $setup_info['calendar']['version'] = '2.4.0'; 
     14        $setup_info['calendar']['version'] = '2.4.1'; 
    1515        $setup_info['calendar']['app_order'] = 3; 
    1616        $setup_info['calendar']['enable']  = 1; 
     
    5252        $setup_info['calendar']['depends'][] = array( 
    5353                 'appname' => 'phpgwapi', 
    54                  'versions' => Array('2.4') 
     54                 'versions' => Array('2.4.1') 
    5555        ); 
  • branches/2.4/calendar/setup/tables_update.inc.php

    r5314 r6754  
    134134                return $GLOBALS['setup_info']['calendar']['currentver']; 
    135135        } 
     136 
     137        $test[] = '2.4.0'; 
     138        function calendar_upgrade2_4_0() 
     139        { 
     140                $GLOBALS['setup_info']['calendar']['currentver'] = '2.4.1'; 
     141                return $GLOBALS['setup_info']['calendar']['currentver']; 
     142        } 
    136143?> 
  • branches/2.4/emailadmin/setup/setup.inc.php

    r5298 r6754  
    1414        $setup_info['emailadmin']['name']      = 'emailadmin'; 
    1515        $setup_info['emailadmin']['title']     = 'EMailAdmin'; 
    16         $setup_info['emailadmin']['version']   = '2.4.0'; 
     16        $setup_info['emailadmin']['version']   = '2.4.1'; 
    1717        $setup_info['emailadmin']['app_order'] = 10; 
    1818        $setup_info['emailadmin']['enable']    = 2; 
     
    4040        $setup_info['emailadmin']['depends'][] = array( 
    4141                'appname'  => 'phpgwapi', 
    42                 'versions' => Array('2.4') 
     42                'versions' => Array('2.4.1') 
    4343        ); 
    4444 
  • branches/2.4/emailadmin/setup/tables_update.inc.php

    r5352 r6754  
    128128      return $GLOBALS['setup_info']['emailadmin']['currentver']; 
    129129   } 
     130 
     131   $test[] = '2.4.0'; 
     132   function emailadmin_upgrade2_4_0() 
     133        { 
     134      $GLOBALS['setup_info']['emailadmin']['currentver'] = '2.4.1'; 
     135      return $GLOBALS['setup_info']['emailadmin']['currentver']; 
     136   } 
    130137?> 
  • branches/2.4/expressoAdmin1_2/inc/class.bosectors.inc.php

    r6713 r6754  
    4545                        $sector_info = array(); 
    4646                        $sector_info['ou']                              = $_POST['sector'];   
    47                         $sector_info['objectClass'][]   = 'top';  
    48                 $sector_info['objectClass'][]   = 'organizationalUnit';  
    49                 $sector_info['objectClass'][]   = 'phpgwQuotaControlled';  
    50                         /*Insere as informações sobre quota total por usuários e por gigabytes de espaço em disco   
    51               Se não vierem os dados, ele coloca 0 (Caso não exista controle de cota).   
    52                  */  
    53                     $sector_info['diskQuota'] = isset($_POST['disk_quota']) ? (int)$_POST['disk_quota'] : 0;   
    54                     $sector_info['usersQuota'] = isset($_POST['users_quota']) ? (int)$_POST['users_quota'] : 0;  
    55  
     47                        $sector_info['objectClass'][]   = 'top'; 
     48                        $sector_info['objectClass'][]   = 'organizationalUnit'; 
     49                        $sector_info['objectClass'][]   = 'phpgwQuotaControlled'; 
     50                        /*Insere as informações sobre quota total por usuários e por gigabytes de espaço em disco   
     51              Se não vierem os dados, ele coloca 0 (Caso não exista controle de cota).  
     52             */ 
     53                $sector_info['diskQuota'] = isset($_POST['disk_quota']) ? (int)$_POST['disk_quota'] : 0;  
     54                $sector_info['usersQuota'] = isset($_POST['users_quota']) ? (int)$_POST['users_quota'] : 0;  
    5655 
    5756                        $systemName = $GLOBALS['phpgw_info']['server']['system_name']; 
     
    111110                                $this->so->remove_attribute($sector_info[0]['dn'], $ldap_mod_del); 
    112111                        }  
    113                         if(!in_array('phpgwQuotaControlled',$sector_info[0]['objectclass'] ))  
    114                         {  
    115                                 $ldap_mod_add = array();  
    116                                 $ldap_mod_add['objectClass'][] = 'phpgwQuotaControlled';  
    117                                 $ldap_mod_add['diskQuota'] = isset($_POST['disk_quota']) ? (int)$_POST['disk_quota'] : 0;  
    118                                 $ldap_mod_add['usersQuota'] = isset($_POST['users_quota']) ? (int)$_POST['users_quota'] : 0;  
    119   
    120                                 $this->so->add_attribute($sector_info[0]['dn'], $ldap_mod_add);  
     112 
     113                        if(!in_array('phpgwQuotaControlled',$sector_info[0]['objectclass'] )) 
     114                        { 
     115                                $ldap_mod_add = array(); 
     116                                $ldap_mod_add['objectClass'][] = 'phpgwQuotaControlled'; 
     117                                $ldap_mod_add['diskQuota'] = isset($_POST['disk_quota']) ? (int)$_POST['disk_quota'] : 0; 
     118                                $ldap_mod_add['usersQuota'] = isset($_POST['users_quota']) ? (int)$_POST['users_quota'] : 0; 
     119 
     120                                $this->so->add_attribute($sector_info[0]['dn'], $ldap_mod_add); 
    121121                        } 
    122                         else  
    123                         {  
    124                                 $ldap_mod_replace = array();  
    125                                 if(isset($_POST['disk_quota']))  
    126                                         $ldap_mod_replace['diskQuota'] = (int)$_POST['disk_quota'];  
    127   
    128                                 if(isset($_POST['users_quota']))  
    129                                         $ldap_mod_replace['usersQuota'] = (int)$_POST['users_quota'];  
    130   
    131                                 if(count($ldap_mod_replace) > 0)  
    132                                         $this->so->replace_attribute($sector_info[0]['dn'], $ldap_mod_replace);  
    133                         } 
     122                        else 
     123                        { 
     124                                $ldap_mod_replace = array();  
     125                                if(isset($_POST['disk_quota'])) 
     126                                        $ldap_mod_replace['diskQuota'] = (int)$_POST['disk_quota'];  
     127 
     128                                if(isset($_POST['users_quota'])) 
     129                                        $ldap_mod_replace['usersQuota'] = (int)$_POST['users_quota'];  
     130 
     131                                if(count($ldap_mod_replace) > 0) 
     132                                        $this->so->replace_attribute($sector_info[0]['dn'], $ldap_mod_replace);  
     133                        } 
    134134                        // Volta para o ListSectors 
    135135                        ExecMethod('expressoAdmin1_2.uisectors.list_sectors'); 
  • branches/2.4/expressoAdmin1_2/inc/class.db_functions.inc.php

    r6660 r6754  
    6666        } 
    6767 
    68         //returns true if cotas control property is set.  
    69         function use_cota_control() {  
    70                 $query = "select * from phpgw_config where config_name='expressoAdmin_cotasOu' and config_value='true'";  
    71                 $this->db->query($query);  
    72                 if($this->db->next_record())  
    73                         return true;  
    74                 return false;  
    75         }  
    76  
     68        //returns true if cotas control property is set.  
     69        function use_cota_control() {  
     70                $query = "select * from phpgw_config where config_name='expressoAdmin_cotasOu' and config_value='true'";  
     71                $this->db->query($query);  
     72                if($this->db->next_record())  
     73                        return true;  
     74                return false;  
     75        }  
     76                          
    7777        /* 
    7878        *       Reativa os usuários desabilitados por tempo inativo modificando o seu ultimo acesso para o dia atual. 
     
    779779                 
    780780                //Deleta todas as acls do Gerente 
    781                 $this->db->delete('phpgw_expressoadmin_acls',array('manager_lid' => $params['manager_lid'],'context' => $params['old_url_context']));  
     781                $this->db->delete('phpgw_expressoadmin_acls',array('manager_lid' => $params['manager_lid'],'context' => $params['old_url_context'])); 
    782782 
    783783                //Insere novas regras 
  • branches/2.4/expressoAdmin1_2/inc/class.functions.inc.php

    r6713 r6754  
    467467                                  
    468468                /*   
    469                         Funciona de maneira similar ao get_sectors_list, porém retorna a propria OU do contexto  
    470                         e monta o array de retorno de forma diferente, necessário para algumas mudanças implementadas  
    471                         no método admin.uisectors.list_sectors.  
     469                        Funciona de maneira similar ao get_sectors_list, porém retorna a propria OU do contexto  
     470                        e monta o array de retorno de forma diferente, necessário para algumas mudanças implementadas  
     471                        no método admin.uisectors.list_sectors.  
    472472                */  
    473473                function get_organizations2($contexts, $selected='', $referral=false, $show_invisible_ou=true) {                  
     
    495495                                ldap_close($ldap_conn);  
    496496          
    497                                 // Retiro o count do array info e inverto o array para ordenaçãoo.  
     497                                // Retiro o count do array info e inverto o array para ordenaçãoo.  
    498498                                for ($i=0; $i<$info["count"]; $i++)  
    499499                                {  
    500500                                        $dn = $info[$i]["dn"];  
    501501                                          
    502                                         // Necessário, pq em uma busca com ldapsearch ou=*, traz tb o próprio ou.   
     502                                        // Necessário, pq em uma busca com ldapsearch ou=*, traz tb o próprio ou.   
    503503                                        //if (strtolower($dn) == $context)  
    504504                                                //continue;  
     
    514514                                }  
    515515                        }  
    516                         // Ordenação por chave  
     516                        // Ordenação por chave  
    517517                        ksort($inverted_dn);                      
    518518                          
    519                         // Construção do select  
     519                        // Construção do select  
    520520                        $level = 0;  
    521521                        $options = array();  
     
    538538  
    539539                reset ( $array_dn );  
    540                 $display .= ' ' . urldecode( str_replace('\\', '%', current ( $array_dn ))); 
     540                $display .= ' ' . urldecode( str_replace('\\', '%', current ( $array_dn )));  
    541541                                  
    542542                                $info_retorno['display'] = $display;  
     
    598598                }  
    599599                  
    600                 //Checa se existe quota para mais um usuï¿œrio no setor... se existir retorna true, senï¿œo false.                
     600                //Checa se existe quota para mais um usuï¿œrio no setor... se existir retorna true, senï¿œo false.                
    601601                function existe_quota_usuario($setor) {  
    602602                        $num_users = $this->get_num_users($setor['dn']);  
     
    608608                }  
    609609                  
    610                 //Checa se existe quota em disco para mais um usuï¿œrio no setor... se existir retorna true, senï¿œo false.  
     610                //Checa se existe quota em disco para mais um usuï¿œrio no setor... se existir retorna true, senï¿œo false.  
    611611                function existe_quota_disco($setor,$quota_novo_usuario) {  
    612612                        settype($quota_novo_usuario,"float");             
    613                         $quota_novo_usuario /= 1024; //A quota vï¿œm da interface em megabytes, deve se tornar gigabyte.  
     613                        $quota_novo_usuario /= 1024; //A quota vï¿œm da interface em megabytes, deve se tornar gigabyte.  
    614614  
    615615                        $nova_quota = $this->get_actual_disk_usage($setor['dn']) + $quota_novo_usuario;  
     
    620620                }  
    621621                  
    622                 // Soma as quotas de todos os usuï¿œrios daquele contexto.  
     622                // Soma as quotas de todos os usuï¿œrios daquele contexto.  
    623623                function get_actual_disk_usage($context) {  
    624624                        $quota_usada=0;  
     
    629629                        foreach($usuarios as $usuario) {  
    630630                                $temp = $imap_functions->get_user_info($usuario['account_lid']);  
    631                                 if($temp['mailquota'] != -1) //Usuï¿œrio sem cota nï¿œo conta...  
     631                                if($temp['mailquota'] != -1) //Usuï¿œrio sem cota nï¿œo conta...  
    632632                                        $quota_usada += ($temp['mailquota'] / 1024);  
    633633                        }  
  • branches/2.4/expressoAdmin1_2/inc/class.uimanagers.inc.php

    r6585 r6754  
    8888 
    8989                        // Le BD para pegar os administradors. 
    90                         $query = 'SELECT DISTINCT ON (manager_lid) manager_lid , context FROM phpgw_expressoadmin_acls ORDER by manager_lid ';  
     90                        $query = 'SELECT DISTINCT ON (manager_lid) manager_lid , context FROM phpgw_expressoadmin_acls ORDER by manager_lid '; 
    9191                        $GLOBALS['phpgw']->db->query($query); 
    9292                        while($GLOBALS['phpgw']->db->next_record()) 
     
    236236                function edit_managers() 
    237237                { 
    238                         echo "<input type='hidden' name='old_url_context_aux' value='".$_GET['context']."'>";            
    239  
     238                        echo "<input type='hidden' name='old_url_context_aux' value='".$_GET['context']."'>"; 
     239                         
    240240                        // Caso nao seja admin, sai. 
    241241                        if (!$GLOBALS['phpgw']->acl->check('run',1,'admin')) 
  • branches/2.4/expressoAdmin1_2/inc/class.uisectors.inc.php

    r6713 r6754  
    233233 
    234234                        $combo_manager_org = substr( $combo_manager_org, 0, ( strpos($combo_manager_org, '</option>') + 9 ) ); 
    235                         $combo_manager_org =utf8_decode($combo_manager_org);  
    236                 $a_tmp = explode(",", $context);  
    237                 $sector_name = utf8_decode( str_replace('ou=' , '' ,$a_tmp[0])); 
     235                        $combo_manager_org =utf8_decode($combo_manager_org); 
     236                        $a_tmp = explode(",", $context);  
     237                        $sector_name = utf8_decode( str_replace('ou=' , '' ,$a_tmp[0])); 
    238238                         
    239239                        // Verifica se tem acesso a este modulo 
     
    255255                        if (!$_POST) 
    256256                        { 
    257                                 $sector_info = $this->so->get_info($_GET['context']);  
     257                                $sector_info = $this->so->get_info($_GET['context']); 
    258258                                $sector_disk_quota = $sector_info[0]['diskquota'][0];  
    259259                                $sector_users_quota = $sector_info[0]['usersquota'][0];  
     
    299299                function view_cota()  
    300300                {  
    301                         $context = utf8_decode($_GET['context']);   
    302                             $a_tmp = explode(",", $context);  
     301                        $context = utf8_decode($_GET['context']);  
     302                        $a_tmp = explode(",", $context);  
    303303  
    304304                        $sector_name = str_replace('ou=' , '' ,$a_tmp[0]);  
  • branches/2.4/expressoAdmin1_2/inc/class.user.inc.php

    r6660 r6754  
    3737                 
    3838                        if($this->db_functions->use_cota_control()) {  
    39                                                 //Verifica quota de usuários e disco              
     39                                                //Verifica quota de usuários e disco              
    4040                                                $setor = $this->functions->get_info($params['context']);  
    4141                                                if (!$this->functions->existe_quota_usuario($setor[0])) {  
    4242                                                        $return['status'] = false;  
    43                                                         $return['msg'] = $this->functions->lang("user cota exceeded");//TODO colocar valor de acordo com tabela de traduções.  
     43                                                        $return['msg'] = $this->functions->lang("user cota exceeded");//TODO colocar valor de acordo com tabela de traduções.  
    4444                                                        return $return;  
    4545                                                }   
    4646                                                if (!$this->functions->existe_quota_disco($setor[0],$params['mailquota'])) {  
    4747                                                        $return['status'] = false;  
    48                                                         $return['msg'] = $this->functions->lang("disk cota exceeded");//TODO colocar valor de acordo com tabela de traduções.  
     48                                                        $return['msg'] = $this->functions->lang("disk cota exceeded");//TODO colocar valor de acordo com tabela de traduções.  
    4949                                                        return $return;                           
    5050                                                }  
     
    318318                        */ 
    319319 
    320                         //Verifica quota de disco, como estou alterando, não preciso checar quota de usuários.  
     320                        //Verifica quota de disco, como estou alterando, não preciso checar quota de usuários.  
    321321                        if($this->db_functions->use_cota_control()) {             
    322322                                $setor = $this->functions->get_info($new_values['context']);  
    323323                                if (!$this->functions->existe_quota_disco($setor[0],$new_values['mailquota'])) {  
    324324                                        $return['status'] = false;  
    325                                         $return['msg'] = "Quota em disco excedida...";//TODO colocar valor de acordo com tabela de traduções.  
     325                                        $return['msg'] = "Quota em disco excedida...";//TODO colocar valor de acordo com tabela de traduções.  
    326326                                        return $return;                           
    327327                                }  
  • branches/2.4/expressoAdmin1_2/js/jscode/managers.js

    r6585 r6754  
    8282                else 
    8383                { 
    84                 var old_url_context = document.createElement("INPUT");  
    85                 old_url_context.type = "hidden";  
    86                 old_url_context.name = "old_url_context";  
    87                 old_url_context.value = $("input[name=old_url_context_aux]").val();  
    88                           
    89                 $(document.forms[0]).find("div").append(old_url_context);  
    90  
     84                var old_url_context = document.createElement("INPUT"); 
     85                old_url_context.type = "hidden"; 
     86                old_url_context.name = "old_url_context"; 
     87                old_url_context.value = $("input[name=old_url_context_aux]").val(); 
     88                 
     89                $(document.forms[0]).find("div").append(old_url_context); 
     90                 
    9191                        if (type == 'add') 
    9292                                cExecuteForm ("$this.manager.create", document.forms[0], handler_createsave_manager); 
  • branches/2.4/expressoAdmin1_2/setup/phpgw_pt-br.lang

    r6662 r6754  
    460460last login      expressoAdmin1_2        pt-br   Último acesso 
    461461user number cota        expressoAdmin1_2        pt-br   Cota de usuários 
    462 disk usage cota expressoAdmin1_2        pt-br   Cota de disco  
    463 user number     expressoAdmin1_2        pt-br   Nº de usuários  
    464 disk usage      expressoAdmin1_2        pt-br   Espaço utilizado  
    465 view cota       expressoAdmin1_2        pt-br   Cotas  
    466 users quota     expressoAdmin1_2        pt-br   Cota de Usuários  
     462disk usage cota expressoAdmin1_2        pt-br   Cota de disco 
     463user number     expressoAdmin1_2        pt-br   Nº de usuários 
     464disk usage      expressoAdmin1_2        pt-br   Espaço utilizado 
     465view cota       expressoAdmin1_2        pt-br   Cotas 
     466users quota     expressoAdmin1_2        pt-br   Cota de Usuários 
    467467disk quota      expressoAdmin1_2        pt-br   Cota em Disco 
    468468shared accounts expressoAdmin1_2        pt-br   Contas compartilhadas 
  • branches/2.4/expressoAdmin1_2/setup/setup.inc.php

    r5298 r6754  
    1313        $setup_info['expressoAdmin1_2']['title']        = 'Expresso Admin'; 
    1414        /* Ao incrementar versão, não esquecer de declarar função do tables_update.inc.php*/ 
    15         $setup_info['expressoAdmin1_2']['version']      = '2.4.0'; 
     15        $setup_info['expressoAdmin1_2']['version']      = '2.4.1'; 
    1616        $setup_info['expressoAdmin1_2']['app_order']    = 1; 
    1717        $setup_info['expressoAdmin1_2']['tables'][]             = 'phpgw_expressoadmin'; 
     
    3737        $setup_info['expressoAdmin1_2']['depends'][] = array( 
    3838                'appname' => 'phpgwapi', 
    39                 'versions' => Array('2.4') 
     39                'versions' => Array('2.4.1') 
    4040        ); 
    4141?> 
  • branches/2.4/expressoAdmin1_2/setup/tables_update.inc.php

    r5314 r6754  
    323323                $GLOBALS['setup_info']['expressoAdmin1_2']['currentver'] = '2.4.0'; 
    324324            return $GLOBALS['setup_info']['expressoAdmin1_2']['currentver'];  
    325         }  
     325        } 
     326 
     327        $test[] = '2.4.0'; 
     328        function expressoAdmin1_2_upgrade2_4_0() 
     329        { 
     330                $GLOBALS['setup_info']['expressoAdmin1_2']['currentver'] = '2.4.1'; 
     331                return $GLOBALS['setup_info']['expressoAdmin1_2']['currentver']; 
     332        }         
    326333?> 
  • branches/2.4/expressoCalendar/docs/caldav-DELETE.php.diff

    r6440 r6754  
    1515+     $dav_name = explode('/', $dav_resource->GetProperty('dav_name')); 
    1616+ 
    17 +    DAViCalAdapter::delete($dav_resource->GetProperty('caldav_data') ,array('owner' => $dav_resource->GetProperty('username') , 'calendarName' => $dav_name[ (count($dav_name)-3) ]) .'/'. $dav_name[ (count($dav_name)-2) ]); 
     17+     DAViCalAdapter::delete($dav_resource->GetProperty('caldav_data') ,array('owner' => $dav_resource->GetProperty('username') , 'calendarName' => $dav_name[ (count($dav_name)-3) ]) .'/'. $dav_name[ (count($dav_name)-2) ]); 
    1818+  } 
    1919+/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 
  • branches/2.4/expressoCalendar/docs/caldav-PUT-vcalendar.php.diff

    r6440 r6754  
    1414+   $params = array(); 
    1515+   $dav_name = explode('/', $dav_resource->GetProperty('dav_name')); 
    16 +   $params['calendarName'] = $dav_name[ (count($dav_name)-3) ] .'/'. $dav_name[ (count($dav_name)-2) ];  
     16+   $params['calendarName'] = $dav_name[ (count($dav_name)-3) ] .'/'. $dav_name[ (count($dav_name)-2) ]; 
    1717+   $params['owner'] =  $session->username; 
    1818+   $params['action'] = $put_action_type; 
  • branches/2.4/expressoMail1_2/inc/class.db_functions.inc.php

    r6331 r6754  
    2424        include_once(PHPGW_API_INC.'/class.db.inc.php');  
    2525}  
    26 include_once('class.dynamic_contacts.inc.php'); 
    2726         
    2827class db_functions 
     
    248247        } 
    249248 
    250         //Gera lista de contatos para ser gravado e acessado pelo expresso offline. 
    251         function get_dropdown_contacts_to_cache() { 
    252                 return $this->get_dropdown_contacts(); 
    253         } 
    254          
    255         function get_dropdown_contacts(){ 
    256                 $contacts = $this->get_cc_contacts(); 
    257                 $groups = $this->get_cc_groups(); 
    258                  
    259                 if(($contacts) && ($groups)) 
    260                         $stringDropDownContacts = $contacts . ',' . $groups; 
    261                 elseif ((!$contacts) && (!$groups)) 
    262                         $stringDropDownContacts = ''; 
    263                 elseif (($contacts) && (!$groups)) 
    264                         $stringDropDownContacts = $contacts; 
    265                 elseif ((!$contacts) && ($groups)) 
    266                         $stringDropDownContacts = $groups; 
    267                                          
    268                 if($_SESSION['phpgw_info']['user']['preferences']['expressoMail']['use_dynamic_contacts']) { 
    269                         // Free others requests  
    270                         session_write_close();  
    271                         $dynamic_contact = new dynamic_contacts(); 
    272                         $dynamic = $dynamic_contact->dynamic_contact_toString(); 
    273                         if ($dynamic) 
    274                                 $stringDropDownContacts .= ($stringDropDownContacts ? ',' : '') . $dynamic; 
    275                 } 
    276                 return $stringDropDownContacts;  
    277         } 
    278249        function getUserByEmail($params){        
    279250                // Follow the referral 
     
    309280        } 
    310281         
    311         function get_dynamic_contacts() 
    312         {                                
    313                 // Pesquisa os emails e ultima inserção nos contatos dinamicos. 
    314                 if(!$this->db->select('phpgw_expressomail_contacts','data','id_owner ='.$this->user_id,__LINE__,__FILE__)) 
    315                 { 
    316                 return $this->db->Error; 
    317 } 
    318                 while($this->db->next_record()) 
    319                 { 
    320                         $result[] = $this->db->row(); 
    321                 } 
    322                 if($result) foreach($result as $item)  
    323                 { 
    324                         $contacts = unserialize($item['data']); 
    325                 } 
    326                 if (count($contacts) == 0) 
    327                 {                        
    328                         return null; 
    329                 }        
    330                 //Sort by email 
    331                 function cmp($a, $b) { return strcmp($a["email"], $b["email"]);}  
    332                 usort($contacts,"cmp"); 
    333                 return $contacts; 
    334         } 
    335         function update_contacts($contacts=array()) 
    336         {                        
    337                  
    338          
    339                 if(!$this->db->select('phpgw_expressomail_contacts','data','id_owner ='.$this->user_id,__LINE__,__FILE__)) 
    340         { 
    341             $result['dberr1'] = $this->db->Error; 
    342         } 
    343                 $regs = array(); 
    344                 while($this->db->next_record()) 
    345         { 
    346             $regs[] = $this->db->row(); 
    347         } 
    348                 $old_contatacts = array(); 
    349                 foreach($regs as $old){ 
    350                         $old_contatacts = unserialize($old['data']); 
    351                 } 
    352                   
    353                 foreach($old_contatacts as $i => $v) 
    354                         foreach($contacts as $ii => $vv) 
    355                                 if(trim($v['email']) == trim($vv['email'])) 
    356                                         unset($old_contatacts[$i]); 
    357                  
    358                   
    359                  $old_contatacts = array_merge( $old_contatacts , $contacts);            
    360                 // Atualiza um email nos contatos dinamicos. 
    361                 if(!$this->db->update('phpgw_expressomail_contacts ','data=\''.serialize($old_contatacts).'\'','id_owner ='.$this->user_id,__LINE__,__FILE__)) 
    362                 { 
    363                         return $this->db->Error; 
    364                 } 
    365                 return $contacts; 
    366         }        
    367282        function update_preferences($params){ 
    368283                $string_serial = urldecode($params['prefe_string']);                             
     
    375290                else 
    376291                        return array("success" => true); 
    377         } 
    378          
    379         function insert_contact($contact)        
    380         { 
    381                 $contacts[] = array( 'timestamp'        => time(), 
    382                                                                 'email'         => $contact ); 
    383  
    384                 // Insere um email nos contatos dinamicos.       
    385                 $query = 'INSERT INTO phpgw_expressomail_contacts (data, id_owner)  ' . 
    386                                         'values ( \''.serialize($contacts).'\', '.$this->user_id.')'; 
    387                  
    388                 if(!$this->db->query($query,__LINE__,__FILE__)) 
    389                 return $this->db->Error; 
    390         return $contacts; 
    391         } 
    392          
    393         function remove_dynamic_contact($user_id,$line,$file) 
    394         { 
    395                 $where = $user_id.' = id_owner'; 
    396                 $this->db->delete('phpgw_expressomail_contacts',$where,$line,$file);     
    397292        } 
    398293         
  • branches/2.4/expressoMail1_2/inc/class.functions.inc.php

    r6733 r6754  
    1515                function CalculateDateOffset() 
    1616                { 
    17                                          
    1817 
    19                                         $zones = $this->getTimezones();  
    20                             $_SESSION['phpgw_info']['user']['preferences']['expressoMail']['timezone'] = $GLOBALS['phpgw_info']['user']['preferences']['expressoMail']['timezone'] ? $GLOBALS['phpgw_info']['user']['preferences']['expressoMail']['timezone'] : sprintf("%s", array_search("America/Sao_Paulo", $zones));  
    2118                     
     19                    $zones = $this->getTimezones(); 
     20                    $_SESSION['phpgw_info']['user']['preferences']['expressoMail']['timezone'] = $GLOBALS['phpgw_info']['user']['preferences']['expressoMail']['timezone'] ? $GLOBALS['phpgw_info']['user']['preferences']['expressoMail']['timezone'] : sprintf("%s", array_search("America/Sao_Paulo", $zones)); 
     21 
    2222                    $timezone_index = $_SESSION['phpgw_info']['user']['preferences']['expressoMail']['timezone']; 
    2323                    $user_timezone = $zones[$timezone_index]; 
  • branches/2.4/expressoMail1_2/inc/class.imap_functions.inc.php

    r6735 r6754  
    10951095        function get_info_msg($params) 
    10961096        { 
    1097          
    10981097                if(isset($params['alarm'])){ 
    10991098                        $alarm = $params['alarm']; 
     
    11401139            //$return['signature']      = $return_get_body['signature']; 
    11411140                } 
    1142                  
     1141 
    11431142                $pattern = '/^[ \t]*Disposition-Notification-To:.*/mi'; 
    11441143                if (preg_match($pattern, $header_, $fields)) 
    1145                 $return['DispositionNotificationTo'] = base64_encode(trim(str_ireplace('Disposition-Notification-To:', '', $fields[0]))); 
     1144                        $return['DispositionNotificationTo'] = base64_encode(trim(str_ireplace('Disposition-Notification-To:', '', $fields[0])));  
    11461145 
    11471146                $return['Recent']       = $header->Recent; 
     
    14001399                $return['login'] = $_SESSION['phpgw_info']['expressomail']['user']['account_id'];//$GLOBALS['phpgw_info']['user']['account_id']; 
    14011400                $return['reply_toaddress'] = $header->reply_toaddress; 
    1402                  
     1401                 
    14031402                if(($return['from']['email'] ==  '@unspecified-domain' || $return['sender']['email'] == null) && $return['msg_folder'] == 'INBOX/Drafts'){ 
    14041403                        $return['from']['email'] = "Rascunho"; 
    14051404                } 
    1406                  
     1405 
    14071406                if(strpos($return['toaddress2'], 'undisclosed-recipients') !== false){ 
    14081407                        $return['toaddress2'] = $this->functions->getLang('without destination'); 
     
    16771676                        break; 
    16781677 
    1679                       case 'CANCEL': 
     1678                    case 'CANCEL': 
    16801679 
    16811680                          $ical = $icalService->getComponent('vevent'); 
     
    28112810            $header = $this->get_header($msg_numb); 
    28122811            $header_ = imap_fetchheader($this->mbox, $msg_numb, FT_UID); 
    2813             $pattern = '/^[ \t]*Disposition-Notification-To:.*/mi';  
    2814                         if (preg_match($pattern, $header_, $fields))  
    2815                                 $return['DispositionNotificationTo'] = base64_encode(trim(str_ireplace('Disposition-Notification-To:', '', $fields[0]))); 
     2812            $pattern = '/^[ \t]*Disposition-Notification-To:.*/mi'; 
     2813                        if (preg_match($pattern, $header_, $fields)) 
     2814                                $return['DispositionNotificationTo'] = base64_encode(trim(str_ireplace('Disposition-Notification-To:', '', $fields[0])));  
    28162815 
    28172816            $message_id = $header->message_id; 
     
    29182917                     if($att['disposition'] == 'embedded' && $isHTML) //Caso mensagem em texto simples converter os embedded para attachments 
    29192918                     { 
    2920                          $body = str_replace('"../prototype/getArchive.php?mailAttachment='.$att['id'].'"', $att['name'], $body); 
    2921                          $mailService->addStringImage(base64_decode($att['source']), $att['type'], mb_convert_encoding($att['name'], 'ISO-8859-1' , 'UTF-8,ISO-8859-1'));  
     2919                         $body = str_replace('"../prototype/getArchive.php?mailAttachment='.$att['id'].'"', '"'.mb_convert_encoding($att['name'], 'ISO-8859-1' , 'UTF-8,ISO-8859-1').'"', $body); 
     2920                         $mailService->addStringImage(base64_decode($att['source']), $att['type'], mb_convert_encoding($att['name'], 'ISO-8859-1' , 'UTF-8,ISO-8859-1')); 
    29222921                     } 
    29232922                     else 
    2924                           $mailService->addStringAttachment(base64_decode($att['source']), mb_convert_encoding($att['name'], 'ISO-8859-1' , 'UTF-8,ISO-8859-1'), $att['type'], 'base64', isset($att['disposition']) ? $att['disposition'] :'attachment' ); 
     2923                         $mailService->addStringAttachment(base64_decode($att['source']), mb_convert_encoding($att['name'], 'ISO-8859-1' , 'UTF-8,ISO-8859-1'), $att['type'], 'base64', isset($att['disposition']) ? $att['disposition'] :'attachment' ); 
    29252924                      
    29262925                     $message_size_total += $att['size']; 
     
    29372936                                {     
    29382937                                    $body = str_ireplace('<img src="./inc/get_archive.php?msgFolder='.$value['folder'].'&msgNumber='.$value['uid'].'&indexPart='.$value['part'].'" />' , '<img src="'.$att['name'].'" />', $body); 
    2939                                     $mailService->addStringImage($att['source'], $att['type'],mb_convert_encoding($att['name'], 'ISO-8859-1' , 'UTF-8,ISO-8859-1') );  
     2938                                    $mailService->addStringImage($att['source'], $att['type'],mb_convert_encoding($att['name'], 'ISO-8859-1' , 'UTF-8,ISO-8859-1') ); 
    29402939                                } 
    29412940                                else 
     
    29482947                                $mbox_stream = $this->open_mbox(mb_convert_encoding($value['folder'] , 'ISO-8859-1' , 'UTF7-IMAP')); 
    29492948                                $rawmsg = $this->getRawHeader($value['uid']) . "\r\n\r\n" . $this->getRawBody($value['uid']); 
    2950                                   
    2951                                 $mailService->addStringAttachment($rawmsg, mb_convert_encoding(base64_decode($value['name']), 'ISO-8859-1' , 'UTF-8,ISO-8859-1'), 'message/rfc822', '7bit', 'attachment' );  
     2949                                 
     2950                                $mailService->addStringAttachment($rawmsg, mb_convert_encoding(base64_decode($value['name']), 'ISO-8859-1' , 'UTF-8,ISO-8859-1'), 'message/rfc822', '7bit', 'attachment' ); 
    29522951                                $message_size_total += mb_strlen($rawmsg); //Adiciona o tamanho do anexo a variavel que controlao tamanho da msg. 
    29532952                                unset($rawmsg); 
     
    30293028             */ 
    30303029            //////////////////////////////////////////////////////////////////////////////////////////////////// 
    3031  
    30323030            if ($isHTML) 
    3033             {  
    3034                 $defaultStyle = '';  
    3035                   
    3036                 if(isset($_SESSION['phpgw_info']['user']['preferences']['expressoMail']['font_family_editor']) && $_SESSION['phpgw_info']['user']['preferences']['expressoMail']['font_family_editor'])  
    3037                 $defaultStyle .= ' font-family:'.$_SESSION['phpgw_info']['user']['preferences']['expressoMail']['font_family_editor'] .';';  
    3038                                   
    3039                 if(isset($_SESSION['phpgw_info']['user']['preferences']['expressoMail']['font_size_editor']) && $_SESSION['phpgw_info']['user']['preferences']['expressoMail']['font_size_editor'])  
    3040                 $defaultStyle .= ' font-size:'.$_SESSION['phpgw_info']['user']['preferences']['expressoMail']['font_size_editor'].';';  
    3041                         
    3042                 $body = '<span class="'.$defaultStyle.'">'.$body.'</span>';  
     3031            { 
     3032                $this->rfc2397ToEmbeddedAttachment($mailService , $body); 
     3033 
     3034                $defaultStyle = ''; 
     3035                if(isset($_SESSION['phpgw_info']['user']['preferences']['expressoMail']['font_family_editor']) && $_SESSION['phpgw_info']['user']['preferences']['expressoMail']['font_family_editor']) 
     3036                    $defaultStyle .= ' font-family:'.$_SESSION['phpgw_info']['user']['preferences']['expressoMail']['font_family_editor'] .';'; 
     3037                 
     3038                if(isset($_SESSION['phpgw_info']['user']['preferences']['expressoMail']['font_size_editor']) && $_SESSION['phpgw_info']['user']['preferences']['expressoMail']['font_size_editor']) 
     3039                    $defaultStyle .= ' font-size:'.$_SESSION['phpgw_info']['user']['preferences']['expressoMail']['font_size_editor'].';'; 
     3040     
     3041                $body = '<span class="'.$defaultStyle.'">'.$body.'</span>'; 
    30433042                $mailService->setBodyHtml($body); 
    3044              } 
     3043            }     
    30453044            else 
    30463045                $mailService->setBodyText($body); 
     
    30743073                    error_log("$now - $userip - $sent [$subject] - $userid => $addrs\r\n", 3, "/home/expressolivre/mail_senders.log"); 
    30753074                } 
    3076                 if ($_SESSION['phpgw_info']['user']['preferences']['expressoMail']['use_dynamic_contacts']) { 
    3077                     $contacts = new dynamic_contacts(); 
    3078                     $new_contacts = $contacts->add_dynamic_contacts($toaddress . "," . $ccaddress . "," . $ccoaddress); 
    3079                     return array("success" => true, "new_contacts" => $new_contacts); 
    3080                 } 
    3081                  
    3082                    if($params['uids_save'] ) 
    3083                         $this->delete_msgs(array('folder'=> $params['save_folder'] , 'msgs_number' => $params['uids_save'])); 
     3075                if($params['uids_save'] ) 
     3076                                        $this->delete_msgs(array('folder'=> $params['save_folder'] , 'msgs_number' => $params['uids_save'])); 
    30843077                        
    3085                  
    30863078                //return array("success" => true, "folder" => $folder_list); 
    30873079                                return array("success" => true, "load" => $has_new_folder); 
     
    38393831        } 
    38403832 
    3841         function send_notification($params)  
    3842         {  
    3843                 $mailService = ServiceLocator::getService('mail'); 
     3833        function send_notification($params) 
     3834        { 
     3835                $mailService = ServiceLocator::getService('mail');  
    38443836                $body = lang("Your message: %1",$params['subject']) . '<br>'; 
    38453837                $body .= lang("Received in: %1",date("d/m/Y H:i",$params['date'])) . '<br>'; 
    38463838                $body .= lang("Has been read by: %1 &lt; %2 &gt; at %3", $_SESSION['phpgw_info']['expressomail']['user']['fullname'], $_SESSION['phpgw_info']['expressomail']['user']['email'], date("d/m/Y H:i")); 
    3847                 return $mailService->sendMail(base64_decode($params['notificationto']),   
    3848                                                            $_SESSION['phpgw_info']['expressomail']['user']['email'],  
    3849                                                            $this->htmlspecialchars_decode(lang("Read receipt: %1",$params['subject'])),  
    3850                                                            $body); 
     3839                return $mailService->sendMail(base64_decode($params['notificationto']),  
     3840                                                           $_SESSION['phpgw_info']['expressomail']['user']['email'],  
     3841                                                           $this->htmlspecialchars_decode(lang("Read receipt: %1",$params['subject'])),  
     3842                                                           $body);  
    38513843 
    38523844        } 
     
    49074899                                $return['msgs'][$i]['flag'] .= $msg->Deleted ? $msg->Deleted : '';       
    49084900                                 
    4909                                 $header = imap_fetchheader( $imap, $v , FT_UID ); // Necessario para recuperar se a mensagem é importante ou não. 
     4901                                $header = imap_fetchheader( $imap, $v , FT_UID ); // Necessario para recuperar se a mensagem é importante ou não. 
    49104902                                $importante = array(); 
    49114903                                 
     
    51885180        * @param      <Array> <$proc> <ações do filtro> 
    51895181        * @return     <Regras do usuário em Array> 
    5190         * @access     <public> 
     5182        * @access public 
    51915183        */ 
    51925184        function apliSieveFilter($msgs , $proc) 
     
    52295221                return $ret; 
    52305222        } 
     5223 
     5224   /** 
     5225    * Método que convert imagens no formato rfc2397 para Embedded Attachment 
     5226    * 
     5227    * @license    http://www.gnu.org/copyleft/gpl.html GPL 
     5228    * @author     Consórcio Expresso Livre - 4Linux (www.4linux.com.br) e Prognus Software Livre (www.prognus.com.br) 
     5229    * @sponsor     Caixa Econômica Federal 
     5230    * @author     Cristiano Corrêa Schmidt 
     5231    * @param      <MailService> <$mailService> <Referencia objeto MailService> 
     5232    * @param      <String> <$body> <Referencia Corpo do email> 
     5233    * @return     <void> 
     5234    * @access     public 
     5235    */ 
     5236   function rfc2397ToEmbeddedAttachment( &$mailService , &$body ) 
     5237   {  
     5238       $matches = array(); 
     5239       preg_match_all("/src=[\'|\"]+data:([^,]*);base64,([a-zA-Z0-9\+\/\=]+)[\'|\"]+/i", $body, $matches,  PREG_SET_ORDER); //Resgata imagens em rfc2397        
     5240        
     5241       foreach ($matches as $i => &$v) 
     5242       { 
     5243            $ext = explode(';', $v[1]); //quebra todos os parametros em um array.  
     5244            $mailService->addStringImage(base64_decode($v[2]), $ext[0] , 'EmbeddedImage'.$i.'.'.$this->mimeToExtension($v[1]));  
     5245            $body = str_replace($v[0], 'src="EmbeddedImage'.$i.'.'.$this->mimeToExtension($ext[0]).'"' , $body);  
     5246       } 
     5247   } 
     5248 
     5249   /** 
     5250    * Método que retorna a extensão do arquivo atraves do mime type 
     5251    * 
     5252    * @license    http://www.gnu.org/copyleft/gpl.html GPL 
     5253    * @author     Consórcio Expresso Livre - 4Linux (www.4linux.com.br) e Prognus Software Livre (www.prognus.com.br) 
     5254    * @sponsor     Caixa Econômica Federal 
     5255    * @author     Cristiano Corrêa Schmidt 
     5256    * @param      <String> <$mimeType> <Mime Type do arquivo> 
     5257    * @return     <String> <extensão> 
     5258    * @access     public 
     5259    */ 
     5260   function mimeToExtension($mimeType) 
     5261   { 
     5262       switch ( $mimeType )  
     5263       {    
     5264           case 'image/bmp' :  
     5265           return 'bmp'; 
     5266           case 'image/cgm' : 
     5267               return 'cgm'; 
     5268           case 'image/vnd.djvu' :  
     5269               return 'djv'; 
     5270           case 'image/gif' : 
     5271               return 'gif'; 
     5272           case 'image/x-icon' : 
     5273               return 'ico'; 
     5274           case 'image/ief' : 
     5275               return 'ief'; 
     5276           case 'image/jpeg' : 
     5277               return 'jpg'; 
     5278           case 'image/x-macpaint' : 
     5279               return 'mac'; 
     5280           case 'image/pict' : 
     5281               return 'pct'; 
     5282           case 'image/png' : 
     5283               return 'png'; 
     5284           case 'image/x-quicktime' : 
     5285               return 'qti'; 
     5286           case 'image/x-rgb' : 
     5287               return 'rgb'; 
     5288           case 'image/tiff' : 
     5289               return 'tif'; 
     5290           default: 
     5291               return ''; 
     5292       } 
     5293        
     5294   } 
     5295         
     5296         
     5297        /** 
     5298        * Método que retorna as mensagens com a flag $FilteredMessage que representa as mensagens filtradas que devem ser alertadas para o usuário 
     5299        * 
     5300        * @license    http://www.gnu.org/copyleft/gpl.html GPL 
     5301        * @author     Consórcio Expresso Livre - 4Linux (www.4linux.com.br) e Prognus Software Livre (www.prognus.com.br) 
     5302        * @sponsor    Caixa Econômica Federal 
     5303        * @author     Airton Bordin Junior <airton@prognus.com.br> 
     5304        * @author         Marcieli <marcieli@prognus.com.br>     
     5305        * @author         Marcos <marcosw@prognus.com.br>        
     5306        * @param      <Array> <$paramFolders> <Pastas onde devem ser buscadas as mensagens> 
     5307        * @return     <Mensagens encontradas com a flag $FilteredMessage> 
     5308        * @access     <public> 
     5309        */ 
     5310        function getFlaggedAlertMessages($paramFolders) { 
     5311                 
     5312                $folders = explode(",", $paramFolders['folders']); 
     5313         
     5314                $messages = array(); 
     5315                $result   = array(); 
     5316                $label    = '$FilteredMessage'; 
     5317                 
     5318                foreach ($folders as $folder) { 
     5319                        $this->mbox = $this->open_mbox($folder); 
     5320                        /* Não deletadas, não lidas e com a flag */ 
     5321                        $messages = imap_search($this->mbox, 'UNDELETED UNSEEN KEYWORD "$FilteredMessage"', SE_UID); 
     5322                        if(is_array($messages)) 
     5323                                foreach ($messages as $k => $m) { 
     5324                                        $headers = imap_fetch_overview($this->mbox, $m, FT_UID); 
     5325                                        $date = explode(" ", $headers[0]->date);  
     5326                                        $result[$m."_".$folder] = array ( 
     5327                                                'udate'      => $headers[0]->udate, 
     5328                                                'smalldate'  => $date[5], 
     5329                                                'from'       => $headers[0]->from, 
     5330                                                'subject'    => self::decodeMimeString($headers[0]->subject), 
     5331                                                'msg_number' => $m, 
     5332                                                'msg_folder' => $folder 
     5333                                        ); 
     5334                                } 
     5335                } 
     5336                $result_final = array(); 
     5337                foreach ($result as $r){ 
     5338                        $result_final[] = $r; 
     5339                } 
     5340 
     5341                return $result_final; 
     5342        } 
     5343         
     5344        /** 
     5345        * Esta função é chamada ao clicar sobre uma mensagem listada nos alertas de Filtro por Remetente 
     5346        * remove a flag e chama a função que recupera os dados da mensagem, para serem utilizados na abertura da aba de leitura da msg 
     5347        */ 
     5348        function open_flagged_msg($params){ 
     5349                $message_number = $params['msg_number']; 
     5350                $message_folder = $params['msg_folder']; 
     5351                $alarm = $params['alarm']; 
     5352                if ($message_folder && $message_number) { 
     5353                        $this->mbox = $this->open_mbox($message_folder); 
     5354                        imap_clearflag_full($this->mbox, $message_number, '$FilteredMessage', ST_UID); 
     5355                } 
     5356                $r = $this->get_info_msg(array('msg_number' => $message_number, 'msg_folder' =>urlencode($message_folder), 'alarm' => ($alarm))); 
     5357                return $r; 
     5358        } 
     5359         
     5360        /** 
     5361        * Remove a flag que caracteriza uma mensagem como alertada por Filtro por Remetente. 
     5362        * se houver o parametro msg_number, então remove a flag de uma msg especifica 
     5363        * se não houver o parametro msg_number, mas sim o from, então remove a flag de todas as msgs da pasta (parametro from),  
     5364        * e que o remetente for o from. 
     5365        */ 
     5366        function removeFlagMessagesFilter($params){ 
     5367                $message_number = $params['msg_number']; 
     5368                $folder = $params['folder']; 
     5369 
     5370                if(isset($message_number)){ 
     5371                        if(isset($folder)){ 
     5372                                $message_number = explode(',', $message_number); 
     5373                                $this->mbox = $this->open_mbox($folder); 
     5374                                foreach ($message_number as $k => $m) {                  
     5375                                                imap_clearflag_full($this->mbox, $m, '$FilteredMessage', ST_UID); 
     5376                                        } 
     5377                        } 
     5378                } 
     5379                else{ 
     5380                        $from = $params['from']; 
     5381                        if(isset($folder) && isset($from)){ 
     5382                                $this->mbox = $this->open_mbox($folder); 
     5383                                $messages = imap_search($this->mbox, 'UNDELETED UNSEEN KEYWORD "$FilteredMessage"', SE_UID); 
     5384                        } 
     5385                        if(is_array($messages)){ 
     5386                                foreach ($messages as $k => $m) { 
     5387                                        $headers = imap_fetch_overview($this->mbox, $m, FT_UID); 
     5388                                        if(strpos($headers[0]->from, $from) > 0){ 
     5389                                                imap_clearflag_full($this->mbox, $m, '$FilteredMessage', ST_UID); 
     5390                                        } 
     5391                                } 
     5392                        } 
     5393                } 
     5394                 
     5395                return array('status' => "success");  
     5396        } 
     5397 
    52315398} 
    52325399?> 
  • branches/2.4/expressoMail1_2/inc/class.ldap_functions.inc.php

    r6139 r6754  
    436436                $ldapService->connection = $this->ds; 
    437437                $campos_extras = ''; 
    438                 $justthese = array("cn", "mail", "telephonenumber", "mobile", "phpgwaccountvisible", "uid", "employeenumber", "ou"); 
     438                $justthese = array("cn", "mail", "telephonenumber", "mobile", "phpgwaccountvisible", "uid", "employeenumber", "ou","vacationActive","vacationInfo"); 
    439439                foreach($searchable_fields as $fields_ldap => $value_field) 
    440440                {    
     
    473473                                        $this->ldapConnect(true,$i); 
    474474                                        $filter="(|(cn=*$search_for*)(mail=*$search_for*))"; 
    475                                         $justthese = array("cn", "mail", "telephoneNumber", "mobile", "phpgwAccountVisible", "uid","employeeNumber", "ou"); 
     475                                        $justthese = array("cn", "mail", "telephoneNumber", "mobile", "phpgwAccountVisible", "uid","employeeNumber", "ou","vacationActive","vacationInfo");  
    476476                                        $sr=@ldap_search($this->ds, $this->ldap_context, $filter, $justthese, 0, $this->max_result+1); 
    477477                                        if(!$sr) 
     
    496496                                 
    497497                        $info_return['search_for'] = $params['search_for']; 
    498             return $info_return; 
     498            return $this->toISO8859($info_return);  
    499499        }  
    500500         
     501    /*Converte um parametro de UTF-8 para ISO8859*/  
     502    function toISO8859($data)  
     503    {  
     504        if(!is_array($data))  
     505          return mb_convert_encoding( $data , 'ISO-8859-1' , 'UTF-8 , ISO-8859-1' );  
     506        $return = array();  
     507        foreach ($data as $i => $v)  
     508          $return[$this->toISO8859($i)] = $this->toISO8859($v);  
     509        return $return;  
     510    }  
     511 
    501512        function make_quicksearch_card($info, $cn) 
    502513        { 
     
    553564                        '<tr class="quicksearchcontacts_unselected">' . 
    554565                                '<td class="cc" width="1%">' . 
    555                                         '<a title="'.$this->functions->getLang("Write message").'" onClick="javascript:QuickSearchUser.create_new_message(\''.$contacts_result["cn"].'\', \''.$contacts_result["mail"].'\')">' . 
     566                                        '<a title="'.$this->functions->getLang("Write message").'" onClick="javascript:QuickSearchUser.create_new_message(\''.$contacts_result["cn"].'\', \''.$contacts_result["mail"].'\', \''.$contacts_result["uid"].'\')">' . 
    556567                                                $photo_link . 
    557568                                        '</a>' . 
     
    559570                                '<td class="cc">' . 
    560571                                        '<span name="cn">' . ($empNumber != "" ? $empNumber : $uid) . $contacts_result['cn'] . '</span>' . '<br>' . 
    561                                         '<a title="'.$functions->getLang("Write message").'" onClick="javascript:QuickSearchUser.create_new_message(\''.$contacts_result["cn"].'\', \''.$contacts_result["mail"].'\')">' . 
     572                                        '<a title="'.$functions->getLang("Write message").'" onClick="javascript:QuickSearchUser.create_new_message(\''.$contacts_result["cn"].'\', \''.$contacts_result["mail"].'\', \''.$contacts_result["uid"].'\')">' . 
    562573                                                '<font color=blue>' . 
    563574                                                '<span name="mail">' . $contacts_result['mail'] . '</span></a></font>'. 
  • branches/2.4/expressoMail1_2/index.php

    r6669 r6754  
    3838                <script src="../prototype/plugins/farbtastic/farbtastic.js" language="javascript"></script> 
    3939                <script src="../prototype/api/datalayer.js" language="javascript"></script>                                      
     40                <script src="../prototype/api/rest.js" language="javascript"></script>                                   
    4041                <script type="text/javascript" src="../prototype/plugins/scrollto/jquery.scrollTo.js"></script> 
    41                 <script language="javascript">DataLayer.dispatchPath = "../prototype/";</script>                                         
     42                <script language="javascript"> 
     43                        DataLayer.dispatchPath = "../prototype/"; 
     44                        REST.dispatchPath = "../prototype/"; 
     45                        REST.load(""); 
     46                </script>                                        
    4247                <script src="../library/ckeditor/ckeditor.js" language="javascript" charset="utf-8"></script>  
    4348                <script src="../library/ckeditor/adapters/jquery.js" language="javascript"></script>  
     
    5661                <script type="text/javascript" src="../prototype/plugins/datejs/sugarpak.js"></script> 
    5762                <script type="text/javascript" src="../prototype/plugins/datejs/parser.js"></script> 
     63                <script type="text/javascript" src="../prototype/plugins/jq-raty/js/jquery.raty.min.js"></script> 
    5864 
    5965                <script type="text/javascript" src="../prototype/plugins/watermark/jquery.watermarkinput.js"></script> 
     
    7177                <script type="text/javascript" src="../prototype/modules/calendar/js/calendar.date.js"></script> 
    7278                <script type="text/javascript" src="../prototype/modules/calendar/js/calendar.codecs.js"></script> 
    73                  
     79                <link rel="stylesheet" type="text/css" href="../prototype/plugins/freeow/style/freeow/freeow.css" > 
     80                <script type="text/javascript" src="../prototype/plugins/freeow/jquery.freeow.min.js"></script> 
     81                <script type="text/javascript" src="../prototype/plugins/freeow/jquery.freeow.js"></script> 
     82 
    7483 
    7584                <script src="js/rich_text_editor.js" type="text/javascript"></script> 
     
    194203        $_SESSION['phpgw_info']['user']['preferences']['expressoMail']['telephone_number'] = $GLOBALS['phpgw_info']['user']['telephonenumber']; 
    195204        $_SESSION['phpgw_info']['user']['preferences']['expressoMail']['use_cache'] = $current_config['expressoMail_enable_cache']; 
     205        $_SESSION['phpgw_info']['user']['preferences']['expressoMail']['expressoMail_ldap_identifier_recipient'] = $current_config['expressoMail_ldap_identifier_recipient']; 
    196206        $_SESSION['phpgw_info']['user']['preferences']['expressoMail']['use_x_origin'] = $current_config['expressoMail_use_x_origin']; 
    197207        $_SESSION['phpgw_info']['user']['preferences']['expressoMail']['number_of_contacts'] = $current_config['expressoMail_Number_of_dynamic_contacts'] ? $current_config['expressoMail_Number_of_dynamic_contacts'] : "0"; 
     
    215225        $_SESSION['phpgw_info']['user']['preferences']['expressoMail']['auto_create_local'] = $GLOBALS['phpgw_info']['user']['preferences']['expressoMail']['auto_create_local'] ? $GLOBALS['phpgw_info']['user']['preferences']['expressoMail']['auto_create_local'] : "0"; 
    216226        $_SESSION['phpgw_info']['user']['preferences']['expressoMail']['return_recipient_deafault'] = $GLOBALS['phpgw_info']['user']['preferences']['expressoMail']['return_recipient_deafault'] ? $GLOBALS['phpgw_info']['user']['preferences']['expressoMail']['return_recipient_deafault'] : "0"; 
    217  
    218227        $_SESSION['phpgw_info']['user']['preferences']['expressoMail']['quick_search_default'] = $GLOBALS['phpgw_info']['user']['preferences']['expressoMail']['quick_search_default'] ? $GLOBALS['phpgw_info']['user']['preferences']['expressoMail']['quick_search_default'] : 1; 
    219228        //      ACL for block edit Personal Data. 
     
    274283    $_SESSION['phpgw_info']['server']['expressomail']['expressoMail_use_spam_filter'] = $current_config['expressoMail_use_spam_filter'];    
    275284    echo '<script> var use_spam_filter = \''.$current_config['expressoMail_use_spam_filter'].'\' 
    276            var sieve_forward_domains = \''.$current_config['expressoMail_sieve_forward_domains'].'\' </script>'; 
     285           var sieve_forward_domains = \''.$current_config['expressoMail_sieve_forward_domains'].'\'  
     286                  </script>'; 
    277287        // End Set Anti-Spam options. 
    278288 
     
    352362                                "js/main.js," . 
    353363                                "js/draw_api.js,"; 
    354  
    355         if ($GLOBALS['phpgw_info']['user']['preferences']['expressoMail']['use_shortcuts'])  
    356         {  
    357                 //echo $obj -> getFilesJs("js/shortcut.js", $update_version);  
    358                 $scripts .= "js/shortcut.js,";  
    359         }  
    360  
     364         
     365        if ($GLOBALS['phpgw_info']['user']['preferences']['expressoMail']['use_shortcuts']) 
     366        { 
     367                //echo $obj -> getFilesJs("js/shortcut.js", $update_version);  
     368                $scripts .= "js/shortcut.js,"; 
     369        } 
     370                                 
    361371        if($_SESSION['phpgw_info']['user']['preferences']['expressoMail']['use_local_messages']) 
    362372                $scripts .= "js/local_messages.js,"; 
     
    364374                                "js/DropDownContacts.js," . 
    365375                                "js/doiMenuData.js," . 
    366                                 "js/connector.js"; 
     376                                "js/connector.js";               
    367377        echo $obj -> getFilesJs($scripts, $update_version); 
    368378        echo ' 
  • branches/2.4/expressoMail1_2/js/QuickCatalogSearch.js

    r6631 r6754  
    1414                }); 
    1515        });         
    16  
     16         
    1717        /* showlist */   
    1818        emQuickCatalogSearch.prototype.showList = function(data, begin, end, ID, field) 
     
    125125                switch(data_['type_catalog']) { 
    126126                        case 'G': 
    127                                   if(data_['extra_ldap_fields'] != undefined){  
    128                                           if(data_['extra_ldap_fields'].length != 0)  
    129                                                   var extra_fields = (data_['extra_ldap_fields']).split("#");   
     127                                if(data_['extra_ldap_fields'] != undefined){ 
     128                                        if(data_['extra_ldap_fields'].length != 0) 
     129                                                var extra_fields = (data_['extra_ldap_fields']).split("#");    
    130130                                        else 
    131131                                                var extra_fields = [];   
     
    149149                                        } 
    150150                                } 
     151                                if (data_[id_contact].vacationactive == "TRUE"){ 
     152                                        details.append('<p><img src="templates/default/images/mala-big.png"/><span class="title-outoffice">Filtro "Fora do Escritório" ativo.</span></p>');      
     153                                        if ( data_[id_contact].vacationinfo ){ 
     154                                                details.append('<div class="outoffice"><div class="outoffice-inner"><span>'+ data_[id_contact].vacationinfo +'</span></div></div>'); 
     155                                                if ( $('.outoffice-inner').height() > $('.outoffice').height() ){                                                
     156                                                        var link = $('<a>').html('Ver mais'); 
     157                                                        link.attr('id','more'); 
     158                                                        link.bind('click',function(){$('.outoffice').animate({height: $('.outoffice-inner').height(),width: '-=15px'},800); $('#more').unbind('click').hide();}); 
     159                                                        details.append(link); 
     160                                                } 
     161                                        } 
     162                                } 
    151163                                break; 
    152164                        case 'P': 
     
    157169                if(data_[id_contact].telephonenumber != null) 
    158170                    details.append('<p><label class="attribute">Telefone</label>' + '<span class="value">' + data_[id_contact].telephonenumber + '</span></p>'); 
     171                                if (data_[id_contact].vacationactive == "TRUE"){ 
     172                                        details.append('<p><img src="templates/default/images/mala-big.png"/><span class="title-outoffice">Filtro "Fora do Escritório" ativo.</span></p>');      
     173                                        if (data_[id_contact].vacationinfo){ 
     174                                                details.append('<div class="outoffice"><div class="outoffice-inner"><span>'+ data_[id_contact].vacationinfo +'</span></div></div>'); 
     175                                                if ( $('.outoffice-inner').height() > $('.outoffice').height() ){ 
     176                                                        var link = $('<a>').html('Ver mais'); 
     177                                                        link.attr('id','more'); 
     178                                                        link.bind('click',function(){$('.outoffice').animate({height: $('.outoffice-inner').height(),width: '-=15px'},800); $('#more').unbind('click').hide();}); 
     179                                                        details.append(link); 
     180                                                } 
     181                                        } 
     182                                }        
    159183                                break; 
    160184                        default: 
    161                                 if(data_['extra_ldap_fields'] != undefined){  
    162                                         if(data_['extra_ldap_fields'].length != 0)  
    163                                                 var extra_fields = (data_['extra_ldap_fields']).split("#");     
     185                                if(data_['extra_ldap_fields'] != undefined){ 
     186                                        if(data_['extra_ldap_fields'].length != 0) 
     187                                                var extra_fields = (data_['extra_ldap_fields']).split("#");    
    164188                                        else 
    165189                                                var extra_fields = [];    
     
    190214                                        } 
    191215                                } 
     216                                if (data_[id_contact].vacationactive == "TRUE"){ 
     217                                        details.append('<p><img src="templates/default/images/mala-big.png"/><span class="title-outoffice">Filtro "Fora do Escritório" ativo.</span></p>');      
     218                                        if (data_[id_contact].vacationinfo){ 
     219                                                details.append('<div class="outoffice"><div class="outoffice-inner"><span>'+ data_[id_contact].vacationinfo +'</span></div></div>'); 
     220                                                if ( $('.outoffice-inner').height() > $('.outoffice').height() ){ 
     221                                                        var link = $('<a>').html('Ver mais'); 
     222                                                        link.attr('id','more'); 
     223                                                        link.bind('click',function(){$('.outoffice').animate({height: $('.outoffice-inner').height(),width: '-=15px'},800); $('#more').unbind('click').hide();}); 
     224                                                        details.append(link); 
     225                                                } 
     226                                        }        
     227                                }                                
    192228                        break; 
    193229                }                                
     
    255291                        var signal = "+"; 
    256292                        var btnClass = "add"; 
    257                         var emailList = content.find(field_).val(); 
    258                         var emails_adicionados = emailList.split(","); 
     293                        emails_adicionados = ""; 
     294                        var emailList = content.find(field_).filter("input").parent().find("div input"); 
     295                        //      var array = content.find(".to-tr").find(".box"); 
     296                        $.each(emailList, function(index, value){ 
     297                                emails_adicionados += $(value).val() + ","; 
     298                        }); 
     299                        emails_adicionados = emails_adicionados.split(","); 
    259300                        for(aux=0; aux<emails_adicionados.length -1; aux++) { 
    260301                                if(emails_adicionados[aux].match(/<([^<]*)>[\s]*$/)){ 
     
    279320                        else if(contact_name.toLowerCase().indexOf(data.search_for.toLowerCase()) != -1 && data.search_for.indexOf(" ") == -1 && data.search_for.indexOf("@") == -1)                                                                     
    280321                                contact_name = contact_name.substring(0, contact_name.toLowerCase().indexOf(data.search_for.toLowerCase())) + "<u>" + contact_name.substr(contact_name.toLowerCase().indexOf(data.search_for.toLowerCase()), data.search_for.length) + "</u>" + contact_name.substring(contact_name.toLowerCase().indexOf(data.search_for.toLowerCase()) + data.search_for.length); 
    281                         var line = '<span class="menu-control"><button class="'+btnClass+'" id="actions_'+i+'" onClick="'+exist+'(document.getElementById(\'contact_' + i + '\').innerHTML, this, \'contact_' + i + '\')">'+ signal +'</button></span><div id="contact_' + i + '" onDblClick="'+exist+'(this.innerHTML, document.getElementById(\'actions_'+i+'\'), \'contact_' + i + '\')"><div class="name_contact"><strong class="name">' + contact_name + '</strong><em class="email">' + ((utf8_decoder(data[i-1].mail) != undefined)? (utf8_decoder(data[i-1].mail) == 'undefined' ? get_lang("No mail") : utf8_decoder(data[i-1].mail)) : get_lang("No mail")) + '</em></div></div>'; 
     322                        var vacationImg = ''; 
     323                        if (data[i-1].vacationactive == "TRUE") 
     324                                vacationImg = '<img src="templates/default/images/mala-small.png"/>';    
     325                        var line = '<span class="menu-control"><button class="'+btnClass+'" id="actions_'+i+'" onClick="'+exist+'(document.getElementById(\'contact_' + i + '\').innerHTML, this, \'contact_' + i + '\')">'+ signal +'</button></span><div id="contact_' + i + '" onDblClick="'+exist+'(this.innerHTML, document.getElementById(\'actions_'+i+'\'), \'contact_' + i + '\')"><div class="name_contact"><strong class="name">' + contact_name +' '+ vacationImg +'</strong><em class="email">' + ((utf8_decoder(data[i-1].mail) != undefined)? (utf8_decoder(data[i-1].mail) == 'undefined' ? get_lang("No mail") : utf8_decoder(data[i-1].mail)) : get_lang("No mail")) + '</em></div></div>'; 
    282326                        Op.innerHTML = line; 
    283327            $(Op).val(i - 1); 
     
    317361                                                } 
    318362                                        } 
    319                                 }                        
     363                                } 
     364                                if (data[first_contact].vacationactive == "TRUE"){ 
     365                                        details.append('<p><img src="templates/default/images/mala-big.png"/><span class="title-outoffice">Filtro "Fora do Escritório" ativo.</span></p>');      
     366                                        if ( data[first_contact].vacationinfo ){ 
     367                                                details.append('<div class="outoffice"><div class="outoffice-inner"><span>'+ data[first_contact].vacationinfo +'</span></div></div>'); 
     368                                                if ( $('.outoffice-inner').height() > $('.outoffice').height() ){                                                
     369                                                        var link = $('<a>').html('Ver mais'); 
     370                                                        link.attr('id','more'); 
     371                                                        link.bind('click',function(){$('.outoffice').animate({height: $('.outoffice-inner').height(),width: '-=15px'},800); $('#more').unbind('click').hide();}); 
     372                                                        details.append(link); 
     373                                                }        
     374                                        }        
     375                                }                                                        
    320376                                break; 
    321377                        case 'P': 
     
    326382                if(data[first_contact].telephonenumber != null) 
    327383                                        details.append('<p><label class="attribute">Telefone</label>' + '<span class="value">' + data[first_contact].telephonenumber  + '</span></p>'); 
     384                                if (data[first_contact].vacationactive == "TRUE"){ 
     385                                        details.append('<p><img src="templates/default/images/mala-big.png"/><span class="title-outoffice">Filtro "Fora do Escritório" ativo.</span></p>');      
     386                                        if ( data[first_contact].vacationinfo ){ 
     387                                                details.append('<div class="outoffice"><div class="outoffice-inner"><span>'+ data[first_contact].vacationinfo +'</span></div></div>'); 
     388                                                if ( $('.outoffice-inner').height() > $('.outoffice').height() ){ 
     389                                                        var link = $('<a>').html('Ver mais'); 
     390                                                        link.attr('id','more'); 
     391                                                        link.bind('click',function(){$('.outoffice').animate({height: $('.outoffice-inner').height(),width: '-=15px'},800); $('#more').unbind('click').hide();}); 
     392                                                        details.append(link); 
     393                                                }        
     394                                        } 
     395                                }                                
    328396                                break; 
    329397                        default:         
     
    358426                                        } 
    359427                                } 
     428                                if (data[first_contact].vacationactive == "TRUE"){ 
     429                                        details.append('<p><img src="templates/default/images/mala-big.png"/><span class="title-outoffice">Filtro "Fora do Escritório" ativo.</span></p>');      
     430                                        if ( data[first_contact].vacationinfo ){ 
     431                                                details.append('<div class="outoffice"><div class="outoffice-inner"><span>'+ data[first_contact].vacationinfo +'</span></div></div>'); 
     432                                                if ( $('.outoffice-inner').height() > $('.outoffice').height() ){                                                
     433                                                        var link = $('<a>').html('Ver mais'); 
     434                                                        link.attr('id','more'); 
     435                                                        link.bind('click',function(){$('.outoffice').animate({height: $('.outoffice-inner').height(),width: '-=15px'},800); $('#more').unbind('click').hide();}); 
     436                                                        details.append(link); 
     437                                                }        
     438                                        } 
     439                                }                                
    360440                                break; 
    361441                } 
    362                 var string_results = sliderValue + " " + get_lang("of") + " " + paginas + " (" + data.length + " " + get_lang("Results") + ")";  
    363                 $( "#amount-text" ).val( string_results ).attr('readonly', true); 
     442                var string_results = sliderValue + " " + get_lang("of") + " " + paginas + " (" + data.length + " " + get_lang("Results") + ")"; 
     443                $( "#amount-text" ).val( string_results ).attr('readonly', true); 
    364444                $("button").button(); 
    365445                //$("button.remove").button({icons:{primary:"ui-icon-close"}, text: false}); 
     
    389469                                                                        }else 
    390470                                                                                var extra_fields = [];    
    391                                                                         if(preferences.default_fields_quick_search != 0 && data[this.value] ) { 
    392                                                                                         details.append('<p><label class="attribute">' + utf8_decoder(data[this.value].cn[0]) + "</label>" + '<span class="value">' + (data[this.value].mail ? data[this.value].mail[0] : "")+ "</span></p>"); 
    393                                                                                 if(data[this.value].telephonenumber ) 
     471                                                                        if(preferences.default_fields_quick_search != 0 && data[this.value] ) {  
     472                                            details.append('<p><label class="attribute">' + utf8_decoder(data[this.value].cn[0]) + "</label>" + '<span class="value">' + (data[this.value].mail ? data[this.value].mail[0] : "")+ "</span></p>"); 
     473                                                                                if(data[this.value].telephonenumber ) 
    394474                                                                                        details.append('<p><label class="attribute">Telefone</label>' + '<span class="value">' + (data[this.value].telephonenumber ? data[this.value].telephonenumber[0] : "")+ "</span></p>"); 
    395475                                                                        } 
     
    405485                                                                                } 
    406486                                                                        } 
     487                                                                        if (data[this.value].vacationactive == "TRUE"){ 
     488                                                                                details.append('<p><img src="templates/default/images/mala-big.png"/><span class="title-outoffice">Filtro "Fora do Escritório" ativo.</span></p>');      
     489                                                                                if ( data[this.value].vacationinfo ){ 
     490                                                                                        details.append('<div class="outoffice"><div class="outoffice-inner"><span>'+ data[this.value].vacationinfo +'</span></div></div>'); 
     491                                                                                        if ( $('.outoffice-inner').height() > $('.outoffice').height() ){                                                                                        
     492                                                                                                var link = $('<a>').html('Ver mais'); 
     493                                                                                                link.attr('id','more'); 
     494                                                                                                link.bind('click',function(){$('.outoffice').animate({height: $('.outoffice-inner').height(),width: '-=15px'},800); $('#more').unbind('click').hide();}); 
     495                                                                                                details.append(link); 
     496                                                                                        } 
     497                                                                                } 
     498                                                                        }                                                                        
    407499                                                                        break; 
    408500                                                                case 'P': 
     
    413505                                                                        if(data[this.value].telephonenumber != null) 
    414506                                                                                details.append('<p><label class="attribute">Telefone</label>' + '<span class="value">' + data[this.value].telephonenumber + "</span></p>"); 
     507                                                                        if (data[this.value].vacationactive == "TRUE"){ 
     508                                                                                details.append('<p><img src="templates/default/images/mala-big.png"/><span class="title-outoffice">Filtro "Fora do Escritório" ativo.</span></p>');      
     509                                                                                if ( data[this.value].vacationinfo ){ 
     510                                                                                        details.append('<div class="outoffice"><div class="outoffice-inner"><span>'+ data[this.value].vacationinfo +'</span></div></div>'); 
     511                                                                                        if ( $('.outoffice-inner').height() > $('.outoffice').height() ){ 
     512                                                                                                var link = $('<a>').html('Ver mais'); 
     513                                                                                                link.attr('id','more'); 
     514                                                                                                link.bind('click',function(){$('.outoffice').animate({height: $('.outoffice-inner').height(),width: '-=15px'},800); $('#more').unbind('click').hide();}); 
     515                                                                                                details.append(link); 
     516                                                                                        }        
     517                                                                                } 
     518                                                                        }                                                                        
    415519                                                                        break; 
    416520                                                                default: 
    417                                                                         if(this.value == undefined)  
    418                                                                                 break;  
    419  
     521                                                                        if(this.value == undefined) 
     522                                                                                break; 
     523                                                                                 
    420524                                                                        if(data['extra_ldap_fields'].length != 0) 
    421525                                                                                var extra_fields = (data['extra_ldap_fields']).split("#");    
     
    447551                                                                                } 
    448552                                                                        } 
     553                                                                        if (data[this.value].vacationactive == "TRUE"){ 
     554                                                                                details.append('<p><img src="templates/default/images/mala-big.png"/><span class="title-outoffice">Filtro "Fora do Escritório" ativo.</span></p>');      
     555                                                                                if ( data[this.value].vacationinfo ){ 
     556                                                                                        details.append('<div class="outoffice"><div class="outoffice-inner"><span>'+ data[this.value].vacationinfo +'</span></div></div>') 
     557                                                                                        if ( $('.outoffice-inner').height() > $('.outoffice').height() ){ 
     558                                                                                                var link = $('<a>').html('Ver mais'); 
     559                                                                                                link.attr('id','more'); 
     560                                                                                                link.bind('click',function(){$('.outoffice').animate({height: $('.outoffice-inner').height(),width: '-=15px'},800); $('#more').unbind('click').hide();}); 
     561                                                                                                details.append(link); 
     562                                                                                        } 
     563                                                                                }        
     564                                                                        }                                                                        
    449565                                                                        break; 
    450566                                                        } 
     
    587703                var nome = $(contact).clone().find('.name').text(); 
    588704                var email = $(contact).clone().find('.email').text(); 
    589                  
    590705                if(email == get_lang("No mail")){ 
    591706                        alert(get_lang("It is not possible to add this contact as a recipient because it does not have email")); 
     
    594709                        return; 
    595710                } 
    596                  
    597711                verifyEmails(email, divs); 
    598                  
    599                 final_contact = "\""+nome +"\" <"+email+">, "; 
    600                  
    601                 var emailList      = content.find(field_).val(); 
    602                 //remove os caracteres da busca 
    603                 emailList = emailList.substr(0,emailList.lastIndexOf(',')+1);  
    604                  
    605         if (emailList[0] != '"' && emailList.indexOf(",") < 0) 
    606                         emailList = emailList.substr(end_); 
    607         if(emailList.lastIndexOf(",") > 0){ 
    608                 if(emailList.substr(emailList.length-1, emailList.length) == "," || emailList.substr(emailList.length-2, 1) == ","){ 
    609                         emailList = emailList.substr(0, emailList.lastIndexOf(",") + 1); 
    610                 } else { 
    611                         emailList = emailList.substr(0, emailList.lastIndexOf("") + 1);          
    612                         final_contact = ","+final_contact; 
     712                final_contact = "\""+nome +"\" <"+email+">"; 
     713 
     714                final_contact = final_contact.replace(/\/n/, "");  
     715                var index = parseInt(divs.split("_")[1])-1; 
     716                if(data_[index].type_contact == "G"){ 
     717                        var ldap_id = preferences.expressoMail_ldap_identifier_recipient; 
     718                        if(ldap_id){ 
     719                                draw_email_box( 
     720                                        (data_[index][ldap_id.toLowerCase()] ? data_[index][ldap_id.toLowerCase()][0] : final_contact) 
     721                                        , content.find(field_).filter("input") 
     722                                ); 
     723                        }else{ 
     724                                draw_email_box(final_contact, content.find(field_).filter("input")); 
     725                        } 
     726                }else{ 
     727                        draw_email_box((data_[index].id_contact ? data_[index].id_contact : data_[index].id), content.find(field_).filter("input"), (data_[index].id_contact ? true : "G")); 
    613728                } 
    614         } 
    615  
    616                 final_contact = final_contact.replace(/\/n/, ""); 
    617                 new_emailList = emailList + final_contact;     
    618         content.find(field_).val(new_emailList); 
    619                  
    620                 content.find(field_).trigger("update"); 
    621                  
    622729                content.find(field_).filter("input").val(""); 
    623730                button.onclick = function(){ 
     
    625732                }; 
    626733                var div = document.getElementById(divs); 
    627                  
    628734                div.ondblclick = function(){ 
    629735                        remove_contact_field(div.innerHTML, button, divs); 
    630736                }; 
    631                  
    632737                button.innerHTML = '<span class="ui-button-text" style="">x</span>'; 
    633738    } 
     
    639744        function remove_contact_field(contact, button, divs) { 
    640745                var email = $(contact).clone().find('.email').text(); 
    641                 var exist = false; 
    642                  
    643                 var emailList = content.find(field_).val(); 
    644                 var emails_adicionados = emailList.split(","); 
    645                  
    646                 verifyEmails(email, divs); 
    647                  
    648                 for(i=0; i<emails_adicionados.length -1; i++) { 
    649  
    650                         if(emails_adicionados[i].match(/<([^<]*)>[\s]*$/)){ 
    651                                 if(emails_adicionados[i].match(/<([^<]*)>[\s]*$/)[1].toLowerCase() == email.toLowerCase()) { 
    652                                         emails_adicionados[i] = "%"; 
    653                                         exist = true; 
    654                                 } 
    655                         }else{ 
    656                                 if(emails_adicionados[i].toLowerCase() == email.toLowerCase()) { 
    657                                         emails_adicionados[i] = "%"; 
    658                                         exist = true; 
    659                                 } 
    660                         } 
    661                 } 
    662                  
    663                 if (exist == false)  
    664                         return false; 
    665                 var novos_contatos = emails_adicionados.join(",");   
    666                 novos_contatos = novos_contatos.replace(/%,/g, ""); 
    667                 content.find(field_).val(novos_contatos); 
    668                  
     746                var array = content.find(field_).parent().find("div input"); 
     747                $.each(array, function(index, value){ 
     748                        var validated_email = $(value).val(); 
     749                        if(validated_email.match(/<([^<]*)>[\s]*$/)){ 
     750                                if(validated_email.match(/<([^<]*)>[\s]*$/)[1].toLowerCase() == email.toLowerCase()) { 
     751                                        $(value).parent().remove(); 
     752                                } 
     753                        } 
     754                }); 
     755         
    669756                button.onclick = function(){ 
    670757                        add_contact_field(document.getElementById(divs).innerHTML, button, divs); 
    671758                }; 
    672                  
    673759                var div = document.getElementById(divs); 
    674                  
    675760                div.ondblclick = function(){ 
    676761                        add_contact_field(div.innerHTML, button, divs); 
    677762                }; 
    678                  
    679                 content.find(field_).trigger("update"); 
    680763                button.innerHTML = '<span class="ui-button-text" style="">+</span>'; 
    681764        } 
  • branches/2.4/expressoMail1_2/js/QuickSearchUser.js

    r5477 r6754  
    5353        } 
    5454         
    55         emQuickSearchUser.prototype.create_new_message = function (cn, mail) 
     55        emQuickSearchUser.prototype.create_new_message = function (cn, mail, uid) 
    5656        { 
    5757                QuickSearchUser.closeWindow(); 
     58                var ldap_id = preferences.expressoMail_ldap_identifier_recipient; 
    5859                 
    59                 if (openTab.type[currentTab] != 4) 
    60                 { 
    61                         Element("msg_number").value = "\""+cn+"\" <"+mail+">"; 
     60                if (openTab.type[currentTab] != 4){ 
    6261                        new_message("new","null"); 
    6362                } 
    64                 else 
    65                 { 
    66                         var ToField = Element('to_'+currentTab); 
    67                         ToField.value = ToField.value +"\""+cn+"\" <"+mail+">,"; 
     63                 
     64                if(ldap_id){ 
     65                        draw_email_box(uid, $("#content_id_"+currentTab).find(".to").filter("input"));  
     66                }else{ 
     67                        draw_email_box("\""+cn+"\" <"+mail+">", $("#content_id_"+currentTab).find(".to").filter("input"));  
    6868                } 
    6969        } 
  • branches/2.4/expressoMail1_2/js/TreeShow.js

    r6607 r6754  
    8888                var aux = ttree.getFolder().split(cyrus_delimiter); 
    8989                var aux2; 
    90  
    91                 if(ttree.getFolder() == "")  
    92                 {  
    93                         ttree.setFolder("root");  
    94                 }  
    95  
     90                 
     91                if(ttree.getFolder() == "") 
     92                { 
     93                        ttree.setFolder("root"); 
     94                } 
     95                 
    9696                if( ttree.getFolder() != "" ) 
    9797                { 
  • branches/2.4/expressoMail1_2/js/abas.js

    r6691 r6754  
    270270        parent_bb.insertBefore(td, bb); 
    271271 
    272         if((typeof(id_value) == 'string') && id_value.match(/_r/)){  
     272        if((typeof(id_value) == 'string') && id_value.match(/_r/)){ 
    273273                $(td).draggable({ 
    274274                        start : function(){ 
     
    306306                                                        var border_id = ui.draggable.find("input[type=hidden]").attr("name"); 
    307307                                                        if(folder_to_move == "border_tr"){ 
    308                                                                 var id_msg = border_id.split("_")[0];  
     308                                                                var id_msg = border_id.split("_")[0]; 
    309309                                                                folder = $("#input_folder_"+border_id+"_r")[0] ? $("#input_folder_"+border_id+"_r").val() : (openTab.imapBox[border_id] ? openTab.imapBox[border_id]:get_current_folder()); 
    310310                                                                move_msgs2(folder, id_msg, border_id, folder_to, to_folder_title,true); 
     
    400400        } 
    401401        var caption = ""; 
    402         if (border != null){  
    403                     Element("font_"+border.id).style.width = (border_width - 35)+'px';  
    404                     Element("font_"+border.id).innerHTML = title;  
    405         }  
     402    if (border != null){ 
     403                Element("font_"+border.id).style.width = (border_width - 35)+'px'; 
     404                Element("font_"+border.id).innerHTML = title; 
     405        } 
    406406        return(title); 
    407407} 
     
    435435                            'width' : width, 
    436436                            'onClose':  function(clicked) { 
    437                                                                         if(clicked == 'Cancelar'){  
    438                                                                                 if (RichTextEditor.plain[id] != true)  
    439                                                                                         setTimeout("RichTextEditor.focus("+ID+")",100);                    
    440                                                                                 else    
    441                                                                                         $('#body_'+ID).focus();  
    442                                                                         } 
     437                                                                        if(clicked == 'Cancelar'){ 
     438                                                                                if (RichTextEditor.plain[id] != true)  
     439                                                                                        setTimeout("RichTextEditor.focus("+ID+")",100);                   
     440                                                                                else   
     441                                                                                        $('#body_'+ID).focus();  
     442                                                                        } 
    443443                                    if(clicked == 'Descartar alterações' || clicked == 'Descartar alterações e anexos' ) { 
    444444                                        if (openTab.imapBox[ID] && !openTab.toPreserve[ID]) 
     
    502502function delete_border(ID, msg_sent) 
    503503{ 
    504      
    505         if($("#border_id_"+ID).attr("title") == get_lang("New Message")){  
    506                 var to = $("#content_id_"+ID).find(".to").parent(".email-area").find("div").length || $("#content_id_"+ID).find(".email-area").find(".to").val() || $("#content_id_"+ID).find(".to").val();  
    507                 var cc = $("#content_id_"+ID).find(".cc").parent(".email-area").find("div").length || $("#content_id_"+ID).find(".email-area").find(".cc").val() || $("#content_id_"+ID).find(".cc").val();  
    508                 var cco = $("#content_id_"+ID).find(".cco").parent(".email-area").find("div").length || $("#content_id_"+ID).find(".email-area").find(".cco").val() || $("#content_id_"+ID).find(".cco").val();  
    509                 var subject = $("#content_id_"+ID).find(".subject").val();  
    510                 var auxAttachments = false;  
    511                 var attachments = $("#content_id_"+ID).find("ul.attachments-list").find("li").each(function(){  
    512                         ($(this).find("p").length > 0) ? auxAttachments = true : auxAttachments;  
    513                         if(auxAttachments)  
    514                                 return false;  
    515                 });  
    516                 var textArea = RichTextEditor.getData("body_"+ID);  
    517                   
    518                 if(!to && !cc && !cco && !auxAttachments && subject == "" && textArea == "")  
    519                         close_delete(ID, msg_sent);  
     504         
     505        if($("#border_id_"+ID).attr("title") == get_lang("New Message")){ 
     506                var to = $("#content_id_"+ID).find(".to").parent(".email-area").find("div").length || $("#content_id_"+ID).find(".email-area").find(".to").val(); 
     507                var cc = $("#content_id_"+ID).find(".cc").parent(".email-area").find("div").length || $("#content_id_"+ID).find(".email-area").find(".cc").val(); 
     508                var cco = $("#content_id_"+ID).find(".cco").parent(".email-area").find("div").length || $("#content_id_"+ID).find(".email-area").find(".cco").val(); 
     509                var subject = $("#content_id_"+ID).find(".subject").val(); 
     510                var auxAttachments = false; 
     511                var attachments = $("#content_id_"+ID).find("ul.attachments-list").find("li").each(function(){ 
     512                        ($(this).find("p").length > 0) ? auxAttachments = true : auxAttachments; 
     513                        if(auxAttachments) 
     514                                return false; 
     515                }); 
     516                var textArea = RichTextEditor.getData("body_"+ID); 
     517                 
     518                if(!to && !cc && !cco && !auxAttachments && subject == "" && textArea == "") 
     519                        close_delete(ID, msg_sent); 
    520520        } 
    521521        var bolExecuteClose = true; 
  • branches/2.4/expressoMail1_2/js/ccQuickAdd.js

    r6690 r6754  
    1 /* Build the Object */  
    2 var     ccQuickAddOne = {  
    3         send : function(data){  
    4                 var email = data[4];     
     1/* Build the Object */ 
     2var     ccQuickAddOne = { 
     3        send : function(data){ 
     4                var email = data[4]; 
    55                var handler = function (responseText) 
    66                { 
     
    99                                write_msg("Problema ao contactar servidor"); 
    1010                                return; 
    11                         }else if (data['status'] == 'alreadyExists'){  
     11                        }else if (data['status'] == 'alreadyExists'){ 
    1212                                alert(data['msg']); 
    1313                                return; 
     
    1616                        } 
    1717                         
    18                         write_msg(get_lang("Contact added successfully.")); 
     18                        var exist = 0; 
     19                        $.each(dynamicContacts, function(x, valuex){ 
     20                                if(valuex.mail == email){ 
     21                                        exist = valuex.id; 
     22                                        return false; 
     23                                } 
     24                        }); 
     25                        if(exist){ 
     26                                REST.delete("/dynamiccontact/"+exist); 
     27                                write_msg(get_lang("The contact was moved from recent contacts to personal contacts successful.")); 
     28                        }else{ 
     29                                write_msg(get_lang("Contact added successfully.")); 
     30                        }                        
    1931                }; 
    2032                 
    21                 var data2 = new Array();  
    22                 for( var i in data )  
    23                         data2[ data2.length ] = data[i];  
    24                        
    25                 var sdata       = 'add='+escape(connector.serialize(data2)); 
     33                var data2 = new Array(); 
     34                for( var i in data ) 
     35                        data2[ data2.length ] = data[i]; 
     36                 
     37                var sdata       = 'add='+escape(connector.serialize(data2)); 
    2638                var CC_url      = '../index.php?menuaction=contactcenter.ui_data.data_manager&method='; 
    2739                connector.newRequest('cQuickAdd.Send', CC_url+'quick_add', 'POST', handler, sdata); 
     40                updateDynamicPersonalContacts(); 
     41                cache = new Array(); 
    2842                return true; 
    2943        }, 
    30         showList: function(data){  
    31                 var     cc_data = ((typeof data) == 'object' ) ? data : data.split(',');  
    32                 quickContact = $("#quickAddContact").html( DataLayer.render( BASE_PATH + "modules/mail/templates/quickAddContact.ejs",{ nick : cc_data[0], fname : cc_data[1], lname : cc_data[2], email : cc_data[3] }));  
    33                 quickContact.dialog({  
    34                         resizable       : false,  
    35                         title           : get_lang("Quick Add"),  
    36                         modal           : true,  
    37                         buttons         : [  
    38                                 {  
    39                                         text: get_lang("Cancel"),  
    40                                         click: function()  
    41                                         {  
    42                                                 $(this).dialog("close");  
    43                                         }  
    44                                 },  
    45                                 {  
    46                                         text: get_lang("Save"),  
    47                                         click: function()  
    48                                         {  
    49                                                 data = {  
    50                                                         nick: $(this).find('#quickAddOne_nickName').val(),  
    51                                                         name:  $(this).find('#quickAddOne_firstName').val(),  
    52                                                         last: $(this).find('#quickAddOne_lastName').val(),  
    53                                                         telefone: "",  
    54                                                         email: $(this).find('#quickAddOne_email').val()  
    55                                                 };  
    56                                                 $(this).find('input').removeClass("required-fail");  
    57                                                 if(data.name ==""){  
    58                                                         $(this).find('#quickAddOne_firstName').addClass("required-fail");  
    59                                                         return false;  
    60                                                 }else if(data.email ==""){  
    61                                                         $(this).find('#quickAddOne_email').addClass("required-fail");  
    62                                                         return false;  
    63                                                 }else if(!validateEmail(data.email)){  
    64                                                         $(this).find('#quickAddOne_email').addClass("required-fail");  
    65                                                         new $.Zebra_Dialog(get_lang("QuickAddInvalidMail", data.email),{  
    66                                                                 'buttons':  false,  
    67                                                                 'modal': false,  
    68                                                                 'position': ['right - 20', 'top + 20'],  
    69                                                                 'auto_close': 3000  
    70                                                         });  
    71                                                         return false;  
    72                                                 }  
    73                                                 if(ccQuickAddOne.send(data))  
    74                                                         $(this).dialog("close");  
    75                                         }  
    76                                 }  
    77                         ]  
    78                 });  
    79                 quickContact.next().css("background-color", "#E0EEEE").find("button").addClass("button").addClass("small"); 
    80 } 
     44        showList: function(data){ 
     45                var     cc_data = ((typeof data) == 'object' ) ? data : data.split(','); 
     46                quickContact = $("#quickAddContact").html( DataLayer.render( BASE_PATH + "modules/mail/templates/quickAddContact.ejs",{ nick : cc_data[0], fname : cc_data[1], lname : cc_data[2], email : cc_data[3] })); 
     47                quickContact.dialog({ 
     48                        resizable       : false, 
     49                        title           : get_lang("Quick Add"), 
     50                        modal           : true, 
     51                        buttons         : [ 
     52                                { 
     53                                        text: get_lang("Cancel"), 
     54                                        click: function() 
     55                                        { 
     56                                                $(this).dialog("close"); 
     57                                        }  
     58                                }, 
     59                                { 
     60                                        text: get_lang("Save"), 
     61                                        click: function() 
     62                                        { 
     63                                                data = { 
     64                                                        nick: $(this).find('#quickAddOne_nickName').val(), 
     65                                                        name:  $(this).find('#quickAddOne_firstName').val(), 
     66                                                        last: $(this).find('#quickAddOne_lastName').val(), 
     67                                                        telefone: "", 
     68                                                        email: $(this).find('#quickAddOne_email').val() 
     69                                                }; 
     70                                                $(this).find('input').removeClass("required-fail"); 
     71                                                if(data.name ==""){ 
     72                                                        $(this).find('#quickAddOne_firstName').addClass("required-fail"); 
     73                                                        return false; 
     74                                                }else if(data.email ==""){ 
     75                                                        $(this).find('#quickAddOne_email').addClass("required-fail"); 
     76                                                        return false; 
     77                                                }else if(!validateEmail(data.email)){ 
     78                                                        $(this).find('#quickAddOne_email').addClass("required-fail"); 
     79                                                        new $.Zebra_Dialog(get_lang("QuickAddInvalidMail", data.email),{ 
     80                                                                'buttons':  false, 
     81                                                                'modal': false, 
     82                                                                'position': ['right - 20', 'top + 20'], 
     83                                                                'auto_close': 3000 
     84                                                        }); 
     85                                                        return false; 
     86                                                } 
     87                                                if(ccQuickAddOne.send(data)) 
     88                                                        $(this).dialog("close"); 
     89                                        } 
     90                                } 
     91                        ] 
     92                }); 
     93                quickContact.next().css("background-color", "#E0EEEE").find("button").addClass("button").addClass("small"); 
     94        } 
    8195}; 
  • branches/2.4/expressoMail1_2/js/common_functions.js

    r6727 r6754  
    775775} 
    776776 
    777 function search_emails(value){ 
     777function search_emails(value, data){ 
    778778        var resize = false; 
    779779        resize = resize_borders(); 
     
    815815        connector.loadScript("search"); 
    816816        if (typeof(EsearchE) == 'undefined' || typeof(ttree) == 'undefined'){ 
    817                 setTimeout("search_emails('"+value+"')",500); 
     817                setTimeout("search_emails('"+value+"', '"+data+"')",500); 
    818818                return false; 
    819819        } 
    820         EsearchE.showForms(value); 
     820        EsearchE.showForms(value, data); 
    821821        $("#em_message_search").val(""); 
    822822        } 
     
    11271127                        Element("check_box_message_"+main_list[i].id).checked = true; 
    11281128                        remove_className(Element(main_list[i].id), 'selected_msg'); 
    1129                         if(!$("#"+main_list[i].id).hasClass("selected_shortcut_msg")){  
    1130                             //add_className(Element(main_list[i].id), 'selected_msg selected_shortcut_msg current_selected');  
    1131                             add_className(Element(main_list[i].id), 'selected_msg selected_shortcut_msg');  
    1132                     } else {  
    1133                             $("#"+main_list[i].id).addClass("selected_msg");  
    1134                             $("#"+main_list[i].id).addClass("selected_shortcut_msg");  
    1135                             $("#"+main_list[i].id).addClass("current_selected");              
    1136                     }  
     1129                        if(!$("#"+main_list[i].id).hasClass("selected_shortcut_msg")){ 
     1130                                //add_className(Element(main_list[i].id), 'selected_msg selected_shortcut_msg current_selected'); 
     1131                                add_className(Element(main_list[i].id), 'selected_msg selected_shortcut_msg'); 
     1132                        } else { 
     1133                                $("#"+main_list[i].id).addClass("selected_msg"); 
     1134                                $("#"+main_list[i].id).addClass("selected_shortcut_msg"); 
     1135                                $("#"+main_list[i].id).addClass("current_selected");             
     1136                        } 
    11371137                } 
    11381138        } 
     
    11441144                        remove_className(Element(main_list[i].id), 'selected_msg selected_shortcut_msg'); 
    11451145                        $("#"+main_list[i].id).removeClass("selected_msg"); 
    1146                         $("#"+main_list[i].id).removeClass("current_selected");  
    1147         }  
    1148         }  
     1146                        $("#"+main_list[i].id).removeClass("current_selected"); 
     1147                } 
     1148        } 
     1149         
    11491150} 
    11501151 
  • branches/2.4/expressoMail1_2/js/doiMenuData.js

    r5866 r6754  
    195195        items: menuToolsItems 
    196196}); 
    197  
     197var reComplexEmail = /<([^<]*)>[\s]*$/; 
     198$.contextMenu({ 
     199        selector: ".box", 
     200        autoHide:true, 
     201        items: { 
     202                "add" : {name: get_lang("Quick Add"), icon : "quick-add",callback: function(key, opt){ var fname = $(opt.$trigger).find("input").val().split('"')[1];ccQuickAddOne.showList(','+fname+', ,'+$.trim($(opt.$trigger).find("input").val()).match(reComplexEmail)[1]); }}, 
     203                "remove" : {name:get_lang("Remove recipient"), icon:"delete-box",callback: function(key, opt){ $(opt.$trigger).remove(); }}, 
     204                "sep1": "---------", 
     205                "quick_search" : {name:get_lang("Quick search of messages"), icon: "quick-search-contact",callback: function(key, opt){ search_emails($.trim($(opt.$trigger).find("input").val()).match(reComplexEmail)[1]); }}, 
     206                "full_search" : {name:get_lang("Search messages of ..."), icon: "quick-search-contact",callback: function(key, opt){ search_emails("", $.trim($(opt.$trigger).find("input").val()).match(reComplexEmail)[1]);}}          
     207        } 
     208}); 
    198209 
    199210function updateLabelsColumn(messageInfo) { 
     
    294305} 
    295306 
    296  
    297  
    298  
    299  
    300  
    301  
     307function loadExtraLDAPBox(data, element){ 
     308        menuItensLabel = {}; 
     309        menuItensLabel["Name"] = {name: "<b>"+data[0].value+"</b>", disabled: true};             
     310        menuItensLabel["Email"] = {name: data[1].value, disabled: true};         
     311        if(data[2].value){ 
     312                menuItensLabel["TelefoneLabel"] = {name: "<b>"+get_lang("Telephone")+"</b>", disabled: true}; 
     313                menuItensLabel["TelefoneValue"] = {name: data[2].value, disabled: true}; 
     314        } 
     315        if(data[3]){ 
     316                if(data[3].value == "TRUE"){ 
     317                        menuItensLabel["outOffice"] = {name: "<b>"+get_lang("Out of office")+"</b>", disabled: true}; 
     318                        menuItensLabel["outOfficeValue"] = {name: data[4].value.substring(0, 20), disabled: true}; 
     319                } 
     320        } 
     321        $.contextMenu({ 
     322                selector: "#content_id_"+currentTab+" "+element+" .box-info", 
     323                trigger: 'hover', 
     324                delay:100, 
     325                autoHide:true, 
     326                items: menuItensLabel 
     327        });      
     328} 
     329 
     330function loadGroupBox(data, element){ 
     331        menuItensLabel = {}; 
     332        menuItensLabel["ContactGroupLabelAll"] = {name:"<b>"+get_lang("Group contacts")+"</b>", disabled: true}; 
     333        menuItensLabel["sep1"] = "---------"; 
     334        if(data.itens){ 
     335                var aux = 0; 
     336                for(var item in data.itens){ 
     337                        if(parseInt(item) <= 4){ 
     338                                menuItensLabel["ContactGroupLabel"+item] = {name: "<b>"+data.itens[item].data[0].value+"</b>", disabled: true}; 
     339                                menuItensLabel["ContactGroupValue"+item] = {name: data.itens[item].data[2].value, disabled: true}; 
     340                        }else{ 
     341                                aux++; 
     342                                if(aux == 1) 
     343                                        menuItensLabel["MoreContactGroupValue"] = {name : get_lang("And more %1 contact", aux), disabled: true }; 
     344                                else 
     345                                        menuItensLabel["MoreContactGroupValue"] = {name : get_lang("And more %1 contact", aux)+"s", disabled: true }; 
     346                        } 
     347                } 
     348        } 
     349        $.contextMenu({ 
     350                selector: "#content_id_"+currentTab+" "+element+" .box-info", 
     351                trigger: 'hover', 
     352                delay:100, 
     353                autoHide:true, 
     354                items: menuItensLabel 
     355        });      
     356} 
     357 
     358 
     359 
     360 
     361 
  • branches/2.4/expressoMail1_2/js/draw_api.js

    r6732 r6754  
    88 * formatação, etc.)  
    99 */ 
     10  
     11focusIn = ""; 
     12canMakeBox = true; 
     13fastSearch = false; 
     14 
    1015onceOpenedHeadersMessages = {}; 
    11  
     16var cache = new Array(); 
    1217var openTab = { 
    1318        'type' : [], // 8 types of tabs, further info. see expressolivre.org/dev/wiki/mail/Documentacao 
     
    891896        var _mouse_out; 
    892897        var _cell; 
    893         var colGroupMain = document.getElementById("colgroup_main_"+numBox);  
    894         var colGroupHead = document.getElementById("colgroup_head_"+numBox); 
     898        var colGroupMain = document.getElementById("colgroup_main_"+numBox); 
     899        var colGroupHead = document.getElementById("colgroup_head_"+numBox); 
    895900        for (var r=0;r<trM.length;r++) { 
    896901                for (var c=0;c<trM[r].cells.length;c++) { 
     
    899904                        if (is_mozilla && !is_webkit) { 
    900905                                if (!emptyBody) { 
    901                                         colGroupMain.childNodes[c].setAttribute("width",colSizes[tbl][c]);  
     906                                        colGroupMain.childNodes[c].setAttribute("width",colSizes[tbl][c]); 
    902907                                } 
    903                                 colGroupHead.childNodes[c].setAttribute("width",colSizes[tbl][c]);  
     908                                colGroupHead.childNodes[c].setAttribute("width",colSizes[tbl][c]); 
    904909                                if (tbH.rows[0].cells[c].className=="th_resizable") { 
    905910                                        // lots of stupid fixes for FF to redraw cell content 
     
    929934                document.getElementById("colgroup_main_"+numBox).childNodes[c].setAttribute("width",colSizes[tbl][c]); 
    930935 
    931 }  
    932         if (is_webkit || is_ie){  
    933                         var arrHeader = $('.message_header td');  
    934                         var arrBody = $('#tbody_box :first td');  
    935                         for(i=0;i<arrHeader.length;i++){  
     936        } 
     937        if (is_webkit || is_ie){ 
     938                        var arrHeader = $('.message_header td'); 
     939                        var arrBody = $('#tbody_box :first td'); 
     940                        for(i=0;i<arrHeader.length;i++){ 
    936941                                        if(arrBody[i] !== undefined && arrBody[i].width !== undefined) 
    937                                         arrHeader[i].width = arrBody[i].width;  
    938                         }  
     942                                        arrHeader[i].width = arrBody[i].width; 
     943                        }                        
    939944        } 
    940945} 
     
    15061511                if ((headers_msgs.Forwarded == 'F')  || (headers_msgs.Draft == 'X' && headers_msgs.Answered == 'A')){ 
    15071512                        td_element21.onclick=function(){search_emails(headers_msgs.subject.replace(/^(re: ?|fw: ?|enc: ?|res: ?|fwd: ?)*/gi,''),true);}; 
    1508                         td_element21.innerHTML = "<img src ='templates/"+template+"/images/forwarded.gif' title='"+get_lang('Forwarded')+"'>"; 
     1513                        td_element21.innerHTML = "<img src ='templates/"+template+"/images/forwarded.png' title='"+get_lang('Forwarded')+"'>"; 
    15091514                        headers_msgs.Draft = '' 
    15101515                        headers_msgs.Answered = ''; 
     
    15121517                } 
    15131518                else if (headers_msgs.Draft == 'X') 
    1514                         td_element21.innerHTML = "<img src ='templates/"+template+"/images/draft.gif' title='"+get_lang('Draft')+"'>"; 
     1519                        td_element21.innerHTML = "<img src ='templates/"+template+"/images/draft.png' title='"+get_lang('Draft')+"'>"; 
    15151520                else if (headers_msgs.Answered == 'A'){ 
    15161521                        td_element21.onclick=function(){search_emails(headers_msgs.subject.replace(/^(re: ?|fw: ?|enc: ?|res: ?|fwd: ?)*/gi,''),true);}; 
    1517                         td_element21.innerHTML = "<img src ='templates/"+template+"/images/answered.gif' title='"+get_lang('Answered')+"'>"; 
     1522                        td_element21.innerHTML = "<img src ='templates/"+template+"/images/answered.png' title='"+get_lang('Answered')+"'>"; 
    15181523                    }else 
    15191524                        td_element21.innerHTML = "&nbsp;&nbsp;&nbsp;"; 
     
    17641769                                        .html('<img src="../prototype/modules/mail/img/flagEditor.png">'); 
    17651770                                         
    1766                                         if(fail != 'success'){  
    1767                                             $('#td_message_followup_' + messageClickedId + ', ' +   
    1768                                             'tr[role="'+messageClickedId+'_'+msg_folder+'"] #td_message_followup_search_' + messageClickedId).find(".flag-edited").css("background", "#CCCCCC");  
    1769                                             MsgsCallbackFollowupflag[fail]();  
    1770                                         }else{  
    1771                                             $('#td_message_followup_' + messageClickedId + ', ' +   
    1772                                             'tr[role="'+messageClickedId+'_'+msg_folder+'"] #td_message_followup_search_' + messageClickedId).attr('title', get_lang('Follow up')).find(".flag-edited").css("background", headers_msgs.followupflagged.backgroundColor);  
    1773                                             updateCacheFollowupflag(messageClickedId, msg_folder, true);  
    1774                                         }  
     1771                                         
     1772                                        if(fail != 'success'){ 
     1773                                            $('#td_message_followup_' + messageClickedId + ', ' +  
     1774                                            'tr[role="'+messageClickedId+'_'+msg_folder+'"] #td_message_followup_search_' + messageClickedId).find(".flag-edited").css("background", "#CCCCCC"); 
     1775                                            MsgsCallbackFollowupflag[fail](); 
     1776                                        }else{ 
     1777                                            $('#td_message_followup_' + messageClickedId + ', ' +  
     1778                                            'tr[role="'+messageClickedId+'_'+msg_folder+'"] #td_message_followup_search_' + messageClickedId).attr('title', get_lang('Follow up')).find(".flag-edited").css("background", headers_msgs.followupflagged.backgroundColor); 
     1779                                            updateCacheFollowupflag(messageClickedId, msg_folder, true); 
     1780                                        }                                
    17751781                                }); 
    17761782                                 
     
    19821988var msg_selected; 
    19831989function draw_message(info_msg, ID){ 
     1990        // remove a flag $FilteredMessage da mensagem ao ser lida 
     1991        if(info_msg.Unseen == "U"){ 
     1992                $.each(fromRules, function(index, value) { 
     1993                        if(value == info_msg.msg_folder){ 
     1994                                cExecute ("$this.imap_functions.removeFlagMessagesFilter&folder="+info_msg.msg_folder+"&msg_number="+info_msg.msg_number, function(){});  
     1995                                return false; 
     1996                        } 
     1997                }); 
     1998        } 
    19841999        var content = document.getElementById('content_id_' + ID); 
    19852000 
     
    30333048                                                var newAttendeeName = ""; 
    30343049 
    3035                                                 var name = decoded.match(/"([^"]*)"/) ? decoded.match(/"([^"]*)"/)[1] : '';  
    3036                                                 var mail = decoded.match(/<([^<]*)>[\s]*$/) ? decoded.match(/<([^<]*)>[\s]*$/)[1].toLowerCase() : decoded;  
    3037   
    3038   
    3039                                                 var user = DataLayer.get('user', ["=", "mail", mail], true); 
     3050                                                var name = decoded.match(/"([^"]*)"/) ? decoded.match(/"([^"]*)"/)[1] : ''; 
     3051                                                var mail = decoded.match(/<([^<]*)>[\s]*$/) ? decoded.match(/<([^<]*)>[\s]*$/)[1].toLowerCase() : decoded;  
     3052 
     3053 
     3054                                                var user = DataLayer.get('user', ["=", "mail", mail], true); 
    30403055                                                 
    30413056                                                if( $.type(user) == "array") 
    3042                                                     user = user[0];  
    3043                   
    3044                                                 if(user != ''){  
    3045                                                     //user = {name : name , mail : mail};  
    3046                                                     if(User.me.mail == user.mail)  
    3047                                                             return(null);  
    3048                                                     user.isExternal = (!!user && !(!!user.isExternal)) ? 0 : 1;  
    3049  
    3050                                                     return  DataLayer.merge({  
    3051                                                             name: user.name,  
    3052                                                             mail: user.mail,  
    3053                                                             acl:  'r',  
    3054                                                             delegatedFrom: '0',  
    3055                                                             status: '4',  
    3056                                                             isExternal: user.isExternal  
    3057                                                     }, !!user.id ? {id : DataLayer.put('participant', {user: user.id, isExternal: user.isExternal})} : {id: DataLayer.put('participant', {user: user})});  
    3058                                                 }else if(mail.match(/[\w-]+(\.[\w-]+)*@(([A-Za-z\d][A-Za-z\d-]{0,61}[A-Za-z\d]\.)+[A-Za-z]{2,6}|\[\d{1,3}(\.\d{1,3}){3}\])/)){  
    3059                                                       
    3060                                                     var userId = DataLayer.put('user', {  
    3061                                                         name: name,  
    3062                                                         mail: mail,  
    3063                                                         isExternal: '1'  
    3064                                                     });  
    3065                                                     var newAttendeeId = DataLayer.put('participant', {  
    3066                                                         user: userId,  
    3067                                                         isExternal: '1'  
    3068                                                     });  
    3069  
    3070                                                     return  {  
    3071                                                             id: newAttendeeId,  
    3072                                                             name: name,  
    3073                                                             mail: mail,  
    3074                                                             acl:  'r',  
    3075                                                             delegatedFrom: '0',  
    3076                                                             status: '4',  
    3077                                                             isExternal: '1'  
    3078                                                     };  
    3079                                                       
    3080                                                 }else  
    3081                                                     return (null); 
     3057                                                    user = user[0]; 
     3058 
     3059                                                if(user != ''){ 
     3060                                                    //user = {name : name , mail : mail}; 
     3061                                                    if(User.me.mail == user.mail) 
     3062                                                            return(null); 
     3063                                                    user.isExternal = (!!user && !(!!user.isExternal)) ? 0 : 1; 
     3064 
     3065                                                    return  DataLayer.merge({ 
     3066                                                            name: user.name, 
     3067                                                            mail: user.mail, 
     3068                                                            acl:  'r', 
     3069                                                            delegatedFrom: '0', 
     3070                                                            status: '4', 
     3071                                                            isExternal: user.isExternal 
     3072                                                    }, !!user.id ? {id : DataLayer.put('participant', {user: user.id, isExternal: user.isExternal})} : {id: DataLayer.put('participant', {user: user})});  
     3073                                                }else if(mail.match(/[\w-]+(\.[\w-]+)*@(([A-Za-z\d][A-Za-z\d-]{0,61}[A-Za-z\d]\.)+[A-Za-z]{2,6}|\[\d{1,3}(\.\d{1,3}){3}\])/)){ 
     3074                                                     
     3075                                                    var userId = DataLayer.put('user', { 
     3076                                                        name: name,  
     3077                                                        mail: mail,  
     3078                                                        isExternal: '1' 
     3079                                                    }); 
     3080                                                    var newAttendeeId = DataLayer.put('participant', { 
     3081                                                        user: userId,  
     3082                                                        isExternal: '1' 
     3083                                                    }); 
     3084 
     3085                                                    return  { 
     3086                                                            id: newAttendeeId, 
     3087                                                            name: name, 
     3088                                                            mail: mail, 
     3089                                                            acl:  'r', 
     3090                                                            delegatedFrom: '0', 
     3091                                                            status: '4', 
     3092                                                            isExternal: '1' 
     3093                                                    }; 
     3094                                                     
     3095                                                }else 
     3096                                                    return (null); 
    30823097                                        })       
    30833098                                         
     
    35083523        resizeWindow();  
    35093524         
    3510         $("#div_message_scroll_"+ID).scrollTo( 0, 400, {queue:true} );  
     3525        $("#div_message_scroll_"+ID).scrollTo( 0, 400, {queue:true} ); 
    35113526} 
    35123527  
     
    35593574} 
    35603575 
    3561 function input_binds(input, ID){ 
    3562         var mySource = new Array(); 
    3563         var myArray = contacts.split(","); 
    3564         for(var i in myArray){ 
    3565                 var teste = myArray[i].split(";"); 
    3566                 if(teste.length > 1) 
    3567                         mySource.push({name : teste[0], email: teste[1], value : (teste[0] +" - "+teste[1])}); 
    3568                 else 
    3569                         mySource.push({name : "", email: teste[0], value :teste[0]}); 
    3570         } 
    3571         input.bind( "keydown", function( event ) { 
    3572                 if ( event.keyCode === $.ui.keyCode.TAB && $( this ).data( "autocomplete" ).menu.active ) { 
    3573                         event.preventDefault(); 
    3574                 } 
    3575                 if((event.keyCode) == 120){ 
     3576//DESENHO DAS CAIXA DE EMAIL 
     3577function draw_email_box(input_data, location, personal, shared){ 
     3578        if($.trim(input_data) != ""){ 
     3579                var box_data = valid_emails(input_data); 
     3580                DataLayer.render("../prototype/modules/mail/templates/emailBox.ejs", box_data, function(html){ 
     3581                        var newBox = location.before(html).prev(); 
     3582                        box_actions(newBox); 
     3583                        if((preferences.expressoMail_ldap_identifier_recipient || personal)&& $(newBox).hasClass("invalid-email-box")){ 
     3584                                //$(newBox).find(".loading").css("background-image", "../prototype/modules/mail/img/ajax-loader.gif"); 
     3585                                show_detais(newBox, input_data, personal, shared); 
     3586                        }else{ 
     3587                                $(newBox).find(".box-loading").remove(); 
     3588                        } 
     3589                }); 
     3590        } 
     3591} 
     3592 
     3593function valid_emails(email){ 
     3594        var ContactBox = {name:"", email:"", valid : false}; 
     3595        var reSimpleEmail = /^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[_a-z0-9-]+(\.[_a-z0-9-]+)+$/; 
     3596        var reComplexEmail = /<([^<]*)>[\s]*$/; 
     3597        var validation = email.split('"'); 
     3598         
     3599        //FUNÇÃO QUE VALIDA OS DADOS QUANDO O EMAIL É DIGITADO COM ("NOME SOBRENOME" <Email@dominio.com>) 
     3600        var complexValidation = function(complexMail){ 
     3601                var Objct = {}; 
     3602                if($.trim(complexMail[1]).match(reComplexEmail)){ 
     3603                        if($.trim(complexMail[1]).match(reComplexEmail).length){ 
     3604                                Objct['email'] = $.trim(complexMail[1]).match(reComplexEmail)[1]; 
     3605                        } 
     3606                }else{ 
     3607                        Objct['email'] = $.trim(complexMail[1]); 
     3608                } 
     3609                Objct['name'] = complexMail[0]; 
     3610                Objct['valid'] = reSimpleEmail.test(Objct['email'].toLowerCase()); 
     3611                return Objct; 
     3612        } 
     3613        switch (validation.length) { 
     3614                //PEGA TODO O CONTEUDO E SETA COMO SE FOSSE O EMAIL 
     3615                case 1: 
     3616                        validation.unshift(""); 
     3617                        ContactBox = complexValidation(validation); 
     3618                        break; 
     3619                //CORRIGI ERRO DE DIGITAÇÃO COMO ( huahua"<huhau@hauhau.com>) ou (hahahaha"huahua@email.com) ou ainda (hahahaha"huahua@ema  il.com) 
     3620                case 2:  
     3621                        ContactBox = complexValidation(validation); 
     3622                        break; 
     3623                //RECEBE O EMAIL CORRETAMENTE SÓ VALIDA POSSIVEIS ERROS COMO O DE CIMA E OS CORRIGI CASO ACONTEÇAM 
     3624                case 3: 
     3625                        //RETIRA O PRIMEIRO INDICE QUE FICOU "INUTIL" 
     3626                        validation.shift(); 
     3627                        ContactBox = complexValidation(validation); 
     3628                        break; 
     3629                //SE EXISTIREM MAIS DO QUE 2 (") 
     3630                default: 
     3631                        if($.trim(validation[validation.length-1]).match(reComplexEmail)){ 
     3632                                if($.trim(validation[validation.length-1]).match(reComplexEmail).length){ 
     3633                                        ContactBox.mail = $.trim(validation[validation.length-1]).match(reComplexEmail)[1]; 
     3634                                } 
     3635                        }else{ 
     3636                                ContactBox.mail = $.trim(complexMail[1]); 
     3637                        } 
     3638                        ContactBox.valid = reSimpleEmail.test(ContactBox.mail.toLowerCase());    
     3639        } 
     3640        return ContactBox; 
     3641} 
     3642 
     3643//EVENTO DOS INPUTS PARA - CC - CCO 
     3644function input_keydowns(input, ID){ 
     3645        var f9 = false; 
     3646        input.keydown(function(e){ 
     3647                f9 = false; 
     3648                focusIn = input; 
     3649                var focusing = input.parent().find(".email-text"); 
     3650                //SE OS CONTATOS DINAMICOS ESTAO ATIVOS 
     3651                if(parseInt(preferences.use_dynamic_contacts) && !input.hasClass("box-input")){ 
     3652                        //SELECIONA O CONTATO E EVITA OUTROS COMANDOS 
     3653                        if ( e.keyCode === $.ui.keyCode.TAB && $( this ).data( "catcomplete" ).menu.active ) { 
     3654                                e.preventDefault(); 
     3655                                return false; 
     3656                        }                
     3657                         
     3658                        //FECHA OS CONTATOS DINÂMICOS 
     3659                        if( (e.keyCode == 27) && $( this ).data( "catcomplete" ).menu.active ){ 
     3660                                   e.stopPropagation(); 
     3661                                   e.preventDefault(); 
     3662                        } 
     3663                         
     3664                        //SELECIONA O CONTATO E EVITA OUTROS COMANDOS 
     3665                        if(e.keyCode == $.ui.keyCode.ENTER && $( this ).data( "catcomplete" ).menu.active){ 
     3666                                e.preventDefault(); 
     3667                                return false; 
     3668                        } 
     3669                         
     3670                        if(e.keyCode == $.ui.keyCode.DELETE && $( this ).data( "catcomplete" ).menu.active){ 
     3671                                if($($( this ).data( "catcomplete" ).menu.element).find(".ui-state-hover").parents("li:first").hasClass("dynamic-recent")) 
     3672                                        $($( this ).data( "catcomplete" ).menu.element).find(".ui-state-hover").next().trigger("click"); 
     3673                                return false; 
     3674                        } 
     3675                } 
     3676                //BUSCA COM A TECLA F9 
     3677                if((e.keyCode) == 120){ 
     3678                        f9 = true; 
    35763679                        emQuickSearch($(this).val(), "."+$(this).parents("tr:first").attr('class').split("-")[0], ID, undefined, true); 
    3577                 }else if( (event.keyCode == 27) && $( this ).data( "autocomplete" ).menu.active ){ 
    3578                            event.stopPropagation(); 
    3579                event.preventDefault(); 
    3580                 } 
    3581         }).autocomplete({ 
    3582                 minLength: 0,                    
    3583                 source: function( request, response ) { 
    3584                         response( $.ui.autocomplete.filter( 
    3585                                 mySource, extractLast( request.term ) ) ); 
     3680                        e.preventDefault(); 
     3681                        return false; 
     3682                } 
     3683 
     3684                //AO DIGITAR ENTER, ";", "," "  " 
     3685                if(e.keyCode == 13 || e.keyCode == 9 || (e.keyCode == 188 && !e.shiftKey) || (e.keyCode == 191 && !e.shiftKey) ){ 
     3686                        if(e.keyCode == 13){ 
     3687                                e.preventDefault(); 
     3688                        } 
     3689                        if(input.val() != ""){ 
     3690                                if(e.keyCode != 9) 
     3691                                        e.preventDefault(); 
     3692                                draw_email_box(input.val(), input); 
     3693                                if(input.hasClass("box-input")){ 
     3694                                        input.remove(); 
     3695                                        focusing.focus(); 
     3696                                        return; 
     3697                                } 
     3698                        } 
     3699                        if(input.length) 
     3700                                input.val(""); 
     3701                } 
     3702                if((e.keyCode == 8 || e.keyCode == 37) && input.val() == "" && input.prev().hasClass("box")){ 
     3703                        e.preventDefault(); 
     3704                        input.prev().focus(); 
     3705                        return; 
     3706                } 
     3707                //AO DIGITAR " " 
     3708                if(e.keyCode == 32){ 
     3709                        if(!input.val().length){ 
     3710                                e.preventDefault(); 
     3711                                return; 
     3712                        }else{ 
     3713                                var texto = input.val(); 
     3714                                texto = texto.substring(0, getPosition(input[0])); 
     3715                                if(texto.split('"').length-1 == 0){ 
     3716                                        if(input.val().split('"').length-1 == 0){ 
     3717                                                e.preventDefault(); 
     3718                                                e.stopPropagation(); 
     3719                                                draw_email_box(input.val(), input); 
     3720                                                input.val(""); 
     3721                                                if(input.hasClass("box-input")){ 
     3722                                                        input.remove(); 
     3723                                                        focusing.focus(); 
     3724                                                        return; 
     3725                                                } 
     3726                                                return; 
     3727                                        } 
     3728                                } 
     3729                        } 
     3730                } 
     3731                //AO DIGITAR ">" 
     3732                if(e.keyCode == 190 && e.shiftKey && input.val().length == getPosition(input[0])){ 
     3733                        input.val(input.val()+">"); 
     3734                        draw_email_box(input.val(), input); 
     3735                        e.preventDefault(); 
     3736                        input.val(""); 
     3737                        if(input.hasClass("box-input")){ 
     3738                                input.remove(); 
     3739                                focusing.focus(); 
     3740                                return; 
     3741                        } 
     3742                } 
     3743                setTimeout(function(){ 
     3744                        if(input.val()[input.val().length-1] == ";"){ 
     3745                                draw_email_box(input.val().substring(0, input.val().length-1), input); 
     3746                                input.val(""); 
     3747                        } 
     3748                }, 100); 
     3749                //INPUT AUTO RESIZE      
     3750                setTimeout(function(){ 
     3751                        input_search = $(input).val(); 
     3752                        var char = input.val().charAt(input.val().length-1); 
     3753                        var maiusculas = RegExp("[A-Z]"); 
     3754                        /*Se o ultimo caracter for ">" é porque o campo está sendo editado (a partir de duplo clique)*/ 
     3755                        var tamanho = 0; 
     3756                        if(char == ">"){ 
     3757                                /*Faz um calculo prévio do tamanho do campo de acordo com o tamanho de cada caracter da string*/ 
     3758                                for(i=0; i<input.val().length; i++){ 
     3759                                        /*Se o caracter for maiúsculo, o valor de pixel é maior*/ 
     3760                                        if(maiusculas.test(input.val().substr(i, 1)) == true){ 
     3761                                                tamanho += 9; 
     3762                                        } 
     3763                                        else{ 
     3764                                                tamanho += 7.1; 
     3765                                        } 
     3766                                } 
     3767                                input.css("width", tamanho); 
     3768                        } 
     3769                        /*Ao inserir novo contato, não existe a necessidade de calcular tamanho do campo*/ 
     3770                        else{ 
     3771                                input.css("width", 15+(input.val().length * 9)); 
     3772                        } 
     3773                        input.parent().scrollTo(":last");        
     3774                }, 100); 
     3775        }) 
     3776        //AO SAIR DO FOCO MONTAGEM DA CAIXA DE EMAIL 
     3777        .focusout(function(e){ 
     3778                var these = $(this); 
     3779                 
     3780                // Função para monstar a caixinha de e-mail. 
     3781                function makeBoxMail(){ 
     3782                        if(canMakeBox && !fastSearch){ 
     3783                                if(!(   f9      ||      click   ||      $(this).parents("tr:first").find("button").hasClass("ui-state-active")  )){ 
     3784                                        if($(input).val() != "") 
     3785                                                draw_email_box(input.val(), input); 
     3786                                        if(input.hasClass("box-input")) 
     3787                                                input.remove(); 
     3788                                        $(input).val(""); 
     3789                                        input_search = ""; 
     3790                                } 
     3791                                f9 = false; 
     3792                                click = false; 
     3793                        } 
     3794                        canMakeBox = true; 
     3795                        fastSearch = false; 
     3796                } 
     3797                 
     3798                /* 
     3799                 ** Verifica se o dynamic contact esta aberto ou fechado, caso esteja aberto,  
     3800                 ** demora 250 millisegundos para executar a função makeBoxMail. 
     3801                 */ 
     3802                these.data('is_open') ? setTimeout(makeBoxMail,250) : makeBoxMail(); 
     3803        }) 
     3804        //AO COLAR UM TEXTO NO CAMPO 
     3805        .bind("paste", function(e){ 
     3806                $(this).trigger("keydown"); 
     3807                var pthis = $(this); 
     3808                setTimeout(function() { 
     3809                        var str = pthis.val().replace(/[,;\t\n]/gi, ","); 
     3810                        str = str.split(","); 
     3811                        $.each(str, function(index, value){ 
     3812                                draw_email_box(value, pthis); 
     3813                        }); 
     3814                        pthis.val(""); 
     3815                }, 50); 
     3816        }); 
     3817        //SE FOR EDIÇÃO DE EMAILS RECALCULA O INPUT E SETA O FOCO 
     3818        if(input.hasClass("box-input")){ 
     3819                input.trigger("keydown"); 
     3820                input.focus(); 
     3821        } 
     3822} 
     3823var input_search = ""; 
     3824var click = false; 
     3825//EVENTOS DA CAIXA 
     3826function box_actions(box){ 
     3827        //AO PRESSIONAR UMA TECLA COM A CAIXA SELECIONADA        
     3828        box.keydown(function(e){ 
     3829                switch (e.keyCode) { 
     3830                        case $.ui.keyCode.LEFT: 
     3831                                //VERIFICA SE EXISTE ALGUMA CAIXA A ESQUERDA 
     3832                                if($(this).prev().hasClass("box")) 
     3833                                        $(this).removeClass("box-selected").prev().focus(); 
     3834                                break; 
     3835                        case $.ui.keyCode.RIGHT: 
     3836                                //VERIFICA SE EXISTE ALGUMA CAIXA A DIREITA  
     3837                                if($(this).next().hasClass("box")) 
     3838                                        $(this).removeClass("box-selected").next().focus(); 
     3839                                //SENAO FOCO O INPUT DO EMAIL 
     3840                                else 
     3841                                        $(this).removeClass("box-selected").next().focus(); 
     3842                                break; 
     3843                        case $.ui.keyCode.HOME: 
     3844                                //SELECIONO A PRIMEIRA CAIXA 
     3845                                e.preventDefault(); 
     3846                                $(this).parents(".email-area").find("div:first").focus(); 
     3847                                break; 
     3848                        case $.ui.keyCode.END: 
     3849                                //SELECIONO A ULTIMA CAIXA 
     3850                                e.preventDefault(); 
     3851                                $(this).parents(".email-area").find("div:last").focus(); 
     3852                                break; 
     3853                        case $.ui.keyCode.DELETE: 
     3854                                //VERIFICA SE EXISTE ALGUMA CAIXA A DIREITA 
     3855                                if($(this).next().hasClass("box")) 
     3856                                        $(this).next().focus(); 
     3857                                //SENAO FOCO O INPUT DO EMAIL 
     3858                                else 
     3859                                        $(this).next().focus(); 
     3860                                //REMOVO ESTA CAIXA 
     3861                                $(this).remove(); 
     3862                                break; 
     3863                        case $.ui.keyCode.BACKSPACE: 
     3864                                //VERIFICA SE EXISTE ALGUMA CAIXA A ESQUERDA 
     3865                                if($(this).prev().hasClass("box")) 
     3866                                        $(this).removeClass("box-selected").prev().focus(); 
     3867                                //SENAO HOUVER VERIFICA SE EXISTE ALGUMA CAIXA A DIREITA 
     3868                                else if($(this).next().hasClass("box")) 
     3869                                        $(this).next().focus(); 
     3870                                //SENAO HOUVER NEM A DIREITA NEM A ESQUERDA SETO O FOCO NO INPUT DO EMAIL 
     3871                                else 
     3872                                        $(this).next().focus(); 
     3873                                //REMOVO ESTA CAIXA      
     3874                                $(this).remove(); 
     3875                                e.preventDefault(); 
     3876                                break; 
     3877                        case $.ui.keyCode.ENTER: 
     3878                                e.preventDefault(); 
     3879                                $(this).trigger("dblclick"); 
     3880                                break; 
     3881                } 
     3882        }) 
     3883        //AO FAZER UM DUPLO CLICK NA CAIXA 
     3884        .dblclick(function(e){ 
     3885                var input = $(this).find("input").clone(); 
     3886                input.css("display" , "inline-block"); 
     3887                $(this).before(input); 
     3888                input_keydowns(input, currentTab); 
     3889                $(this).remove(); 
     3890        //CLICK SIMPLES NA CAIXA 
     3891        }).click(function(){ 
     3892                $(this).focus(); 
     3893        //AO DAR O FOCO NA CAIXA 
     3894        }).focus(function(){ 
     3895                $(this).parent().find("div").removeClass("box-selected"); 
     3896                $(this).addClass("box-selected"); 
     3897        }).focusout(function(){ 
     3898                $(this).removeClass("box-selected"); 
     3899        }).draggable({ 
     3900                revert: 'invalid', 
     3901                helper : 'clone', 
     3902                stack: "body", 
     3903                containment : ".new-msg-head-data", 
     3904                start: function(e, ui){ 
     3905                        $(this).parent().droppable( "disable" ); 
    35863906                }, 
    3587                 focus: function() { 
    3588                         return false; 
    3589                 }, 
    3590                 select: function( event, ui ) { 
    3591                         var terms = mySplit( this.value ); 
    3592                         terms.pop(); 
    3593                         terms.push( (ui.item.name != "" ? "\""+ui.item.name+"\" " : "") + (ui.item.email ? "<"+ui.item.email+">" : "")); 
    3594                         terms.push( "" ); 
    3595                         this.value = terms.join( ", " ); 
    3596                         return false; 
    3597                 }, 
    3598                 autoFocus: true 
    3599         }).data( "autocomplete" )._renderItem = function( ul, item ) { 
    3600                 ul.css({"max-height" : "115px", "overflow-y" : "auto"}); 
    3601                 if( $(ul).find("li").length > 10 ){ 
     3907                stop : function(e, ui){ 
     3908                        $(this).parent().droppable( "enable" ); 
     3909                } 
     3910        }); 
     3911} 
     3912 
     3913//MOSTRA OS DETALHES DAS CAIXA DE EMAIL NOS CAMPOS PARA - CC - CCO 
     3914function show_detais(box, value, personal, shared){ 
     3915        var ldap_id = preferences.expressoMail_ldap_identifier_recipient; 
     3916        var group = (personal != undefined ? (personal == "G" ? true : false) : false); 
     3917        shared = shared ? shared : false; 
     3918        if(group){ 
     3919                REST.get("/"+ (shared ? "shared" : "") +"group/"+value, {}, function(data){ 
     3920                        if(!data.error){ 
     3921                                if(data.collection.error) 
     3922                                        box.find(".box-loading").remove(); 
     3923                                else{ 
     3924                                        box.find(".box-loading").removeClass("box-loading").addClass("box-info"); 
     3925                                        box.addClass("box-"+value).removeClass("invalid-email-box"); 
     3926                                        loadGroupBox(data.collection, ".box-"+value); 
     3927                                        box.unbind("dblclick").bind("dblclick", function(e){ 
     3928                                                new $.Zebra_Dialog(get_lang("Impossible editing this contact, but it's possible to remove it"), { 
     3929                                                        'buttons':  false, 
     3930                                                        'modal': false, 
     3931                                                        'position': ['right - 20', 'top + 20'], 
     3932                                                        'auto_close': 3000 
     3933                                                }); 
     3934                                        }).find(".box-input").val("\""+data.collection.data[1].value+"\" <"+data.collection.data[1].value+">"); 
     3935                                        box.find(".email-box-value").html( (data.collection.data[1].value.length > 18 ? data.collection.data[1].value.substring(0, 15)+"...": data.collection.data[1].value)) 
     3936                                } 
     3937                        }else{ 
     3938                                box.find(".box-loading").remove(); 
     3939                        } 
     3940                }); 
     3941                return; 
     3942        } 
     3943         
     3944        if(personal){ 
     3945                REST.get("/"+ (shared ? "shared" : "") +"contact/"+value, {}, function(data){ 
     3946                        if(!data.error){ 
     3947                                if(data.collection.error) 
     3948                                        box.find(".box-loading").remove(); 
     3949                                else{ 
     3950                                        box.find(".box-loading").removeClass("box-loading").addClass("box-info"); 
     3951                                        box.addClass("box-"+value).removeClass("invalid-email-box"); 
     3952                                        loadExtraLDAPBox(data.collection.data, ".box-"+value); 
     3953                                        box.unbind("dblclick").bind("dblclick", function(e){ 
     3954                                                new $.Zebra_Dialog(get_lang("Impossible editing this contact, but it's possible to remove it"), { 
     3955                                                        'buttons':  false, 
     3956                                                        'modal': false, 
     3957                                                        'position': ['right - 20', 'top + 20'], 
     3958                                                        'auto_close': 3000 
     3959                                                }); 
     3960                                        }).find(".box-input").val("\""+data.collection.data[0].value+"\" <"+data.collection.data[1].value+">"); 
     3961                                        box.find(".email-box-value").html( (data.collection.data[0].value.length > 18 ? data.collection.data[0].value.substring(0, 15)+"...": data.collection.data[0].value)) 
     3962                                } 
     3963                        }else{ 
     3964                                box.find(".box-loading").remove(); 
     3965                        } 
     3966                }); 
     3967                return; 
     3968        } 
     3969         
     3970        REST.get("/usersldap", {field : ldap_id,value: value}, function(data){ 
     3971                if(!data.error){ 
     3972                        if(data.collection.error) 
     3973                                box.find(".box-loading").remove(); 
     3974                        else{ 
     3975                                box.find(".box-loading").removeClass("box-loading").addClass("box-info"); 
     3976                                box.addClass("box-"+value).removeClass("invalid-email-box"); 
     3977                                loadExtraLDAPBox(data.collection.itens[0].data, ".box-"+value); 
     3978                                box.unbind("dblclick").bind("dblclick", function(e){ 
     3979                                        new $.Zebra_Dialog(get_lang("Impossible editing this contact, but it's possible to remove it"), { 
     3980                                                'buttons':  false, 
     3981                                                'modal': false, 
     3982                                                'position': ['right - 20', 'top + 20'], 
     3983                                                'auto_close': 3000 
     3984                                        }); 
     3985                                }).find(".box-input").val("\""+data.collection.itens[0].data[0].value+"\" <"+data.collection.itens[0].data[1].value+">"); 
     3986                                box.find(".email-box-value").html( (data.collection.itens[0].data[0].value.length > 18 ? data.collection.itens[0].data[0].value.substring(0, 15)+"...": data.collection.itens[0].data[0].value)) 
     3987                                if(data.collection.itens[0].data[3].value == "TRUE"){ 
     3988                                        box.removeClass("invalid-email-box").addClass("out-office-box"); 
     3989                                } 
     3990                        } 
     3991                }else{ 
     3992                        box.find(".box-loading").remove(); 
     3993                } 
     3994        }); 
     3995} 
     3996 
     3997//FUNÇÃO QUE "SETA" OS BINDS DOS CAMPOS PARA - CC - CCO 
     3998function input_binds(div, ID){ 
     3999 
     4000        //AO CLICAR NA DIV SETA O FOCO NO INPUT 
     4001        div.click(function(e){ 
     4002                if(e.target == $(this)[0]){ 
     4003                        $(this).find("input:last").focus(); 
     4004                        $(this).find("div").removeClass("box-selected"); 
     4005                } 
     4006        }) 
     4007         
     4008        //AO SAIR DO FOCO DA DIV ELE RETIRA TODAS AS CLASSES DE CAIXAS SELECIONADAS 
     4009        .focusout(function(e){ 
     4010                if(!$(e.target).parents(".email-area:first").length) 
     4011                        $(this).find("div").removeClass("box-selected"); 
     4012        }).droppable({ 
     4013                hoverClass: "box-draggable-hover", 
     4014                accept : ".box", 
     4015                drop : function(e, ui){ 
     4016                        ui.draggable.parent().droppable( "enable" ); 
     4017                        var box = ui.draggable.clone(); 
     4018                        box_actions(box); 
     4019                        if(box.find(".box-info").length){ 
     4020                                box.unbind("dblclick").bind("dblclick", function(e){ 
     4021                                        new $.Zebra_Dialog('<strong>Impossivel editar</strong> um contato do ldap\n' + 
     4022                                                '<strong>Porém</strong>é possivel remove-lo', { 
     4023                                                'buttons':  false, 
     4024                                                'modal': false, 
     4025                                                'position': ['right - 20', 'top + 20'], 
     4026                                                'auto_close': 3000 
     4027                                        }); 
     4028                                }); 
     4029                        } 
     4030                        $(this).prepend(box); 
     4031                        ui.draggable.remove(); 
     4032                } 
     4033        }); 
     4034         
     4035        //MAKE KEYDOWN 
     4036        input_keydowns(div.find("input"), ID); 
     4037         
     4038         
     4039        //VERIFICA PREFERENCIA DE CONTATOS DINÂMICOS ESTA ATIVA 
     4040        if(parseInt(preferences.use_dynamic_contacts)){ 
     4041                //PREPARAÇÃO DA ARRAY DOS CONTATOS DINÂMICOS 
     4042 
     4043                $.widget( "custom.catcomplete", $.ui.autocomplete, { 
     4044                        _renderMenu: function( ul, items ) { 
     4045                                var self = this, 
     4046                                currentType = ""; 
     4047                                $.each( items, function( index, item ) { 
     4048                                        if ( item.typel != currentType) { 
     4049                                                if(item.typel == "/groups" && $(ul).find(".dynamic-recent").length) 
     4050                                                        self._renderItem( ul, {name:"", value:"", type:"linha"} ); 
     4051                                                if(item.typel == "/contacts" && ($(ul).find(".dynamic-group").length || $(ul).find(".dynamic-recent").length)) 
     4052                                                        self._renderItem( ul, {name:"", value:"", type:"linha"} );       
     4053                                                currentType = item.typel; 
     4054                                        } 
     4055                                        self._renderItem( ul, item ); 
     4056                                        $(ul).find("li:last").find(".dynamic-stars").raty({ 
     4057                                                readOnly : true, 
     4058                                                half : true, 
     4059                                                hints : ['','','','',''], 
     4060                                                score    : ((item.number_of_messages*5)/topContact) > 0.5 ? ((item.number_of_messages*5)/topContact) : 0.5, 
     4061                                                starOn  : '../../prototype/plugins/jq-raty/img/star-on.png', 
     4062                                                starOff : '../../prototype/plugins/jq-raty/img/star-off.png', 
     4063                                                starHalf : '../../prototype/plugins/jq-raty/img/star-half.png' 
     4064                                        }); 
     4065                                }); 
     4066                                if($(ul).find("li:last").hasClass("dynamic-separator")){ 
     4067                                        $(ul).find("li:last").remove(); 
     4068                                } 
     4069                        } 
     4070                }); 
     4071                //INSERÇÃO DO AUTO COMPLETE AO INPUT 
     4072                div.find("input").catcomplete({ 
     4073                        minLength: 1,                    
     4074                        source: function(request, response){ 
     4075                                if ( request.term in cache ) { 
     4076                                        response( cache[ request.term ] ); 
     4077                                        return; 
     4078                                } 
     4079                                dynamicContactsList = new Array(); 
     4080                                REST.get("/usercontacts", false, function(data){ 
     4081                                        dynamicData = data.collection.itens; 
     4082                                        if(dynamicData){ 
     4083                                                $.each(dynamicData, function(index, value){ 
     4084                                                        dynamic = {}; 
     4085                                                        $.each(value.data, function(index, value){ 
     4086                                                                dynamic[value.name] = value.value; 
     4087                                                        }); 
     4088                                                        dynamic['value'] = (dynamic.name ? dynamic.name +' - ': '') + dynamic.mail; 
     4089                                                        dynamic['type'] = value.dataType; 
     4090                                                        dynamic['typel'] = (value.dataType.substring(0,7) == "/shared" ? "/"+value.dataType.substring(7,value.dataType.length)+"s" : value.dataType) ; 
     4091                                                        dynamicContactsList.push(dynamic); 
     4092                                                }); 
     4093                                        } 
     4094                                        var data = $.ui.autocomplete.filter(dynamicContactsList, request.term ); 
     4095                                        cache[ request.term ] = data; 
     4096                                        response( data ); 
     4097                                }); 
     4098                        }, 
     4099                        focus: function() { 
     4100                                return false; 
     4101                        }, 
     4102                         
     4103                        //EVENTO AO SELECIONAR UM CONTATO DINÂMICO 
     4104                        select: function( event, ui ) { 
     4105                                canMakeBox = false; 
     4106                                event.preventDefault(); 
     4107                                $(this).val(""); 
     4108                                if(ui.item.typel == "/contacts") 
     4109                                        draw_email_box(""+ui.item.id, $(this), true, (ui.item.type.substring(0,7) == "/shared" ? true : false)); 
     4110                                else if(ui.item.typel == "/groups") 
     4111                                        draw_email_box(""+ui.item.id, $(this), "G", (ui.item.type.substring(0,7) == "/shared" ? true : false)); 
     4112                                else 
     4113                                        draw_email_box(ui.item.name ? "\""+ui.item.name+"\" <"+ui.item.mail+">" : ui.item.mail, $(this)); 
     4114                                return false; 
     4115                        }, 
     4116                        autoFocus: true, 
     4117                        position : { my: "left top", at: "left bottom", collision: "fit" } 
     4118                }).bind('catcompleteopen', function(event, ui) { 
     4119                        $(this).data('is_open',true); 
     4120                }).bind('catcompleteclose', function(event, ui) { 
     4121                        canMakeBox = true; 
     4122                        $(this).data('is_open',false); 
     4123                }) 
     4124                 
     4125                //MONTAGEM DA LISTA DE CONTATOS DINÂMICOS DO AUTO COMPLETE 
     4126                .data( "catcomplete" )._renderItem = function( ul, item ) { 
     4127                        if($(ul).find("li").length < 50){ 
     4128                                var autocomplete = $(this)[0].element; 
     4129                                //cálculo dinâmico da largura da lista 
     4130                                var width = (item.label ? item.label.length : (item.value ? item.value.length : (item.email ? item.email.length : 20 ))); 
     4131                                width = width*5 + (is_ie ? 170 : 200) + 16; 
     4132                                if (width < $(ul).width()) 
     4133                                        width = $(ul).width(); 
     4134                                ul.css({"min-width":width,"max-height" : "180px", "overflow-y" : "auto", "min-height": "30px"}); 
     4135                                var listContacts = DataLayer.render("../prototype/modules/mail/templates/listContacts.ejs", item); 
     4136                                return $(listContacts).data( "item.autocomplete", item ).appendTo( ul ).find("span:last").button({ 
     4137                                                icons : { 
     4138                                                primary : "ui-icon-close" 
     4139                                        }, 
     4140                                        text: false 
     4141                                }).click(function(event){ 
     4142                                        var removeLi = $(this).parents("li:first"); 
     4143                                        if(!event.keyCode) 
     4144                                                autocomplete.catcomplete( "close" ); 
     4145                                        canMakeBox = false; 
     4146                                        $.Zebra_Dialog('Deseja remover <b>'+(item.name ? item.name+" - " : "")+ item.mail+'</b>?', { 
     4147                                                        'type':     'question', 
     4148                                                        'custom_class': (is_ie ? 'configure-zebra-dialog' : ''), 
     4149                                                        'title':    'Atenção', 
     4150                                                        'buttons': ['Sim','Não'],                
     4151                                                        'overlay_opacity': '0.5', 
     4152                                                        'onClose':  function(caption) { 
     4153                                                                if(caption == 'Sim'){ 
     4154                                                                        $(removeLi).remove(); 
     4155                                                                        REST.delete("/dynamiccontact/"+item.id); 
     4156                                                                        updateDynamicContact(); 
     4157                                                                        cache = new Array(); 
     4158                                                                }else if(caption == 'Não'){ 
     4159                                                                        $(focusIn).focus(); 
     4160                                                                } 
     4161                                                        } 
     4162                                        }); 
     4163                                }); 
     4164                        } 
    36024165                        return; 
    3603                 } 
    3604                 return $( "<li></li>" ) 
    3605                         .data( "item.autocomplete", item ) 
    3606                         .append( "<a>" + item.name + " - " + item.email + "</a>" ) 
    3607                         .appendTo( ul ); 
    3608         }; 
    3609         input.parents("tr:first").find("button").button().click(function(){ 
    3610                 emQuickSearch($(this).parents("tr:first").find("textarea").val(), "."+$(this).parents("tr:first").attr('class').split("-")[0], ID, undefined, true); 
     4166                }; 
     4167        } 
     4168         
     4169        //FUNÇÃO DOS BOTÕES PARA - CC - CCO 
     4170        div.parents("tr:first").find("button").button().click(function(){ 
     4171                click = true; 
     4172                fastSearch = true; 
     4173                if(!$(":focus").hasClass("new-message-input")) 
     4174                        emQuickSearch(($(this).parents("tr:first").find("input").val() ? $(this).parents("tr:first").find("input").val() : input_search), "."+$(this).parents("tr:first").attr('class').split("-")[0], ID, undefined, true); 
    36114175        }); 
    36124176} 
     
    36154179        connector.loadScript("color_palette"); 
    36164180        connector.loadScript('wfolders'); 
     4181        connector.loadScript("ccQuickAdd");  
    36174182         
    36184183        if(typeof(RichTextEditor) == 'undefined' || typeof(ColorPalette) == 'undefined' || typeof(wfolders) == 'undefined') 
     
    36624227                button.toggleClass("expressomail-button-icon-ative"); 
    36634228                field.toggle(); 
    3664                 field.find("textarea").val("").focus(); 
    3665                 if(!field.find("textarea").hasClass("elastic")){ 
    3666                         field.find("textarea").css({"max-height" : "115px", "overflow-y" : "auto"}).addClass("elastic").elastic().unbind('blur');        
    3667                         input_binds(field.find("textarea"), ID); 
     4229                field.find("textarea").val("").parent().find("input").focus(); 
     4230                field.find(".email-area div").remove(); 
     4231                if(!field.find("textarea").hasClass("track")){ 
     4232                        field.find("textarea").css({"max-height" : "115px", "overflow-y" : "auto"}).addClass("track");   
     4233                        input_binds(field.find(".email-area"), ID); 
    36684234                } 
    36694235        }  
    36704236         
    3671         input_binds(content.find('[name="input_to"]').css({"max-height" : "115px", "overflow-y" : "auto"}).addClass("elastic").elastic().unbind('blur').focus(), ID);    
     4237        input_binds(content.find('[name="input_aux_to"]').css("max-width" , parseInt(content.find(".email-area").css("width"))-5).focus().parent().css({"max-height" : "115px", "overflow-y" : "auto"}), ID);    
    36724238         
    36734239        //Botão TextoRico/TextoSimples 
    36744240        content.find(".new-msg-head-right-buttons").find(".button").button().filter(".rich-button").click(function(){ 
    3675                 /*Se o texto do botão for "Texto simples" exibirá a mensagem antes de alterar para texto simples*/  
    3676         if($(".rich-button").find("span").text() == get_lang("Simple Text")){  
    3677                 $.Zebra_Dialog(get_lang("Convert this message into plain text can make parts of it are removed. Continue?"), {  
    3678             'type':     'warning',  
    3679             'overlay_opacity': '0.5',  
    3680             'buttons':  ['OK','Cancelar'],  
    3681             'width' : 380,  
    3682             'onClose':  function(clicked) {  
    3683                 if(clicked == 'OK'){  
    3684                         RichTextEditor.setPlain(check_input(content.find('[name="textplain_rt_checkbox"]')), ID);  
    3685                         $(".rich-button").find("span").text(get_lang("Rich Text"));  
    3686                 }  
    3687             }  
    3688                 })  
    3689         }  
    3690         /*Se o texto do botão for "Texto rico" simplesmente altera para texto rico*/  
    3691         else{  
    3692                 RichTextEditor.setPlain(check_input(content.find('[name="textplain_rt_checkbox"]')), ID);  
    3693                 $(".rich-button").find("span").text(get_lang("Simple Text"));  
    3694         } 
     4241                /*Se o texto do botão for "Texto simples" exibirá a mensagem antes de alterar para texto simples*/ 
     4242                if($(".rich-button").find("span").text() == get_lang("Simple Text")){ 
     4243                        $.Zebra_Dialog(get_lang("Convert this message into plain text can make parts of it are removed. Continue?"), { 
     4244                    'type':     'warning', 
     4245                    'overlay_opacity': '0.5', 
     4246                    'buttons':  ['OK','Cancelar'], 
     4247                    'width' : 380, 
     4248                    'onClose':  function(clicked) { 
     4249                        if(clicked == 'OK'){ 
     4250                                RichTextEditor.setPlain(check_input(content.find('[name="textplain_rt_checkbox"]')), ID); 
     4251                                $(".rich-button").find("span").text(get_lang("Rich Text")); 
     4252                        }  
     4253                    } 
     4254                        }) 
     4255                } 
     4256                /*Se o texto do botão for "Texto rico" simplesmente altera para texto rico*/ 
     4257                else{ 
     4258                        RichTextEditor.setPlain(check_input(content.find('[name="textplain_rt_checkbox"]')), ID); 
     4259                        $(".rich-button").find("span").text(get_lang("Simple Text")); 
     4260                } 
    36954261        }) 
    36964262         
     
    39344500 
    39354501        var el_shared_users = Element("el_shared_users"); 
     4502        /* Recupera a pasta atual do usuário (selecionada) */ 
     4503        var user_shared = folder.split(cyrus_delimiter); 
     4504        /* Verifica se está nas próprias pastas */ 
     4505        if(user_shared[0] == "INBOX"){ 
     4506                user_shared = User.me.uid; 
     4507        }else{ 
     4508                user_shared = user_shared[1]; 
     4509        }        
    39364510        // The element was loaded and populated...so return. 
    39374511        if(el_shared_users){ 
     
    39444518                        _option.text = el_shared_users.options[x].text; 
    39454519                        _option.value = el_shared_users.options[x].value; 
     4520                        /* Faz o tratamento do nome da pasta para fazer a verificação e selecionar o valor no select */ 
     4521                        var str_begin_name = _option.text.indexOf('<') + 1; 
     4522                        var str_end_name = _option.text.indexOf('@'); 
     4523                        var user_selected_name = _option.text.substring(str_begin_name, str_end_name); 
     4524                        /* Verifica se é o usuário da pasta selecionada */                       
     4525                        if(user_selected_name == user_shared){ 
     4526                                _option.selected = 'selected'; 
     4527                        } 
    39464528                        sel_from.options[sel_from.options.length] = _option     ; 
    39474529                } 
     
    39694551                if(data.length > 0) { 
    39704552                        tr1_1.style.display = ''; 
    3971                         var mycn = typeof(data.myname != 'undefined') ? data.myname : ''; 
     4553            var mycn = typeof(data.myname != 'undefined') ? data.myname : ''; 
    39724554                        var _option = document.createElement("OPTION"); 
    39734555                        _option.text =  '"'+mycn+'" <'+Element("user_email").value+'>'; 
    39744556                        _option.value  = mycn+";"+Element("user_email").value; 
     4557                        /* Verifica se é o usuário logado */ 
     4558                        if(user_shared == User.me.uid) 
     4559                                _option.selected = 'selected'; 
    39754560                        sel_from.options[sel_from.options.length] = _option; 
    39764561 
    39774562                        var options = ''; 
    3978                         var cn = ''; 
    3979                                                                  
     4563            var cn = ''; 
    39804564                        for (var x = 0; x < data.length; x++)   { 
    39814565                                cn = typeof(data[x].cn[0] != 'undefined') ? data[x].cn[0] : ''; 
     
    39834567                                _option.text = '"'+cn+'" <'+data[x].mail[0]+'>'; 
    39844568                                _option.value = cn+';'+data[x].mail[0]+';'+data[x].save_shared[0]+';'+data[x].uid[0]; 
     4569                                /* Faz o tratamento do nome da pasta para fazer a verificação e selecionar o valor no select */ 
     4570                                var str_begin_name = _option.text.indexOf('<') + 1; 
     4571                                var str_end_name = _option.text.indexOf('@'); 
     4572                                var user_selected_name = _option.text.substring(str_begin_name, str_end_name);  
     4573                                /* Verifica se é o usuário da pasta selecionada */ 
     4574                                if(user_selected_name == user_shared){ 
     4575                                        _option.selected = 'selected'; 
     4576                                } 
    39854577                                sel_from.options[sel_from.options.length] = _option     ; 
    39864578                        } 
     
    43354927                cc_data[3] = array_addrs[0]; 
    43364928 
     4929        var onclick = '';                
     4930        $.each(cc_data, function(index, value){ 
     4931                onclick += "'"+value+"',"; 
     4932        }); 
     4933        onclick = onclick.substr(0, onclick.length-1); 
    43374934        var sm_envelope_img1 = '<img style="cursor:'+ (is_ie ? 'hand' : 'pointer') +'" title="' + get_lang("Add Contact") + 
    4338         '" onclick="ccQuickAddOne.showList(\''+cc_data+'\')" src="./templates/'+template+'/images/user_card.png">'; 
     4935        '" onclick="ccQuickAddOne.showList(['+onclick+'])" src="./templates/'+template+'/images/user_card.png">'; 
    43394936        var to_addybook_add = "<SPAN id='insert_plugin_"+idx_cc+"_"+ID+"'>"; 
    43404937        to_addybook_add += addrs; 
  • branches/2.4/expressoMail1_2/js/main.js

    r6736 r6754  
    66var results_search_messages = "";  
    77var cabecalho = '<h4>ExpressoLivre - ExpressoMail</h4>';  
     8// Variavel para controle de atualização das mensagens listadas na modal de alerta de filtro por remetente 
     9var checkAlarmsFilter = false; 
     10 
     11var dynamicPersonalContacts = new Array(); 
     12var dynamicContacts = new Array(); 
     13var topContact = 0; 
     14DataLayer.get("folder", true); 
    815 
    916//Os IE's < 9 não possui suporte a trim() introduzida no JavaScript 1.8.1 
    1017if(!String.prototype.trim){   
    1118        String.prototype.trim = function(){ 
    12                                                                 return this.replace(/^\s+|\s+$/g,''); 
    13                                                         }  
     19                return this.replace(/^\s+|\s+$/g,''); 
     20        }  
    1421} 
    1522         
     
    1926        return folders.join(cyrus_delimiter); 
    2027}  
     28 
     29function updateDynamicContact(){ 
     30        dynamicContacts = new Array(); 
     31        var dynamicData = REST.get("/dynamiccontacts").collection.itens; 
     32        if(dynamicData){ 
     33                $.each(dynamicData, function(index, value){ 
     34                        if(index ==0){ 
     35                                topContact = parseInt(value.data[2].value); 
     36                        } 
     37                        var dynamic = { 
     38                                name : value.data[0].value, 
     39                                mail : value.data[1].value, 
     40                                value: value.data[0].value + " - " + value.data[1].value, 
     41                                type: "", 
     42                                id: parseInt(value.data[3].value), 
     43                                qtd : parseInt(value.data[2].value) 
     44                        }; 
     45                        dynamicContacts.push(dynamic); 
     46                }); 
     47        } 
     48} 
     49 
     50 
     51function updateDynamicPersonalContacts(){ 
     52        dynamicPersonalContacts = new Array(); 
     53        var contactsData = REST.get("/contacts").collection.itens; 
     54        if(contactsData){ 
     55                $.each(contactsData, function(index, value){ 
     56                        var contact = { 
     57                                id : parseInt(value.data[0].value), 
     58                                name : value.data[1].value, 
     59                                email : value.data[2].value, 
     60                                value: value.data[1].value + " - " + value.data[2].value, 
     61                                type: "P" 
     62                        }; 
     63                        dynamicPersonalContacts.push(contact); 
     64                }); 
     65        } 
     66} 
     67 
    2168function init(){ 
    2269        if (!is_ie) 
    2370                Element('tableDivAppbox').width = '100%'; 
    2471 
    25         var save_contacts = function(data){ 
    26                 contacts = data; 
    27                 if (preferences.use_local_messages == 1 && window.google && google.gears) 
    28                         if (expresso_local_messages.is_offline_installed()) 
    29                                 expresso_local_messages.capt_url('controller.php?action=$this.db_functions.get_dropdown_contacts_to_cache'); 
    30  
    31         } 
    3272        var save_preferences = function(data){ 
    3373 
     
    69109                //Substituido por padrão Jquery 
    70110                cExecute ("$this.imap_functions.get_range_msgs2&folder=INBOX&msg_range_begin=1&msg_range_end="+preferences.max_email_per_page+"&sort_box_type=SORTARRIVAL&search_box_type=ALL&sort_box_reverse=1", handler_draw_box); 
    71                 cExecute ("$this.db_functions.get_dropdown_contacts", save_contacts); //Save contacts needs preferences. 
     111                //cExecute ("$this.db_functions.get_dropdown_contacts", save_contacts); //Save contacts needs preferences. 
    72112                if(preferences.hide_folders == "1") 
    73113                        Element('divAppboxHeader').innerHTML =  title_app_menu; 
     
    116156                                         
    117157                                $(".collapse_folders").removeClass("ui-icon-triangle-1-w"); 
    118                                 $(".collapse_folders").addClass("ui-icon-triangle-1-e");  
    119                                 $(".collapse_folders").parent().attr('title', "Expandir"); 
     158                                $(".collapse_folders").addClass("ui-icon-triangle-1-e"); 
     159                                $(".collapse_folders").parent().attr('title', "Expandir"); 
    120160                                $.cookie('collapse_folders', "true"); 
    121161                                refresh(); 
     
    127167                                        $("#folderscol").show(); 
    128168                                $(".collapse_folders").removeClass("ui-icon-triangle-1-e"); 
    129                                 $(".collapse_folders").addClass("ui-icon-triangle-1-w");  
    130                                 $(".collapse_folders").parent().attr('title', "Ocultar"); 
     169                                $(".collapse_folders").addClass("ui-icon-triangle-1-w"); 
     170                                $(".collapse_folders").parent().attr('title', "Ocultar"); 
    131171                                $.cookie('collapse_folders', "false"); 
    132172                                refresh(); 
     
    143183                        } 
    144184                ); 
     185                 
     186                if(parseInt(preferences.use_dynamic_contacts)){ 
     187                        var load_dynamics = function(){ 
     188                                updateDynamicContact(); 
     189                                updateDynamicPersonalContacts(); 
     190                        }; 
     191                        load_dynamics(); 
     192                } 
    145193        } 
    146194        var handler_automatic_trash_cleanness = function(data){ 
     
    160208                mobile_device = ( ( data.constructor == Boolean ) ? data : ( data === 'true' ) ); 
    161209        }); 
     210 
     211        DataLayer.get("folder", true); 
     212        cExecute("$this.imap_functions.get_folders_list&onload=true", update_menu);      
     213         
    162214        setTimeout('auto_refresh()', time_refresh); 
    163215         
     
    192244        cyrus_delimiter = Element('cyrus_delimiter').value; 
    193245 
    194         cExecute ("$this.db_functions.get_dropdown_contacts_to_cache", function(data) {contacts = data;}); 
     246        //cExecute ("$this.db_functions.get_dropdown_contacts_to_cache", function(data) {contacts = data;}); 
    195247        //cExecute ("$this.functions.get_preferences", save_preferences); 
    196248        } 
     
    279331                        msg_to_delete.childNodes[1].innerHTML = ""; 
    280332                        write_msg(get_lang("Attachments removed")); 
    281                         folderName = Base64.encode(folder);  
    282                         folderName = folderName.replace(/=/gi, '');  
    283                         delete_border(msg_num+'_r_'+folderName,'false'); //close email tab 
     333                        folderName = Base64.encode(folder); 
     334                        folderName = folderName.replace(/=/gi, ''); 
     335                        delete_border(msg_num+'_r_'+folderName,'false'); //close email tab 
    284336                } 
    285337        }; 
     
    386438                        // se existir prepara os dados para serem enviados e chama a 
    387439                        // operação na applet 
    388  
    389440 
    390441                   // if ((msg_info.DispositionNotificationTo) && ((msg_info.Unseen == 'U') || (msg_info.Recent == 'N'))){ 
     
    510561 
    511562function refresh(alert_new_msg){ 
     563        getFromAlertRules(); 
    512564        var handler_refresh = function(data){ 
     565                if(checkAlarmsFilter){ 
     566                        handlerMessageFilter = function (data) { 
     567                                alarmFollowupflagged('filtersAlarms', data); 
     568                        } 
     569                        /* Busca  nas pastas indexadas para ver se há novas mensagens com a flag $FilteredMessage */ 
     570                        cExecute ("$this.imap_functions.getFlaggedAlertMessages&folders="+fromRules, handlerMessageFilter); 
     571                } 
     572                checkAlarmsFilter = true; 
    513573                if(data['msg_range_end']) 
    514574                        if(data['msg_range_end'] > 0) 
     
    523583 
    524584                if (data.length > 0){ 
    525                         for(var i=0;i< data.length;i++){  
    526                                 if (!onceOpenedHeadersMessages[current_folder])  
    527                                         onceOpenedHeadersMessages[current_folder] = {};  
    528                                 onceOpenedHeadersMessages[current_folder][data[i].msg_number] = data[i];  
    529                         }  
     585                        for(var i=0;i< data.length;i++){ 
     586                                if (!onceOpenedHeadersMessages[current_folder]) 
     587                                        onceOpenedHeadersMessages[current_folder] = {}; 
     588                                onceOpenedHeadersMessages[current_folder][data[i].msg_number] = data[i]; 
     589                        } 
    530590                        Element("table_message_header_box_"+numBox).emptyBody = false; 
    531591                        table_element = Element("table_box"); 
     
    708768                          }, 
    709769                          beforeSend: function( jqXHR, settings ){ 
    710                                 connector.showProgressBar(); 
     770                                connector.showProgressBar(); 
    711771                          }, 
    712                                 complete: function( jqXHR, settings ){ 
    713                                 connector.hideProgressBar(); 
     772                          complete: function( jqXHR, settings ){ 
     773                                connector.hideProgressBar(); 
    714774                          } 
    715775 
     
    10511111                                                              if( data ) 
    10521112                                                                  show_msg( data ); 
    1053                                                           },  
    1054                                                           beforeSend: function( jqXHR, settings ){  
    1055                                                                 connector.showProgressBar();  
    1056                                                           },  
    1057                                                           complete: function( jqXHR, settings ){  
    1058                                                                 connector.hideProgressBar(); 
     1113                                                          }, 
     1114                                                          beforeSend: function( jqXHR, settings ){ 
     1115                                                                connector.showProgressBar(); 
     1116                                                          }, 
     1117                                                          complete: function( jqXHR, settings ){ 
     1118                                                                connector.hideProgressBar(); 
    10591119                                                          } 
    10601120                                                }); 
     
    11431203                        Element('tot_m').innerHTML = n_total_msg; 
    11441204                } 
    1145                  
    11461205                refresh(); 
    11471206        } 
     
    11681227 
    11691228        // se a aba estiver aberta e selecionada, apenas a msg da aba é movida 
    1170         if(currentTab.toString().indexOf("_r") != -1 && currentTab == border_ID)  
     1229        if(currentTab.toString().indexOf("_r") != -1 && currentTab == border_ID) 
    11711230        { 
    11721231                //se a aba for aberta atraves de uma pesquisa 
     
    11781237        refresh(); 
    11791238        if (parseInt(msgs_number) > 0 || msgs_number.length > 0){ 
    1180               $.ajax({ 
     1239                // remove a flag $FilteredMessage da mensagem, depois move 
     1240                var handler_removeFlag = function(){ 
     1241                        $.ajax({ 
    11811242                                url: 'controller.php?' + $.param( {action: '$this.imap_functions.move_messages', 
    11821243                                                                    folder: folder, 
     
    11971258                                    if( data ) 
    11981259                                        handler_move_msgs( data ); 
    1199                                 },  
    1200                                 beforeSend: function( jqXHR, settings ){  
    1201                                         connector.showProgressBar();  
    1202                             },  
    1203                             complete: function( jqXHR, settings ){  
    1204                                         connector.hideProgressBar();  
    1205                           } 
    1206  
    1207                       }); 
     1260                                }, 
     1261                                beforeSend: function( jqXHR, settings ){ 
     1262                                        connector.showProgressBar(); 
     1263                            }, 
     1264                            complete: function( jqXHR, settings ){ 
     1265                                        connector.hideProgressBar(); 
     1266                          } 
     1267 
     1268                    }); 
     1269                } 
     1270                var hasFolder = false; 
     1271                $.each(fromRules, function(index, value) { 
     1272                        if(value == folder){ 
     1273                                hasFolder = true; 
     1274                                cExecute ("$this.imap_functions.removeFlagMessagesFilter&folder="+folder+"&msg_number="+msgs_number, handler_removeFlag);  
     1275                                return false; 
     1276                        } 
     1277                }); 
     1278                if(!hasFolder){ 
     1279                        handler_removeFlag(); 
     1280                } 
     1281                 
    12081282        }else 
    12091283                write_msg(get_lang('No selected message.')); 
     
    15921666                { 
    15931667                        return selected_messages_by_shortcuts; 
    1594                 }*/  
    1595         /*Se houver mais de uma mensagem selecionada por atalho*/  
    1596         if (array_selected_messages_by_shortcuts.length > 1){  
    1597                 if (selected_messages == "")  
    1598                    return selected_messages_by_shortcuts;  
    1599                 else  
    1600                    return selected_messages + "," + selected_messages_by_shortcuts;  
    1601         }  
    1602         } 
     1668                }*/ 
     1669                /*Se houver mais de uma mensagem selecionada por atalho*/ 
     1670                if (array_selected_messages_by_shortcuts.length > 1){ 
     1671                        if (selected_messages == "") 
     1672                           return selected_messages_by_shortcuts; 
     1673                        else  
     1674                           return selected_messages + "," + selected_messages_by_shortcuts; 
     1675                } 
     1676        }        
    16031677        if (selected_messages == '') 
    16041678                return false; 
     
    17541828                case "reply_without_history": 
    17551829                        RichTextEditor.replyController = true; //Seta o editor como modo reply 
    1756                         content.find('[name="input_to"]').val(data.to); 
     1830                        content.find('[name="input_to"]').val(data.to);                  
     1831                         
     1832                        draw_reply_boxes_by_field("to", data.to, content); 
     1833                         
    17571834                        title = "Re: " + html_entities(data.subject); 
    17581835                        content.find(".subject").val("Re: " + data.subject);                     
     
    17711848                        content.find(".subject").val("Re: " + data.subject); 
    17721849                        content.find('[name="input_to"]').val(data.to); 
     1850                         
     1851                        draw_reply_boxes_by_field("to", data.to, content); 
     1852                         
    17731853                        content.find('[name="msg_reply_from"]').val($("#msg_number_" + border_ID).val());        
    17741854 
     
    17971877                        content.find(".subject").val("Re: " + data.subject); 
    17981878                         
    1799                         if (data.to.indexOf(Element("user_email").value) > 0 ) 
     1879                        if (data.to.indexOf(Element("user_email").value) > 0 ){ 
     1880                                draw_reply_boxes_by_field("to", data.to_all, content); 
    18001881                                content.find('[name="input_to"]').val(data.to_all); 
    1801                         else 
     1882                        }else{ 
     1883                                draw_reply_boxes_by_field("to", data.to + ',' + data.to_all, content); 
    18021884                                content.find('[name="input_to"]').val(data.to + ',' + data.to_all); 
    1803                                  
     1885                        } 
     1886                         
    18041887                        if (data.cc){ 
    18051888                                data.cc = new Array(); 
     
    18121895                                if(data.cc != ""){ 
    18131896                                        content.find('[name="input_cc"]').val(data.cc); 
    1814                                         input_binds(content.find('[name="input_cc"]'), new_border_ID); 
     1897                                        input_binds(content.find('[name="input_cc"]').parent(), new_border_ID); 
    18151898                                        content.find(".cc-tr").show();//cc-button 
    18161899                                        //document.getElementById("a_cc_link" + new_border_ID).value = data.cc; 
    18171900                                        content.find(".cc-button").toggleClass("expressomail-button-icon-ative"); 
    18181901                                        content.find(".cc-button").find("span").html("Remover CC"); 
    1819                                         content.find('[name="input_cc"]').elastic().unbind('blur'); 
    1820                                         content.find('[name="input_cc"]').trigger("update"); 
     1902                                        draw_reply_boxes_by_field("cc", data.cc, content); 
    18211903                                } 
    18221904                        } 
     
    18401922                        else 
    18411923                                data.to_all = ""; 
     1924                         
    18421925                        title = "Re: " + html_entities(data.subject); 
    18431926                         
    1844                         if (data.to.indexOf(Element("user_email").value) > 0 ) 
     1927                        if (data.to.indexOf(Element("user_email").value) > 0 ){ 
     1928                                draw_reply_boxes_by_field("to", data.to_all, content); 
    18451929                                content.find('[name="input_to"]').val(data.to_all); 
    1846                         else 
     1930                        }else{ 
     1931                                draw_reply_boxes_by_field("to", data.to + ',' + data.to_all, content); 
    18471932                                content.find('[name="input_to"]').val(data.to + ',' + data.to_all);                      
     1933                        } 
     1934                         
    18481935                        if (data.cc){ 
    18491936                                data.cc = new Array(); 
     
    18561943                                if(data.cc != ""){ 
    18571944                                        content.find('[name="input_cc"]').val(data.cc); 
    1858                                         input_binds(content.find('[name="input_cc"]'), new_border_ID); 
     1945                                        input_binds(content.find('[name="input_cc"]').parent(), new_border_ID); 
    18591946                                        content.find(".cc-tr").show(); 
    18601947                                        content.find(".cc-button").toggleClass("expressomail-button-icon-ative"); 
    18611948                                        content.find(".cc-button").find("span").html("Remover CC"); 
    1862                                         content.find('[name="input_cc"]').elastic().unbind('blur'); 
    1863                                         content.find('[name="input_cc"]').trigger("update"); 
     1949                                         
     1950                                        draw_reply_boxes_by_field("cc", data.cc, content); 
    18641951                                } 
    18651952                        } 
     
    19162003                                } 
    19172004                                content.find('[name="input_to"]').val(_to +','); 
     2005                                draw_email_box(_to, content.find(".to").filter("input")); 
    19182006                                Element('msg_number').value = ''; 
    19192007                        } 
     
    19412029                        } 
    19422030 
     2031                        draw_reply_boxes_by_field("to", data.to, content); 
     2032                         
    19432033                        content.find('[name="input_to"]').val(data.to); 
    19442034                        if (data.cc){ 
     
    19462036                                data.cc = data.cc.replace(/&gt;/gi,">"); 
    19472037                                content.find('[name="input_cc"]').val(data.cc); 
    1948                                 input_binds(content.find('[name="input_cc"]'), new_border_ID); 
     2038                                input_binds(content.find('[name="input_cc"]').parent(), new_border_ID); 
    19492039                                content.find(".cc-tr").show(); 
    19502040                                content.find(".cc-button").toggleClass("expressomail-button-icon-ative"); 
    19512041                                content.find(".cc-button").find("span").html(get_lang('Remove CC')); 
    1952                                 content.find('[name="input_cc"]').elastic().unbind('blur'); 
    1953                                 content.find('[name="input_cc"]').trigger("update"); 
     2042                                draw_reply_boxes_by_field("cc", data.cc, content); 
    19542043                        } 
    19552044                        if (data.cco){ 
     
    19592048                                        content.find(".cco-button").toggleClass("expressomail-button-icon-ative"); 
    19602049                                        content.find(".cco-button").find("span").html(get_lang('Remove CCo')); 
    1961                                         content.find('[name="input_cco"]').elastic().unbind('blur'); 
    1962                                         content.find('[name="input_cco"]').trigger("update"); 
     2050                                        input_binds(content.find('[name="input_cco"]').parent(), new_border_ID); 
     2051                                        draw_reply_boxes_by_field("cco", data.cco, content); 
    19632052                                } 
    19642053                        } 
     
    20002089        resizeWindow(); 
    20012090        return new_border_ID; //Preciso retornar o ID da nova mensagem. 
     2091} 
     2092 
     2093//DESENHA OS RETANGULOS PARA OS E-MAIL NA OPÇÃO REPLY 
     2094function draw_reply_boxes_by_field(field, value, context){ 
     2095        array = value.split(","); 
     2096        $.each(array, function(index, value){ 
     2097                draw_email_box(value, context.find("."+field).filter("input")); 
     2098        }); 
    20022099} 
    20032100 
     
    22352332        watch_changes_in_msg(ID); 
    22362333 
     2334        var content = $("#content_id_"+ID); 
    22372335        var sign = false; 
    22382336        var crypt = false; 
     2337        var reComplexEmail = /<([^<]*)>[\s]*$/; 
    22392338        if ((preferences.use_assinar_criptografar != '0') && (preferences.use_signature_digital_cripto != '0')){ 
    22402339                var checkSign = document.getElementById('return_digital_'+ID) 
     
    22752374        if(data && data.success == true ){ 
    22762375                // if send ok, set a flag as answered or forwarded 
    2277                 var msg_number_replied = $("#content_id_" + ID).find('[name="msg_reply_from"]'); 
    2278                 var msg_number_forwarded = $("#content_id_" + ID).find('[name="msg_forward_from"]'); 
     2376                var msg_number_replied = content.find('[name="msg_reply_from"]'); 
     2377                var msg_number_forwarded = content.find('[name="msg_forward_from"]'); 
    22792378 
    22802379                if (msg_number_replied.val()){ 
     
    22972396                        } 
    22982397                } 
     2398                 
     2399                $ 
     2400                //REFAZER ISTO COM UMA CHAMADA ASSINCRONA PARA REGISTRAR E ATUALIZAR A LISTA DOS NOVOS CONTATOS DINAMICOS 
    22992401                // If new dynamic contacts were added, update the autocomplete .... 
    2300                 if(data.new_contacts){ 
     2402                /*if(data.new_contacts){ 
    23012403                        var ar_contacts = data.new_contacts.split(',;'); 
    23022404                        for(var j in ar_contacts){ 
     
    23062408                        } 
    23072409                } 
    2308                 delete_border(ID,'true');  
     2410                var dynamicPersonalContacts = new Array(); 
     2411                var dynamicPersonalGroups = new Array(); 
     2412                var dynamicContacts = new Array(); 
     2413                var dynamicContactList = new Array(); 
     2414 
     2415                */ 
     2416                delete_border(ID,'true'); 
     2417                var arrayTo = content.find(".to-tr").find(".box").clone(); 
     2418                save_dynamic_contacts(arrayTo); 
     2419                var arrayCC = content.find(".cc-tr").find(".box").clone(); 
     2420                save_dynamic_contacts(arrayCC); 
     2421                var arrayCCo = content.find(".cco-tr").find(".box").clone(); 
     2422                save_dynamic_contacts(arrayCCo); 
     2423                cache = new Array(); 
    23092424        } 
    23102425        else{ 
    23112426                if(data == 'Post-Content-Length') 
    23122427                        write_msg(get_lang('The size of this message has exceeded  the limit (%1B).',Element('upload_max_filesize').value)); 
    2313                 else if(data) 
     2428                else if(data){ 
     2429                        var error_mail = $.trim(data.split(":")[data.split(":").length-1]); 
     2430                        var array = content.find(".to-tr").find(".box"); 
     2431                        //$(value).find("input").val() 
     2432                        $.each(array, function(index, value){ 
     2433                                if(error_mail == $(value).find("input").val().match(reComplexEmail)[1]) 
     2434                                        $(value).addClass("invalid-email-box"); 
     2435                        }); 
     2436                        if ( content.find('[name="input_cco"]').length){ 
     2437                                if(content.find(".cco-tr").css("display") != "none"){ 
     2438                                        var array = content.find(".cco-tr").find(".box"); 
     2439                                        $.each(array, function(index, value){ 
     2440                                                if(error_mail == $(value).find("input").val().match(reComplexEmail)[1]) 
     2441                                                        $(value).addClass("invalid-email-box"); 
     2442                                        }); 
     2443                                } 
     2444                        } 
     2445                        if(content.find(".cc-tr").css("display") != "none") 
     2446                        { 
     2447                                var array = content.find(".cc-tr").find(".box"); 
     2448                                $.each(array, function(index, value){ 
     2449                                        if(error_mail == $(value).find("input").val().match(reComplexEmail)[1]) 
     2450                                                $(value).addClass("invalid-email-box"); 
     2451                                });                              
     2452                        }  
    23142453                        write_msg(data); 
    2315                 else 
     2454                }else 
    23162455                        write_msg(get_lang("Connection failed with %1 Server. Try later.", "Web")); 
    23172456                 
     
    23232462        if(!expresso_offline) 
    23242463                connector.hideProgressBar(); 
     2464} 
     2465 
     2466/*Função que grava o destinatário nos contatos dinâmicos*/ 
     2467function save_dynamic_contacts(array){ 
     2468        if(parseInt(preferences.use_dynamic_contacts)){ 
     2469                 
     2470                $.each(array, function(i, value){ 
     2471                        var stop = false; 
     2472                        $.each(dynamicPersonalContacts, function(x, valuex){ 
     2473                                if(valuex.email == $(value).find("input").val().match(reComplexEmail)[1]){ 
     2474                                        stop = true; 
     2475                                        return false; 
     2476                                } 
     2477                        }); 
     2478                        if(!stop){ 
     2479                                var exist = 0; 
     2480                                $.each(dynamicContacts, function(x, valuex){ 
     2481                                        if(valuex.mail == $(value).find("input").val().match(reComplexEmail)[1]){ 
     2482                                                exist = valuex.id; 
     2483                                                return false; 
     2484                                        } 
     2485                                }); 
     2486                                if(exist){ 
     2487                                        REST.put("/dynamiccontact/"+exist, {name: $(value).find("input").val().split('"')[1], mail:$(value).find("input").val().match(reComplexEmail)[1]}); 
     2488                                }else{ 
     2489                                        REST.post("/dynamiccontacts", {name: $(value).find("input").val().split('"')[1], mail:$(value).find("input").val().match(reComplexEmail)[1]}); 
     2490                                } 
     2491                        } 
     2492                }); 
     2493                updateDynamicContact(); 
     2494        } 
    23252495} 
    23262496 
     
    25182688                return; 
    25192689        } 
    2520         stringEmail = content.find('[name="input_to"]').val(); 
    2521          
    2522         if ( content.find('[name="input_cco"]').length) 
    2523                 if(content.find(".cco-tr").css("display") != "none") 
    2524                         stringEmail += content.find('[name="input_cco"]').val() =='' ? "":", "+content.find('[name="input_cco"]').val(); 
     2690        //stringEmail = content.find('[name="input_to"]').val(); 
     2691        var stringEmail = ""; 
     2692        var array = content.find(".to-tr").find(".box"); 
     2693        $.each(array, function(index, value){ 
     2694                stringEmail += $(value).find("input").val() + ","; 
     2695        }); 
     2696        content.find('[name="input_to"]').val(stringEmail); 
     2697        if ( content.find('[name="input_cco"]').length){ 
     2698                if(content.find(".cco-tr").css("display") != "none"){ 
     2699                        var array = content.find(".cco-tr").find(".box"); 
     2700                        $.each(array, function(index, value){ 
     2701                                stringEmail += $(value).find("input").val() + ","; 
     2702                        }); 
     2703                        content.find('[name="input_cco"]').val(stringEmail); 
     2704                } 
     2705        } 
    25252706                         
    25262707        if(content.find(".cc-tr").css("display") != "none") 
    2527                 stringEmail += content.find('[name="input_cc"]').val() =='' ? "":", "+content.find('[name="input_cc"]').val(); 
     2708        { 
     2709                var array = content.find(".cc-tr").find(".box"); 
     2710                $.each(array, function(index, value){ 
     2711                        stringEmail += $(value).find("input").val() + ","; 
     2712                }); 
     2713                content.find('[name="input_cc"]').val(stringEmail); 
     2714        } 
    25282715                 
    25292716        if (expresso_offline) { 
     
    26012788                              if( data ) 
    26022789                                  show_msg( data ); 
    2603                           },  
    2604                           beforeSend: function( jqXHR, settings ){  
    2605                                 connector.showProgressBar();  
    2606                           },  
    2607                           complete: function( jqXHR, settings ){  
    2608                                 connector.hideProgressBar(); 
     2790                          }, 
     2791                          beforeSend: function( jqXHR, settings ){ 
     2792                                connector.showProgressBar(); 
     2793                          }, 
     2794                          complete: function( jqXHR, settings ){ 
     2795                                connector.hideProgressBar(); 
    26092796                          } 
    26102797 
     
    26312818       autoSaveControl.status[border_id] = true; 
    26322819   /////////////////////////////////////////// 
    2633   
     2820    var content = $("#content_id_"+border_id); 
     2821         
     2822        var stringEmail = ""; 
     2823        var array = content.find(".to-tr").find(".box"); 
     2824        $.each(array, function(index, value){ 
     2825                stringEmail += $(value).find("input").val() + ","; 
     2826        }); 
     2827        content.find('[name="input_to"]').val(stringEmail); 
     2828        stringEmail = ""; 
     2829        if ( content.find('[name="input_cco"]').length){ 
     2830                if(content.find(".cco-tr").css("display") != "none"){ 
     2831                        var array = content.find(".cco-tr").find(".box"); 
     2832                        $.each(array, function(index, value){ 
     2833                                stringEmail += $(value).find("input").val() + ","; 
     2834                        }); 
     2835                        content.find('[name="input_cco"]').val(stringEmail); 
     2836                } 
     2837        } 
     2838         
     2839        stringEmail = "";        
     2840        if(content.find(".cc-tr").css("display") != "none") 
     2841        { 
     2842                var array = content.find(".cc-tr").find(".box"); 
     2843                $.each(array, function(index, value){ 
     2844                        stringEmail += $(value).find("input").val() + ","; 
     2845                }); 
     2846                content.find('[name="input_cc"]').val(stringEmail); 
     2847        } 
     2848         
    26342849   var idJavascript = saveBorderError[border_id]; 
    26352850    
     
    28093024                                                        set_msg_as_read(results_search_messages, false, true); 
    28103025                                                Element("check_box_message_" + msgs_to_set[i]).checked = false; 
     3026                                                 
     3027                                                // remove a flag $FilteredMessage da mensagem ao ser marcada como lida   
     3028                                                $.each(fromRules, function(index, value) { 
     3029                                                        if(value == folder){ 
     3030                                                                cExecute ("$this.imap_functions.removeFlagMessagesFilter&folder="+folder+"&msg_number="+msgs_to_set, function(){});  
     3031                                                                return false; 
     3032                                                        } 
     3033                                                });      
     3034                                                 
    28113035                                                break; 
    28123036                                        case "flagged": 
     
    28333057        else 
    28343058                folder = Element("input_folder_"+msgs_to_set+"_r").value; 
    2835  
     3059         
    28363060        if (msgs_to_set) 
    28373061                $.ajax({ 
     
    28463070                              if( data ) 
    28473071                                  handler_set_messages_flag( data ); 
    2848                           },  
    2849                           beforeSend: function( jqXHR, settings ){  
    2850                                 connector.showProgressBar();  
    2851                           },  
    2852                           complete: function( jqXHR, settings ){  
    2853                                 connector.hideProgressBar(); 
     3072                          }, 
     3073                          beforeSend: function( jqXHR, settings ){ 
     3074                                connector.showProgressBar(); 
     3075                          }, 
     3076                          complete: function( jqXHR, settings ){ 
     3077                                connector.hideProgressBar(); 
    28543078                          } 
    28553079 
     
    29123136                      if( data ) 
    29133137                          handler_set_messages_flag( data ); 
    2914                    },  
    2915                    beforeSend: function( jqXHR, settings ){  
    2916                                  connector.showProgressBar();  
    2917                    },  
    2918                    complete: function( jqXHR, settings ){  
    2919                                  connector.hideProgressBar();  
    2920                    } 
     3138                  }, 
     3139                  beforeSend: function( jqXHR, settings ){ 
     3140                                connector.showProgressBar(); 
     3141                  }, 
     3142                  complete: function( jqXHR, settings ){ 
     3143                                connector.hideProgressBar(); 
     3144                   } 
    29213145 
    29223146        }); 
     
    30083232        seekDot = (is_ie ? /width=24/gi : /width="24"/gi); 
    30093233        //thead = thead.replace(seekDot, "style='display:none'");  
    3010         var thead = "<tr class=\"message_header\"> <td width=\"3%\"></td><td width=\"2%\"></td><td width=\"1%\"></td><td width=\"1%\"></td><td width=\"1%\"></td><td width=\"1%\"></td><td width=\"2%\"></td><td width=\"2%\"></td><td width=\"2%\"></td><td id=\"message_header_SORTFROM_0\" class=\"th_resizable\" align=\"left\" width=\"20%\">De</td><td id=\"message_header_SORTSUBJECT_0\" class=\"th_resizable\" align=\"left\" width=\"*\">Assunto</td><td id=\"message_header_SORTARRIVAL_0\" class=\"th_resizable\" align=\"center\" width=\"11%\"><b>Data</b><img src=\"templates/default/images/arrow_descendant.gif\"></td><td id=\"message_header_SORTSIZE_0\" class=\"th_resizable\" align=\"left\" width=\"11%\">Tamanho</td></tr>"; 
     3234        var thead = "<tr class=\"message_header\"> <td width=\"3%\"></td><td width=\"2%\"></td><td width=\"1%\"></td><td width=\"1%\"></td><td width=\"1%\"></td><td width=\"1%\"></td><td width=\"2%\"></td><td width=\"2%\"></td><td width=\"2%\"></td><td id=\"message_header_SORTFROM_0\" class=\"th_resizable\" align=\"left\" width=\"20%\">De</td><td id=\"message_header_SORTSUBJECT_0\" class=\"th_resizable\" align=\"left\" width=\"*\">Assunto</td><td id=\"message_header_SORTARRIVAL_0\" class=\"th_resizable\" align=\"center\" width=\"11%\"><b>Data</b><img src=\"templates/default/images/arrow_descendant.gif\"></td><td id=\"message_header_SORTSIZE_0\" class=\"th_resizable\" align=\"left\" width=\"11%\">Tamanho</td></tr>"; 
    30113235        tbody = tbody.replace(seekDot, "style='display:none'"); 
    30123236        seekDot = (is_ie ? /width=16/gi : /width="16"/gi); 
     
    38124036                                        createDialog(data, true); 
    38134037                                 
    3814                 },  
    3815                 beforeSend: function( jqXHR, settings ){  
    3816                                         connector.showProgressBar();  
    3817                                 },  
    3818                                 complete: function( jqXHR, settings ){  
    3819                                         connector.hideProgressBar();  
    3820                                 }  
     4038                }, 
     4039                beforeSend: function( jqXHR, settings ){ 
     4040                                        connector.showProgressBar(); 
     4041                                }, 
     4042                                complete: function( jqXHR, settings ){ 
     4043                                        connector.hideProgressBar(); 
     4044                                } 
    38214045            }); 
    3822          
     4046                         
    38234047                } 
    38244048                else 
     
    39194143                        } 
    39204144                        cExecute("$this.imap_functions.get_folders_list&onload=true", update_menu); 
    3921                 },  
    3922                 beforeSend: function( jqXHR, settings ){  
    3923                         connector.showProgressBar();  
    3924                 },  
    3925                   complete: function( jqXHR, settings ){  
    3926                         connector.hideProgressBar(); 
     4145                }, 
     4146                beforeSend: function( jqXHR, settings ){ 
     4147                        connector.showProgressBar(); 
     4148                }, 
     4149                  complete: function( jqXHR, settings ){ 
     4150                        connector.hideProgressBar(); 
    39274151                } 
    39284152        }); 
     
    40434267}; 
    40444268 
     4269function truncate(text, size){ 
     4270        var result = text; 
     4271        if(text.length > size){ 
     4272                result = text.substring(0,size) + '...'; 
     4273        } 
     4274        return result; 
     4275} 
     4276 
    40454277DataLayer.links('message'); 
    40464278DataLayer.poll('message',30); 
  • branches/2.4/expressoMail1_2/js/messages_controller.js

    r6472 r6754  
    8888                if (msgs_number == 'selected') 
    8989                        msgs_number = get_selected_messages(); 
     90                 
    9091                if(currentTab != 0 && currentTab.indexOf("search_")  >= 0){ 
    9192                        var content_search = document.getElementById('content_id_'+currentTab); 
  • branches/2.4/expressoMail1_2/js/rich_text_editor.js

    r6716 r6754  
    200200         
    201201        $(".cke_editor").css("white-space", "normal"); 
    202         
    203   if(typeof(preferences.font_size_editor) !== 'undefined')  
    204       $(editor.document.$.body).css("font-size",preferences.font_size_editor);  
    205   if(typeof(preferences.font_family_editor) !== 'undefined')  
    206       $(editor.document.$.body).css("font-family",preferences.font_family_editor);  
    207           
    208   RichTextEditor.editorReady = true;  
    209   }     
     202 
     203    if(typeof(preferences.font_size_editor) !== 'undefined') 
     204        $(editor.document.$.body).css("font-size",preferences.font_size_editor); 
     205    if(typeof(preferences.font_family_editor) !== 'undefined') 
     206        $(editor.document.$.body).css("font-family",preferences.font_family_editor); 
     207 
     208    RichTextEditor.editorReady = true; 
     209    }    
    210210} 
    211211 
     
    220220            height -= 330; 
    221221            $('#body_'+id).height(height); 
    222             div.html($('#body_'+id).val());  
    223             /*Remove as tags html, tabulações e quebras de linha quando for utilizado o editor de texto simples*/  
    224             div.html($.trim(div.text().replace(/[\t]+/g, '').replace(/[\n]+/g, '\n')));  
    225             /*Insere o texto sem formatação no textarea*/  
     222            div.html($('#body_'+id).val()); 
     223            /*Remove as tags html, tabulações e quebras de linha quando for utilizado o editor de texto simples*/ 
     224            div.html($.trim(div.text().replace(/[\t]+/g, '').replace(/[\n]+/g, '\n'))); 
     225            /*Insere o texto sem formatação no textarea*/ 
    226226            $('#body_'+id).val(div.text()); 
    227  
     227             
    228228            $('#body_'+id).keydown(function(event) { 
    229229                away = false; 
     
    237237      else{ 
    238238          RichTextEditor.active('body_'+id, id); 
    239           /*Insere somente quebras de linha para que o texto convertido não fique todo em uma linha só*/  
    240           div.html($('#body_'+id).val().replace(/[\n]+/g, '<br>'));  
    241           $('#body_'+id).val(div.html());  
     239          /*Insere somente quebras de linha para que o texto convertido não fique todo em uma linha só*/ 
     240          div.html($('#body_'+id).val().replace(/[\n]+/g, '<br>')); 
     241          $('#body_'+id).val(div.html()); 
    242242      } 
    243243} 
     
    253253cRichTextEditor.prototype.setData = function (id,data){ 
    254254     
    255     if(this.plain[id.replace('body_','')] === true)  
    256             $('#'+id).val(data);  
    257 else  
    258     CKEDITOR.instances[id].setData(data); 
     255        if(this.plain[id.replace('body_','')] === true) 
     256                $('#'+id).val(data); 
     257    else 
     258        CKEDITOR.instances[id].setData(data); 
    259259} 
    260260cRichTextEditor.prototype.setInitData = function (id,data,reply,recursion, callback){ 
  • branches/2.4/expressoMail1_2/js/search.js

    r6653 r6754  
    2020         
    2121        //Monta os forms dentro da janela; 
    22         searchE.prototype.showForms = function(value) 
     22        searchE.prototype.showForms = function(value, data) 
    2323        { 
    2424                if( trim(value) != "" ) 
     
    3939                        var div         = document.createElement("div"); 
    4040                        var args        = null; 
    41          
     41                         
    4242                        args =  
    4343                        { 
     
    6363                                "Old"                                           : get_lang('Old'), 
    6464                                "Search_the_messages_in_these_folders" : get_lang('Search the messages in these folders'), 
    65                                 "In_all_the_folders"            : get_lang('In all the folders') 
    66                         } 
    67                          
     65                                "In_all_the_folders"            : get_lang('In all the folders'), 
     66                                "From_value" : (data != "undefined" ? data : "") 
     67                        } 
     68                                 
    6869                        $(div).html(DataLayer.render("./templates/default/searchMails.ejs", args )); 
    6970                        div.setAttribute( "style","overflow:hidden"); 
     
    515516                                td.id = "td_message_answered_"+uid_msg; 
    516517                                if (aux.flag.match('X')) 
    517                                         td1 = '<img src=templates/'+template+'/images/forwarded.gif title="'+get_lang('Forwarded')+'">'; 
     518                                        td1 = '<img src=templates/'+template+'/images/forwarded.png title="'+get_lang('Forwarded')+'">'; 
    518519                                else 
    519520                                        if (aux.flag.match('A')) 
    520                                                 td1 = '<img src=templates/'+template+'/images/answered.gif title="'+get_lang('Answered')+'">'; 
     521                                                td1 = '<img src=templates/'+template+'/images/answered.png title="'+get_lang('Answered')+'">'; 
    521522                                        else 
    522523                                                td1 = ''; 
     
    585586                                                         
    586587                                                        if (fail) { 
    587                                                             var isCurrentFolder = current_folder == mailbox ? '#td_message_followup_' + messageClickedId + ', ' : '';     
    588                                                             $(isCurrentFolder + 'tr[role="'+messageClickedId+'_'+mailbox+'"] #td_message_followup_search_' + messageClickedId).find(".flag-edited").css("background", "#CCCCCC");  
    589                                                             MsgsCallbackFollowupflag[fail]();  
    590                                                             return false; 
     588                                                             
     589                                                            var isCurrentFolder = current_folder == mailbox ? '#td_message_followup_' + messageClickedId + ', ' : '';    
     590                                                            $(isCurrentFolder + 'tr[role="'+messageClickedId+'_'+mailbox+'"] #td_message_followup_search_' + messageClickedId).find(".flag-edited").css("background", "#CCCCCC"); 
     591                                                            MsgsCallbackFollowupflag[fail](); 
     592                                                            return false; 
    591593                                                        } 
    592594                                                         
     
    846848                        scrollSpeed: 100, 
    847849                        containment: "#divAppbox" 
    848                 }).bind("contextmenu", function(event){  
     850                }).bind("contextmenu", function(event){ 
    849851                        if(event.button == 2) 
    850852                                if($(this).find("input:checkbox").attr("checked") != "checked"){ 
     
    17411743                                        if( url.length ){ 
    17421744                                            xhr = $.ajax({ 
    1743                                                 url: 'controller.php?action='+url.shift(),  
    1744                                                 async: true,  
    1745                                                 success: function(data){  
    1746                                                         handler(data);  
    1747                                                 },  
    1748                                                 beforeSend: function( jqXHR, settings ){  
    1749                                                         connector.showProgressBar();  
    1750                                                 },  
    1751                                                   complete: function( jqXHR, settings ){  
    1752                                                         connector.hideProgressBar();  
    1753                                                 }  
    1754                                             }); 
     1745                                                        url: 'controller.php?action='+url.shift(), 
     1746                                                        async: true, 
     1747                                                        success: function(data){ 
     1748                                                                handler(data); 
     1749                                                        }, 
     1750                                                        beforeSend: function( jqXHR, settings ){ 
     1751                                                                connector.showProgressBar(); 
     1752                                                        }, 
     1753                                                          complete: function( jqXHR, settings ){ 
     1754                                                                connector.hideProgressBar(); 
     1755                                                        } 
     1756                                                }); 
    17551757                                        }else{ 
    17561758                                            xhr = false; 
     
    17631765                                url: 'controller.php?action='+url.shift(), 
    17641766                                async: true, 
    1765                                 success: function(data){handler(data);},  
    1766                                 beforeSend: function( jqXHR, settings ){  
    1767                                         connector.showProgressBar();  
    1768                                 },  
    1769                                   complete: function( jqXHR, settings ){  
    1770                                         connector.hideProgressBar();  
    1771                                 }  
     1767                                success: function(data){handler(data);}, 
     1768                                beforeSend: function( jqXHR, settings ){ 
     1769                                        connector.showProgressBar(); 
     1770                                }, 
     1771                                  complete: function( jqXHR, settings ){ 
     1772                                        connector.hideProgressBar(); 
     1773                                } 
    17721774                            }); 
    17731775                    } 
  • branches/2.4/expressoMail1_2/js/sharemailbox.js

    r6600 r6754  
    217217                                                                                                Element('em_input_sendAcl').disabled    = true; 
    218218 
    219                                                                                                 //$("#sharemailbox").empty();  
    220                                                                                                 //$("#sharemailbox").dialog("destroy");  
    221                                                                                                 $("#sharemailbox").parents().find(".ui-icon-closethick").trigger("click");  
     219                                                                                                //$("#sharemailbox").empty(); 
     220                                                                                                //$("#sharemailbox").dialog("destroy"); 
     221                                                                                                $("#sharemailbox").parents().find(".ui-icon-closethick").trigger("click"); 
    222222                                                                                                 
    223223                                                                                                write_msg(get_lang('Shared options saved with success')); 
  • branches/2.4/expressoMail1_2/js/shortcut.js

    r6727 r6754  
    327327shortcut.add('up', function(e) 
    328328        { 
     329                 
    329330                var search_in_focus = false; 
    330331                var search_win = document.getElementById( 'window_QuickCatalogSearch' ); 
     
    334335                if ( !search_in_focus && currentTab == 0 ) 
    335336                    select_msg('null', 'up'); 
    336                 // Ao usuario pressionar o 'up' em uma outra aba, não pode ser removido o 'up'.  
    337                             else{}  
    338                // shortcut.remove('up');  
     337                // Ao usuario pressionar o 'up' em uma outra aba, não pode ser removido o 'up'. 
     338                                else{} 
     339                   // shortcut.remove('up'); 
    339340                                e.stopPropagation(); 
    340341                                e.preventDefault(); 
     
    351352                if ( !search_in_focus && currentTab == 0 ) 
    352353                    select_msg('null', 'down'); 
    353                 // Ao usuario pressionar o 'down' em uma outra aba, não pode ser removido o 'down'.  
    354                 else{}  
     354                                // Ao usuario pressionar o 'down' em uma outra aba, não pode ser removido o 'down'.  
     355                else{} 
    355356                   // shortcut.remove('down'); 
    356357                                e.stopPropagation(); 
     
    519520 
    520521        if (msg_number != 'null') { 
    521  
     522         
    522523                if(Element(msg_number)){ 
    523524                        unselect_all_msgs(); 
    524525                        add_className(Element(msg_number), 'selected_shortcut_msg'); 
    525526                } 
    526  
    527         }else{ 
     527                 
     528        } else { 
    528529                var scrollMain = Element('divScrollMain_0'); 
    529530                var selection_size = parseInt(preferences.line_height) + 10;  
    530                 if( keyboard_action == 'down') {  
    531                                           
    532                 if(!Element("chk_box_select_all_messages").checked){  
    533                           
    534                         $("#divScrollMain_0").find("#tbody_box").find("tr").each(function(){  
    535                           
    536                                 if($(this).hasClass("selected_shortcut_msg") && $(this).next().length){  
    537                                         $(this).next().addClass("selected_shortcut_msg");  
    538                                         $(this).removeClass("selected_shortcut_msg");  
    539                                         return false;  
    540                                 }  
    541                                   
    542                         });  
    543                           
    544                 } else {  
    545                   
    546                         $("#divScrollMain_0").find("#tbody_box").find("tr").each(function(){  
    547                                   
    548                                 if($(this).hasClass("current_selected") && $(this).next().length){  
    549                                         $(this).removeClass("current_selected");  
    550                                     $(this).removeClass("selected_shortcut_msg");  
    551                                         $(this).next().addClass("current_selected");  
    552                                         $(this).next().addClass("selected_shortcut_msg");  
    553                                         return false;  
    554                                 }  
    555                           
    556                         });  
    557                         $("#divScrollMain_0").find("#tbody_box").find("tr").each(function(){  
    558                                                 if(!$(this).hasClass("current_selected"))  
    559                                                         $(this).removeClass("selected_shortcut_msg");  
    560                         }); 
     531                 
     532                        if( keyboard_action == 'down') { 
     533                         
     534                                if(!Element("chk_box_select_all_messages").checked){ 
     535                                         
     536                                        $("#divScrollMain_0").find("#tbody_box").find("tr").each(function(){ 
     537                                         
     538                                                if($(this).hasClass("selected_shortcut_msg") && $(this).next().length){ 
     539                                                        $(this).next().addClass("selected_shortcut_msg"); 
     540                                                        $(this).removeClass("selected_shortcut_msg"); 
     541                                                        return false; 
     542                                                } 
     543                                                 
     544                                        }); 
     545                                         
     546                                } else { 
     547                                 
     548                                        $("#divScrollMain_0").find("#tbody_box").find("tr").each(function(){ 
     549                                                 
     550                                                if($(this).hasClass("current_selected") && $(this).next().length){ 
     551                                                        $(this).removeClass("current_selected"); 
     552                                                        $(this).removeClass("selected_shortcut_msg"); 
     553                                                        $(this).next().addClass("current_selected"); 
     554                                                        $(this).next().addClass("selected_shortcut_msg"); 
     555                                                        return false; 
     556                                                } 
     557                                         
     558                                        }); 
     559                                        $("#divScrollMain_0").find("#tbody_box").find("tr").each(function(){ 
     560                                                                if(!$(this).hasClass("current_selected")) 
     561                                                                        $(this).removeClass("selected_shortcut_msg"); 
     562                                        }); 
    561563                                } 
    562564                         
    563                         } else if( keyboard_action == 'up') {  
    564                                           
    565                     if(!Element("chk_box_select_all_messages").checked){  
    566                       
    567                             $("#divScrollMain_0").find("#tbody_box").find("tr").each(function(){  
    568                               
    569                                     if($(this).hasClass("selected_shortcut_msg") && $(this).prev().length){  
    570                                                     $(this).prev().addClass("selected_shortcut_msg");  
    571                                                     $(this).removeClass("selected_shortcut_msg");  
    572                                                     return false;  
    573                                     }  
    574                                       
    575                             });  
    576                               
    577                     } else {  
    578                               
    579                             $("#divScrollMain_0").find("#tbody_box").find("tr").each(function(){  
    580                                       
    581                                     if($(this).hasClass("current_selected") && $(this).prev().length){  
    582                                             $(this).removeClass("current_selected");  
    583                                             $(this).removeClass("selected_shortcut_msg");  
    584                                             $(this).prev().addClass("current_selected");  
    585                                             $(this).prev().addClass("selected_shortcut_msg");  
    586                                             return false;  
    587                                     }  
    588                               
    589                             });  
    590                             $("#divScrollMain_0").find("#tbody_box").find("tr").each(function(){  
    591                                                     if(!$(this).hasClass("current_selected"))  
    592                                                             $(this).removeClass("selected_shortcut_msg");  
    593                             }); 
    594                                         } 
     565                        } else if( keyboard_action == 'up') { 
     566                         
     567                                if(!Element("chk_box_select_all_messages").checked){ 
     568                                 
     569                                        $("#divScrollMain_0").find("#tbody_box").find("tr").each(function(){ 
     570                                         
     571                                                if($(this).hasClass("selected_shortcut_msg") && $(this).prev().length){ 
     572                                                                $(this).prev().addClass("selected_shortcut_msg"); 
     573                                                                $(this).removeClass("selected_shortcut_msg"); 
     574                                                                return false; 
     575                                                } 
     576                                                 
     577                                        }); 
     578                                         
     579                                } else { 
     580                                         
     581                                        $("#divScrollMain_0").find("#tbody_box").find("tr").each(function(){ 
     582                                                 
     583                                                if($(this).hasClass("current_selected") && $(this).prev().length){ 
     584                                                        $(this).removeClass("current_selected"); 
     585                                                        $(this).removeClass("selected_shortcut_msg"); 
     586                                                        $(this).prev().addClass("current_selected"); 
     587                                                        $(this).prev().addClass("selected_shortcut_msg"); 
     588                                                        return false; 
     589                                                } 
     590                                         
     591                                        }); 
     592                                        $("#divScrollMain_0").find("#tbody_box").find("tr").each(function(){ 
     593                                                                if(!$(this).hasClass("current_selected")) 
     594                                                                        $(this).removeClass("selected_shortcut_msg"); 
     595                                        }); 
     596                                 
    595597                                } 
     598                   
     599                        } 
    596600                return true; 
    597601        } 
  • branches/2.4/expressoMail1_2/setup/default_records.inc.php

    r6672 r6754  
    11<?php 
     2  /**************************************************************************\ 
     3  * eGroupWare - Setup                                                       * 
     4  * http://www.egroupware.org                                                * 
     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 
    212                        $oProc->query("ALTER TABLE expressomail_message_followupflag ADD CONSTRAINT expressomail_message_followupflag_followupflag_id_fkey FOREIGN KEY (followupflag_id) REFERENCES expressomail_followupflag (id);"); 
    313                         
     
    1121                        /* Seta o valor padrão para a configuração de número máximo de marcadores */ 
    1222                        $oProc->query("INSERT INTO phpgw_config(config_app, config_name, config_value) VALUES ('expressoMail1_2', 'expressoMail_limit_labels', 20);"); 
    13                         $oProc->query("INSERT INTO phpgw_config(config_app, config_name, config_value) VALUES ('expressoMail1_2', 'allow_hidden_copy', 'True');");  
    14  
     23                        $oProc->query("INSERT INTO phpgw_config(config_app, config_name, config_value) VALUES ('expressoMail1_2', 'allow_hidden_copy', 'True');"); 
     24                         
    1525                        /* Registra o hook de validação do administrador*/ 
    1626                        $oProc->query("INSERT INTO phpgw_hooks( \"hook_appname\", \"hook_location\", \"hook_filename\") VALUES ('expressoMail1_2', 'config_validate', 'hook_config_validate.inc.php')"); 
    1727 
    18                  
     28                        /* Cria um indice unico para um owner e mail para nao ocorrer duplicidade em e-mails para um mesmo owner  */ 
     29                        $oProc->query("ALTER TABLE expressomail_dynamic_contact ADD CONSTRAINT owner_mail UNIQUE (owner, mail)"); 
    1930?> 
  • branches/2.4/expressoMail1_2/setup/phpgw_pt-br.lang

    r6715 r6754  
    1616Add user into my IM     expressoMail1_2 pt-br   Adicionar no meu IM 
    1717After store email in your local computer delete it from server  expressoMail1_2 pt-br   Depois de guardar e-mail no seu computador local, excluí-lo do servidor 
     18Alert message filter by sender  expressoMail1_2 pt-br   Alertar ao receber mensagens filtradas por remetente 
    1819all     expressoMail1_2 pt-br   Todas 
    1920All messages are successfully unarchived        expressoMail1_2 pt-br   Mensagens desarquivadas com sucesso 
     
    9495Contact added successfully.     expressoMail1_2 pt-br   Contato adicionado com sucesso. 
    9596Connection failed with %1 Server. Try later.    expressoMail1_2 pt-br   Ocorreu uma falha de comunicação com o servidor de %1. Tente mais tarde. 
    96 Convert this message into plain text can make parts of it are removed. Continue?        expressoMail1_2 pt-br   Converter esta mensagem para texto sem formatação pode fazer com que partes dela sejam removidas. Deseja continuar?  
     97Convert this message into plain text can make parts of it are removed. Continue?        expressoMail1_2 pt-br   Converter esta mensagem para texto sem formatação pode fazer com que partes dela sejam removidas. Deseja continuar? 
    9798Couldn't verify if certificate was revoked.(CD-01)      expressoMail1_2 pt-br   A lista de certificados revogados não foi encontrada.(CD-01) 
    9899Couldn't verify if certificate was revoked.(CD-02)      expressoMail1_2 pt-br   Não foi possível verificar se o certificado está revogado.(CD-02) 
     
    562563There is not %1 folder, Expresso is creating it for you... Please, repeat your request later.   expressoMail1_2 pt-br   Pasta %1 inexistente, Expresso criará para você. Contudo por favor repita a operação em seguida. 
    563564There's an action processing. Do you want abort it?     expressoMail1_2 pt-br   Existe uma ação que ainda está sendo processada. Suspender ação? 
     565The filter is active for alerts expressoMail1_2 pt-br   O filtro está ativo para alertas 
    564566The results were found in the Global Catalog    expressoMail1_2 pt-br   Ocorrências encontradas no Catálogo Geral 
    565567The selected folder is empty.   expressoMail1_2 pt-br   A pasta selecionada está vazia. 
     
    901903 will be removed. This action cannot be undone. Want to continue?       expressoMail1_2 pt-br    serão removidas. Essa ação não poderá ser desfeita. Deseja continuar? 
    902904Message size greateruler than allowed (Default rule)    expressoMail1_2 pt-br    Tamanho da mensagem excede o limite de tamanho configurado pelo administrador 
     905You have an archived message:   expressoMail1_2 pt-br   Você tem uma mensagem arquivada: 
     906You have %1 messages archived:  expressoMail1_2 pt-br   Você tem %1 mensagens arquivadas: 
     907Filter by sender        expressoMail1_2 pt-br   Filtro por Remetente 
     908Follow ups      expressoMail1_2 pt-br   Sinalizadas 
     909Done    expressoMail1_2 pt-br   Concluídas  
     910If more than one criterion for the filter, the "Meeting all the criteria" must be selected      expressoMail1_2 pt-br   Se houver mais que um critério para o filtro, a opção "Atender a todos os critérios" deve estar selecionada 
     911The filter should be set as a criteria "Sender" and action "Archive folder"     expressoMail1_2 pt-br   O filtro deve ter como critério definido "Remetente" e ação "Arquivar na pasta" 
     912Filter with alert       expressoMail1_2 pt-br   Filtro com alerta 
     913Group contacts  expressoMail1_2 pt-br   Contatos do grupo 
     914Remove recipient        expressoMail1_2 pt-br   Remover destinatário 
     915Quick search of messages        expressoMail1_2 pt-br   Busca rápida de mensagens 
     916Search messages of ...  expressoMail1_2 pt-br   Busca mensagens de ... 
     917Telephone       expressoMail1_2 pt-br   Telefone 
     918And more %1 contact     expressoMail1_2 pt-br   E mais %1 contato 
     919Impossible editing this contact, but it's possible to remove it expressoMail1_2 pt-br   Impossível editar este contato, mas é possível removê-lo 
     920The contact was moved from recent contacts to personal contacts successful.     expressoMail1_2 pt-br   O Contato foi movido dos contatos recentes para os contatos pessoais com sucesso. 
  • branches/2.4/expressoMail1_2/setup/setup.inc.php

    r6255 r6754  
    1313$setup_info['expressoMail1_2']['name'] = 'expressoMail1_2'; 
    1414$setup_info['expressoMail1_2']['title'] = 'Expresso Mail'; 
    15 $setup_info['expressoMail1_2']['version'] = '2.4.7'; 
     15$setup_info['expressoMail1_2']['version'] = '2.4.8'; 
    1616$setup_info['expressoMail1_2']['app_order'] = 2; 
    17 $setup_info['expressoMail1_2']['tables'][] = 'phpgw_expressomail_contacts'; 
    1817$setup_info['expressoMail1_2']['tables'][] = 'phpgw_certificados'; 
    1918 
     
    2221$setup_info['expressoMail1_2']['tables'][] = 'expressomail_message_followupflag'; 
    2322$setup_info['expressoMail1_2']['tables'][] = 'expressomail_followupflag'; 
     23$setup_info['expressoMail1_2']['tables'][] = 'expressomail_dynamic_contact'; 
    2424 
    2525 
     
    4848    'versions' => Array('2.4') 
    4949); 
     50 
     51$setup_info['expressoMail1_2']['depends'][] = array( 
     52    'appname' => 'rest', 
     53    'versions' => Array('1.0') 
     54); 
     55 
    5056?> 
  • branches/2.4/expressoMail1_2/setup/tables_current.inc.php

    r5981 r6754  
    1010        \**************************************************************************/ 
    1111        $phpgw_baseline = array( 
    12                 'phpgw_expressomail_contacts' => array( 
     12                'expressomail_dynamic_contact' => array( 
    1313                        'fd' => array( 
    14                                 'id_owner' => array( 'type' => 'int', 'precision' => 8, 'nullable' => false), 
    15                                 'data' => array( 'type' => 'text') 
     14                                'id' => array('type' => 'auto','nullable' => False), 
     15                                'owner' => array('type' => 'int','precision' => '16','nullable' => False), 
     16                                'name' => array('type' => 'varchar','precision' => '100','nullable' => true), 
     17                                'mail' => array('type' => 'varchar','precision' => '100','nullable' => False), 
     18                                'number_of_messages' => array('type' => 'int','precision' => '16','nullable' => False), 
     19                                'timestamp' => array('type' => 'int','precision' => '16','nullable' => False), 
    1620                        ), 
    17                         'pk' => array('id_owner'), 
     21                        'pk' => array('id'), 
    1822                        'fk' => array(), 
    1923                        'ix' => array(), 
    2024                        'uc' => array() 
    2125                ), 
     26                 
    2227        'phpgw_certificados' => array( 
    2328            'fd' => array( 
  • branches/2.4/expressoMail1_2/setup/tables_update.inc.php

    r6255 r6754  
    267267            return $GLOBALS['setup_info']['expressoMail1_2']['currentver']; 
    268268        } 
    269          
     269 
     270        $test[] = '2.4.7'; 
     271        function expressoMail1_2_upgrade2_4_7() { 
     272                $oProc = $GLOBALS['phpgw_setup']->oProc; 
     273 
     274                //Criando nova tabela de contatos dinamicos 
     275                $oProc->CreateTable('expressomail_dynamic_contact',array( 
     276                        'fd' => array( 
     277                                'id' => array('type' => 'auto','nullable' => False), 
     278                                'owner' => array('type' => 'int','precision' => '16','nullable' => False), 
     279                                'name' => array('type' => 'varchar','precision' => '100','nullable' => true), 
     280                                'mail' => array('type' => 'varchar','precision' => '100','nullable' => False), 
     281                                'number_of_messages' => array('type' => 'int','precision' => '16','nullable' => False), 
     282                                'timestamp' => array('type' => 'int','precision' => '16','nullable' => False), 
     283                        ), 
     284                        'pk' => array('id'), 
     285                        'fk' => array(), 
     286                        'ix' => array(), 
     287                        'uc' => array() 
     288                        ) 
     289                ); 
     290 
     291                /* Cria um indice unico para um owner e mail para nao ocorrer duplicidade em e-mails para um mesmo owner  */ 
     292                $oProc->query("ALTER TABLE expressomail_dynamic_contact ADD CONSTRAINT owner_mail UNIQUE (owner, mail)"); 
     293 
     294                //Migra dados antigos para nova tabela 
     295                $oProc->query('SELECT * FROM phpgw_expressomail_contacts'); 
     296                $return = array(); 
     297                while($oProc->next_record()) 
     298                        $return[$oProc->f('id_owner')] = $oProc->f('data'); 
     299 
     300                foreach ($return as $owner => &$value) { 
     301                        $contacts = unserialize($value); 
     302                        foreach ($contacts as &$contact) { 
     303                                $info = explode('#', $contact['email']); 
     304                                $oProc->query("INSERT INTO expressomail_dynamic_contact (owner, name ,mail , number_of_messages ,timestamp) values ('".$owner."', '".$info[0]."', '".$info[1]."', 1, '".$contact['timestamp']."');"); 
     305                        } 
     306                } 
     307 
     308                //Deleta tabela antiga 
     309                $oProc->DropTable('phpgw_expressomail_contacts'); 
     310 
     311                $GLOBALS['setup_info']['expressoMail1_2']['currentver'] = '2.4.8'; 
     312            return $GLOBALS['setup_info']['expressoMail1_2']['currentver']; 
     313        } 
    270314?> 
  • branches/2.4/expressoMail1_2/templates/default/config.tpl

    r5988 r6754  
    104104    </td> 
    105105    </tr> 
    106     <tr bgcolor="{row_off}"> 
     106    <tr bgcolor="{row_on}"> 
    107107    <td>{lang_imap_max_folders}:</td> 
    108108    <td> 
     
    110110    </td> 
    111111    </tr> 
    112     <tr bgcolor="{row_on}"> 
     112    <tr bgcolor="{row_off}"> 
    113113    <td>{lang_Max_attachment_size}</td> 
    114114    <td> 
     
    118118    </td> 
    119119    </tr> 
    120         <tr bgcolor="{row_off}">  
     120        <tr bgcolor="{row_on}">  
    121121            <td>{lang_allow_hidden_copy}</td>  
    122122            <td>  
     
    133133    </td> 
    134134    </tr> 
    135         <tr bgcolor="{row_off}"> 
     135        <tr bgcolor="{row_on}"> 
    136136        <td>{lang_gears_firefox_windows_url}</td> 
    137137        <td> 
     
    139139        </td> 
    140140    </tr> 
    141     <tr bgcolor="{row_on}"> 
     141    <tr bgcolor="{row_off}"> 
    142142        <td>{lang_gears_firefox_linux_url}</td> 
    143143        <td> 
     
    145145        </td> 
    146146    </tr> 
    147    <tr bgcolor="{row_off}"> 
     147   <tr bgcolor="{row_on}"> 
    148148        <td>{lang_gears_ie_url}</td> 
    149149        <td> 
     
    151151        </td> 
    152152    </tr> 
    153     <tr bgcolor="{row_on}"> 
     153    <tr bgcolor="{row_off}"> 
    154154    <td>{lang_Do_you_want_to_use_x_origin_in_source_menssage?}</td> 
    155155    <td> 
     
    160160    </td> 
    161161    </tr> 
    162          <tr bgcolor="{row_off}"> 
     162         <tr bgcolor="{row_on}"> 
    163163                <td>{lang_Number_max_of_labels}</td> 
    164164                <td> 
     
    244244        </td> 
    245245    </tr> 
     246         
     247        <tr bgcolor="{th_bg}">  
     248                <td colspan="2">  
     249                        &nbsp;  
     250                </td>  
     251        </tr> 
     252        <tr bgcolor="{row_on}">  
     253                <td colspan="2">  
     254                        <label style="font-weight:bold;">{lang_Identifier_of_the_recipient_of_a_message}</label>  
     255                </td>  
     256        </tr> 
     257        <tr bgcolor="{row_off}"> 
     258        <td>{lang_LDAP_attribute_used_to_replacement}</td> 
     259        <td> 
     260            <select id="identifier_recipient" name="newsettings[expressoMail_ldap_identifier_recipient]"> 
     261                                {rows_ldap_identifier} 
     262            </select> 
     263        </td> 
     264    </tr>  
     265         
     266        <!-- <tr bgcolor="{row_off}"> 
     267        <td>{lang_LDAP_attribute_used_to_replacement}</td> 
     268        <td> 
     269            <input type="text" id="identifier_recipient " value="{value_expressoMail_ldap_identifier_recipient}" name="newsettings[expressoMail_ldap_identifier_recipient]" size=10 maxlength=10 /> 
     270        </td> 
     271    </tr> --> 
    246272    <!--tr bgcolor="{row_on}"> 
    247273        <td>{lang_Days_interval_to_show_balloon_for_user}</td> 
  • branches/2.4/expressoMail1_2/templates/default/index.tpl

    r5878 r6754  
    211211<div id="sendFileMessages" style="display:none;"></div> 
    212212<div id="quickAddContact" style="display:none;"></div> 
     213<div id="freeow" class="freeow freeow-bottom-right"></div> 
    213214<!-- END list --> 
  • branches/2.4/expressoMail1_2/templates/default/main.css

    r6734 r6754  
    127127.context-menu-item.icon-normal { background-image: url(images/door.png); } 
    128128.context-menu-item.icon-followupflag { background-image: url(images/door.png); } 
     129.context-menu-item.icon-quick-add { background-image: url(images/vcard_add.png); } 
     130.context-menu-item.icon-delete-box{ background-image: url(images/user_delete.png); } 
     131.context-menu-item.icon-quick-search-contact{ background-image: url(images/zoom.png); } 
    129132 
    130133 
     
    700703} 
    701704.message_options_trash { 
    702         background-image: url(../../../phpgwapi/templates/default/images/foldertree_trash.png); 
     705        background-image: url(images/page_white_delete.png); 
    703706        background-repeat: no-repeat; 
    704707        background-position:left center; 
     
    10091012} 
    10101013 
    1011 .qtip.qtip-blue.qtip-active ul {  
    1012         padding: 0;  
    1013 }  
    1014   
    1015 .qtip.qtip-blue.qtip-active li {  
    1016         width: 160px;  
    1017         list-style: none;  
    1018 }  
    1019  
    1020 .qtip.qtip-blue.qtip-active ul {  
    1021         padding: 0;  
    1022 }  
    1023   
    1024 .qtip.qtip-blue.qtip-active li {  
    1025         width: 160px;  
    1026         list-style: none;  
    1027 }  
     1014.qtip.qtip-blue.qtip-active ul { 
     1015        padding: 0; 
     1016} 
     1017 
     1018.qtip.qtip-blue.qtip-active li { 
     1019        width: 160px; 
     1020        list-style: none; 
     1021} 
    10281022 
    10291023.new-event-win.active .fc-event-skin { 
     
    10641058} 
    10651059 
    1066 div.new-event-win.active div.button-files-upload{  
    1067     margin: 15px 0 0 0;  
    1068 }  
    1069   
    1070 div.new-event-win.active div.files-list{  
    1071     margin: 45px 0 0 0;  
    1072 }  
    1073                   
     1060div.new-event-win.active div.button-files-upload{ 
     1061    margin: 15px 0 0 0; 
     1062} 
     1063 
     1064div.new-event-win.active div.files-list{ 
     1065    margin: 45px 0 0 0; 
     1066} 
     1067 
    10741068/*#divAppbox 
    10751069{ background: #fff url( ../images/bgBlockContent.jpg ) repeat-x; border-color: #9c9c9c; } 
     
    12821276 
    12831277 button.expressomail-button-icon-ative{color:#E17009 !important; border: 1px solid #E17009 !important;background: none repeat scroll 0 0 #FFE1CC !important;} 
     1278  
     1279.outoffice  
     1280{  
     1281    width: 295px;   
     1282    height: 50px;   
     1283    overflow: hidden;  
     1284}  
     1285         
     1286.title-outoffice  
     1287{  
     1288        margin-left: 10px;  
     1289        font-family: verdana;  
     1290        font-size: 1.2em;  
     1291}  
     1292.outoffice span{  
     1293        margin: 5px;  
     1294}  
     1295 
     1296#detalhes_contato img{ margin-bottom: -4px;} 
     1297 
     1298 button.expressomail-button-icon-ative{color:#E17009 !important; border: 1px solid #E17009 !important;background: none repeat scroll 0 0 #FFE1CC !important;} 
     1299  
     1300.box{ 
     1301        background-color: #96B3D3; 
     1302        border-radius: 5px; 
     1303        -moz-border-radius: 5px; 
     1304        border: 1px solid #201b41;  
     1305        display: inline-block; 
     1306        cursor : pointer; 
     1307        margin-top : 1px; 
     1308        margin-right: 1px; 
     1309        outline : none; 
     1310        padding : 1px; 
     1311} 
     1312 
     1313 
     1314.box span{ 
     1315        font-family: Verdana, Arial, Helvetica, sans-serif; 
     1316        font-size: 13px; 
     1317        color : #201b41; 
     1318        outline : none; 
     1319} 
     1320 
     1321.invalid-email-box{ 
     1322        background-color: #F08080; 
     1323        border : 1px solid #540303 !important; 
     1324} 
     1325 
     1326.invalid-email-box span{ 
     1327        color: #540303; 
     1328} 
     1329 
     1330.out-office-box{ 
     1331        background-color: #dac407; 
     1332        border : 1px solid #837c3f !important; 
     1333} 
     1334 
     1335.out-office-box span{ 
     1336        color: #837c3f; 
     1337} 
     1338 
     1339.email-area{ 
     1340        border-radius: 5px;  
     1341        width: 98.5%; 
     1342        padding: 5px; 
     1343        border : 1px solid #BBBBBB;  
     1344        heigth : auto; 
     1345        max-height : 115px; 
     1346        overflow-y: auto; 
     1347        cursor: text; 
     1348} 
     1349.email-text{ 
     1350        outline:none; 
     1351        width:15px; 
     1352        border : none; 
     1353        font-family: Verdana, Arial, Helvetica, sans-serif; 
     1354        font-size: 13px; 
     1355} 
     1356 
     1357.box-input{ 
     1358        outline:none; 
     1359        border : none; 
     1360        font-family: Verdana, Arial, Helvetica, sans-serif; 
     1361        font-size: 13px; 
     1362        display : none; 
     1363        width: 40px; 
     1364} 
     1365 
     1366.box-selected{ 
     1367        background-color : #BBBBBB; 
     1368} 
     1369 
     1370.hidden { 
     1371        display : none; 
     1372} 
     1373 
     1374.loading { 
     1375        background: url(../../../prototype/modules/mail/img/loader.gif) !important; 
     1376        background-position: 0 0 !important; 
     1377        background-repeat : no-repeat !important; 
     1378} 
     1379 
     1380.line-separator{ 
     1381        background: url("images/linha.png") repeat-x scroll 0 8px transparent; 
     1382        clear : both; 
     1383} 
     1384 
     1385.box-draggable-hover{ 
     1386        border : 1px solid #474747; 
     1387} 
     1388 
     1389.box-loading{ 
     1390        background : url("../../../prototype/modules/mail/img/loading.gif") no-repeat !important; 
     1391        background-size: 17px auto !important; 
     1392} 
     1393 
     1394.box-info{ 
     1395        background : url("images/information.png") no-repeat !important; 
     1396} 
     1397 
     1398input.required-fail{ 
     1399        border-color : red; 
     1400} 
  • branches/2.4/expressoMail1_2/templates/default/searchMails.ejs

    r5751 r6754  
    33                         
    44                                <label><%=data.From%>:</label> 
    5                                 <input style="margin-left: 6px;" type="text" id="txt_de" size="20" /> 
     5                                <input style="margin-left: 6px;" type="text" id="txt_de" size="20" value="<%=data.From_value%>"/> 
    66                                <br style="margin-bottom:15px" /> 
    77 
  • branches/2.4/filemanager/setup/setup.inc.php

    r5298 r6754  
    1414        $setup_info['filemanager']['name']    = 'filemanager'; 
    1515        $setup_info['filemanager']['title']   = 'Filemanager'; 
    16         $setup_info['filemanager']['version'] = '2.4.0'; 
     16        $setup_info['filemanager']['version'] = '2.4.1'; 
    1717        $setup_info['filemanager']['app_order'] = 6; 
    1818        $setup_info['filemanager']['enable']  = 1; 
     
    4848        ( 
    4949                 'appname' => 'phpgwapi', 
    50                  'versions' => array('2.4') 
     50                 'versions' => array('2.4.1') 
    5151        ); 
    5252?> 
  • branches/2.4/help/setup/setup.inc.php

    r5298 r6754  
    1313        $setup_info['help']['name']      = 'help'; 
    1414        $setup_info['help']['title']     = 'User Manual and Help Page'; 
    15         $setup_info['help']['version']   = '2.4.0'; 
     15        $setup_info['help']['version']   = '2.4.1'; 
    1616        $setup_info['help']['app_order'] = 5; 
    1717        $setup_info['help']['enable']    = 2;   // Invisible on top (navigation bar) 
     
    2626        $setup_info['help']['depends'][] = array( 
    2727                 'appname' => 'phpgwapi', 
    28                  'versions' => Array('2.4') 
     28                 'versions' => Array('2.4.1') 
    2929        ); 
    3030?> 
  • branches/2.4/home.php

    r5042 r6754  
    9898                echo parse_navbar(); 
    9999        } 
    100         // Default Applications (Home Page)  
    101         $default_apps = Array(                   
    102                         'workflow',                      
    103                         'expressoMail1_2', 
    104                         'calendar', 
    105                         'news_admin' 
    106                 ); 
    107         $sorted_apps = array(); 
    108         $user_apps = $GLOBALS['phpgw_info']['user']['apps'];  
    109         @reset($user_apps);      
    110         for($i = 0; $i < count($default_apps);$i++) { 
    111                 if(array_key_exists($default_apps[$i], $user_apps)){ 
    112                         $sorted_apps[] = $default_apps[$i]; 
    113                 }                
    114         } 
    115          
    116         foreach($GLOBALS['phpgw_info']['user']['apps'] as $i => $p) { 
    117                 $sorted_apps[] = $p['name']; 
    118         } 
    119          
     100 
     101        // Default Applications (Home Page)  
     102        $default_apps = Array(                   
     103                        'workflow',                      
     104                        'expressoMail1_2', 
     105                        'calendar', 
     106                        'news_admin' 
     107                ); 
     108        $sorted_apps = array(); 
     109        $user_apps = $GLOBALS['phpgw_info']['user']['apps'];  
     110        @reset($user_apps);      
     111        for($i = 0; $i < count($default_apps);$i++) { 
     112                if(array_key_exists($default_apps[$i], $user_apps)){ 
     113                        $sorted_apps[] = $default_apps[$i]; 
     114                }                
     115        } 
     116         
     117        foreach($GLOBALS['phpgw_info']['user']['apps'] as $i => $p) { 
     118                $sorted_apps[] = $p['name']; 
     119        } 
     120 
    120121        $portal_oldvarnames = array('mainscreen_showevents', 'homeShowEvents','homeShowLatest','mainscreen_showmail','mainscreen_showbirthdays','mainscreen_show_new_updated'); 
    121         $done = array(); 
    122         // Display elements, within appropriate table cells      
    123         @reset($sorted_apps); 
    124         $idx = 1; 
    125         echo "<table width='100%' cellpadding=5>"; 
    126         foreach($sorted_apps as $appname) 
    127         { 
    128                 if((int)$done[$appname] == 1 || empty($appname)){ 
    129                         continue; 
    130                 }                
    131                 $varnames = $portal_oldvarnames; 
    132                 $varnames[] = 'homepage_display'; 
    133                 $thisd = 0; 
    134                 $tmp = ''; 
    135                  
    136                 foreach($varnames as $varcheck) 
    137                 { 
    138                                                                          
    139                         /*if($appname == 'expressoMail1_2') { 
    140                                 $tmp = $appname; 
    141                                 $appname = 'expressoMail'; 
    142                         }*/                              
     122        $done = array(); 
     123        // Display elements, within appropriate table cells      
     124        @reset($sorted_apps); 
     125        $idx = 1; 
     126        echo "<table width='100%' cellpadding=5>"; 
     127        foreach($sorted_apps as $appname) 
     128        { 
     129                if((int)$done[$appname] == 1 || empty($appname)){ 
     130                        continue; 
     131                } 
     132                $varnames = $portal_oldvarnames; 
     133                $varnames[] = 'homepage_display'; 
     134                $thisd = 0; 
     135                $tmp = ''; 
    143136 
    144                         if(array_search($appname, $default_apps) !== False){ 
    145                                 $thisd = 1; 
    146                                 break; 
    147                         } 
    148                         if($GLOBALS['phpgw_info']['user']['preferences'][$appname][$varcheck]=='True') { 
    149                                 $thisd = 1; 
    150                                 break; 
    151                         } 
    152                         else  { 
    153                                 $_thisd = (int)$GLOBALS['phpgw_info']['user']['preferences'][$appname][$varcheck]; 
    154                                 if($_thisd > 0) { 
    155                                         $thisd = $_thisd; 
    156                                         break; 
    157                                 } 
    158                         } 
    159                 } 
     137                foreach($varnames as $varcheck) 
     138                { 
    160139 
    161                 if($thisd > 0) 
    162                 { 
    163                         if($tmp) { 
    164                 $appname = $tmp; 
    165                                 $tmp = ''; 
    166                         } 
    167                         if($idx == 0) {                          
    168                                 print '<tr>'; 
    169                         } 
    170                         print '<td style="vertical-align:top;" width="45%">'; 
    171                         $GLOBALS['phpgw']->hooks->single('home',$appname);                       
    172                         print '</td>'; 
    173                          
    174                         if($idx == 2){ 
    175                                 $idx = 0; 
    176                                 print '</tr>'; 
    177                         }                        
    178                         $idx++; 
    179                         $neworder[] = $appname; 
    180                 } 
    181                 $done[$appname] = 1; 
    182         } 
    183         print '</table>'; 
     140                        /*if($appname == 'expressoMail1_2') { 
     141                                $tmp = $appname; 
     142                                $appname = 'expressoMail'; 
     143                        }*/ 
     144 
     145                        if(array_search($appname, $default_apps) !== False){ 
     146                                $thisd = 1; 
     147                                break; 
     148                        } 
     149                        if($GLOBALS['phpgw_info']['user']['preferences'][$appname][$varcheck]=='True') { 
     150                                $thisd = 1; 
     151                                break; 
     152                        } 
     153                        else  { 
     154                                $_thisd = (int)$GLOBALS['phpgw_info']['user']['preferences'][$appname][$varcheck]; 
     155                                if($_thisd > 0) { 
     156                                        $thisd = $_thisd; 
     157                                        break; 
     158                                } 
     159                        } 
     160                } 
     161 
     162               if($thisd > 0) 
     163                { 
     164                        if($tmp) { 
     165                $appname = $tmp; 
     166                                $tmp = ''; 
     167                        } 
     168                        if($idx == 0) { 
     169                                print '<tr>'; 
     170                        } 
     171                        print '<td style="vertical-align:top;" width="45%">'; 
     172                        $GLOBALS['phpgw']->hooks->single('home',$appname); 
     173                        print '</td>'; 
     174 
     175                        if($idx == 2){ 
     176                                $idx = 0; 
     177                                print '</tr>'; 
     178                        } 
     179                        $idx++; 
     180                        $neworder[] = $appname; 
     181                } 
     182                $done[$appname] = 1; 
     183        } 
     184        print '</table>'; 
     185 
    184186        $GLOBALS['phpgw']->common->phpgw_footer(); 
    185187?> 
  • branches/2.4/jabberit_messenger/setup/setup.inc.php

    r5298 r6754  
    88        $setup_info['jabberit_messenger']['name']       = 'jabberit_messenger'; 
    99        $setup_info['jabberit_messenger']['title']      = 'Expresso Messenger'; 
    10         $setup_info['jabberit_messenger']['version']    = '2.4.0'; 
     10        $setup_info['jabberit_messenger']['version']    = '2.4.1'; 
    1111        $setup_info['jabberit_messenger']['app_order']  = 9; 
    1212        $setup_info['jabberit_messenger']['enable']     = 1; 
     
    2727        $setup_info['jabberit_messenger']['depends'][] = array( 
    2828                'appname' => 'phpgwapi', 
    29                 'versions' => Array('2.4') 
     29                'versions' => Array('2.4.1') 
    3030        ); 
    3131?> 
  • branches/2.4/library/ckeditor/ckeditor.js

    r6505 r6754  
    3636v=v.getParent();}else if(w>=v.getLength()){w=v.getIndex()+1;v=v.getParent();}else{var y=v.split(w);w=v.getIndex()+1;v=v.getParent();if(B.startContainer.equals(B.endContainer))B.setEnd(y,B.endOffset-B.startOffset);else if(v.equals(B.endContainer))B.endOffset+=1;}B.setStart(v,w);if(x){B.collapse(true);return;}}var z=B.endContainer,A=B.endOffset;if(!(u||x)&&z&&z.type==3){if(!A){A=z.getIndex();z=z.getParent();}else if(A>=z.getLength()){A=z.getIndex()+1;z=z.getParent();}else{z.split(A);A=z.getIndex()+1;z=z.getParent();}B.setEnd(z,A);}},enlarge:function(t,u){switch(t){case 1:if(this.collapsed)return;var v=this.getCommonAncestor(),w=this.document.getBody(),x,y,z,A,B,C=false,D,E,F=this.startContainer,G=this.startOffset;if(F.type==3){if(G){F=!e.trim(F.substring(0,G)).length&&F;C=!!F;}if(F)if(!(A=F.getPrevious()))z=F.getParent();}else{if(G)A=F.getChild(G-1)||F.getLast();if(!A)z=F;}while(z||A){if(z&&!A){if(!B&&z.equals(v))B=true;if(!w.contains(z))break;if(!C||z.getComputedStyle('display')!='inline'){C=false;if(B)x=z;else this.setStartBefore(z);}A=z.getPrevious();}while(A){D=false;if(A.type==3){E=A.getText();if(/[^\s\ufeff]/.test(E))A=null;D=/[\s\ufeff]$/.test(E);}else if((A.$.offsetWidth>0||u&&A.is('br'))&&!A.data('cke-bookmark'))if(C&&f.$removeEmpty[A.getName()]){E=A.getText();if(/[^\s\ufeff]/.test(E))A=null;else{var H=A.$.all||A.$.getElementsByTagName('*');for(var I=0,J;J=H[I++];){if(!f.$removeEmpty[J.nodeName.toLowerCase()]){A=null;break;}}}if(A)D=!!E.length;}else A=null;if(D)if(C){if(B)x=z;else if(z)this.setStartBefore(z);}else C=true;if(A){var K=A.getPrevious();if(!z&&!K){z=A;A=null;break;}A=K;}else z=null;}if(z)z=z.getParent();}F=this.endContainer;G=this.endOffset;z=A=null;B=C=false;if(F.type==3){F=!e.trim(F.substring(G)).length&&F;C=!(F&&F.getLength());if(F)if(!(A=F.getNext()))z=F.getParent();}else{A=F.getChild(G);if(!A)z=F;}while(z||A){if(z&&!A){if(!B&&z.equals(v))B=true;if(!w.contains(z))break;if(!C||z.getComputedStyle('display')!='inline'){C=false;if(B)y=z;else if(z)this.setEndAfter(z);}A=z.getNext();}while(A){D=false;if(A.type==3){E=A.getText();if(/[^\s\ufeff]/.test(E))A=null;D=/^[\s\ufeff]/.test(E);}else if((A.$.offsetWidth>0||u&&A.is('br'))&&!A.data('cke-bookmark'))if(C&&f.$removeEmpty[A.getName()]){E=A.getText();if(/[^\s\ufeff]/.test(E))A=null;else{H=A.$.all||A.$.getElementsByTagName('*');for(I=0;J=H[I++];){if(!f.$removeEmpty[J.nodeName.toLowerCase()]){A=null;break;}}}if(A)D=!!E.length;}else A=null;if(D)if(C)if(B)y=z;else this.setEndAfter(z);if(A){K=A.getNext(); 
    3737if(!z&&!K){z=A;A=null;break;}A=K;}else z=null;}if(z)z=z.getParent();}if(x&&y){v=x.contains(y)?y:x;this.setStartBefore(v);this.setEndAfter(v);}break;case 2:case 3:var L=new d.range(this.document);w=this.document.getBody();L.setStartAt(w,1);L.setEnd(this.startContainer,this.startOffset);var M=new d.walker(L),N,O,P=d.walker.blockBoundary(t==3?{br:1}:null),Q=function(W){var X=P(W);if(!X)N=W;return X;},R=function(W){var X=Q(W);if(!X&&W.is&&W.is('br'))O=W;return X;};M.guard=Q;z=M.lastBackward();N=N||w;this.setStartAt(N,!N.is('br')&&(!z&&this.checkStartOfBlock()||z&&N.contains(z))?1:4);if(t==3){var S=this.clone();M=new d.walker(S);var T=d.walker.whitespaces(),U=d.walker.bookmark();M.evaluator=function(W){return!T(W)&&!U(W);};var V=M.previous();if(V&&V.type==1&&V.is('br'))return;}L=this.clone();L.collapse();L.setEndAt(w,2);M=new d.walker(L);M.guard=t==3?R:Q;N=null;z=M.lastForward();N=N||w;this.setEndAt(N,!z&&this.checkEndOfBlock()||z&&N.contains(z)?2:3);if(O)this.setEndAfter(O);}},shrink:function(t,u){if(!this.collapsed){t=t||2;var v=this.clone(),w=this.startContainer,x=this.endContainer,y=this.startOffset,z=this.endOffset,A=this.collapsed,B=1,C=1;if(w&&w.type==3)if(!y)v.setStartBefore(w);else if(y>=w.getLength())v.setStartAfter(w);else{v.setStartBefore(w);B=0;}if(x&&x.type==3)if(!z)v.setEndBefore(x);else if(z>=x.getLength())v.setEndAfter(x);else{v.setEndAfter(x);C=0;}var D=new d.walker(v),E=d.walker.bookmark();D.evaluator=function(I){return I.type==(t==1?1:3);};var F;D.guard=function(I,J){if(E(I))return true;if(t==1&&I.type==3)return false;if(J&&I.equals(F))return false;if(!J&&I.type==1)F=I;return true;};if(B){var G=D[t==1?'lastForward':'next']();G&&this.setStartAt(G,u?1:3);}if(C){D.reset();var H=D[t==1?'lastBackward':'previous']();H&&this.setEndAt(H,u?2:4);}return!!(B||C);}},insertNode:function(t){var x=this;x.optimizeBookmark();x.trim(false,true);var u=x.startContainer,v=x.startOffset,w=u.getChild(v);if(w)t.insertBefore(w);else u.append(t);if(t.getParent().equals(x.endContainer))x.endOffset++;x.setStartBefore(t);},moveToPosition:function(t,u){this.setStartAt(t,u);this.collapse(true);},selectNodeContents:function(t){this.setStart(t,0);this.setEnd(t,t.type==3?t.getLength():t.getChildCount());},setStart:function(t,u){var v=this;if(t.type==1&&f.$empty[t.getName()])u=t.getIndex(),t=t.getParent();v.startContainer=t;v.startOffset=u;if(!v.endContainer){v.endContainer=t;v.endOffset=u;}l(v);},setEnd:function(t,u){var v=this;if(t.type==1&&f.$empty[t.getName()])u=t.getIndex()+1,t=t.getParent(); 
    38 v.endContainer=t;v.endOffset=u;if(!v.startContainer){v.startContainer=t;v.startOffset=u;}l(v);},setStartAfter:function(t){this.setStart(t.getParent(),t.getIndex()+1);},setStartBefore:function(t){this.setStart(t.getParent(),t.getIndex());},setEndAfter:function(t){this.setEnd(t.getParent(),t.getIndex()+1);},setEndBefore:function(t){this.setEnd(t.getParent(),t.getIndex());},setStartAt:function(t,u){var v=this;switch(u){case 1:v.setStart(t,0);break;case 2:if(t.type==3)v.setStart(t,t.getLength());else v.setStart(t,t.getChildCount());break;case 3:v.setStartBefore(t);break;case 4:v.setStartAfter(t);}l(v);},setEndAt:function(t,u){var v=this;switch(u){case 1:v.setEnd(t,0);break;case 2:if(t.type==3)v.setEnd(t,t.getLength());else v.setEnd(t,t.getChildCount());break;case 3:v.setEndBefore(t);break;case 4:v.setEndAfter(t);}l(v);},fixBlock:function(t,u){var x=this;var v=x.createBookmark(),w=x.document.createElement(u);x.collapse(t);x.enlarge(2);x.extractContents().appendTo(w);w.trim();if(!c)w.appendBogus();x.insertNode(w);x.moveToBookmark(v);return w;},splitBlock:function(t){var D=this;var u=new d.elementPath(D.startContainer),v=new d.elementPath(D.endContainer),w=u.blockLimit,x=v.blockLimit,y=u.block,z=v.block,A=null;if(!w.equals(x))return null;if(t!='br'){if(!y){y=D.fixBlock(true,t);z=new d.elementPath(D.endContainer).block;}if(!z)z=D.fixBlock(false,t);}var B=y&&D.checkStartOfBlock(),C=z&&D.checkEndOfBlock();D.deleteContents();if(y&&y.equals(z))if(C){A=new d.elementPath(D.startContainer);D.moveToPosition(z,4);z=null;}else if(B){A=new d.elementPath(D.startContainer);D.moveToPosition(y,3);y=null;}else{z=D.splitElement(y);if(!c&&!y.is('ul','ol'))y.appendBogus();}return{previousBlock:y,nextBlock:z,wasStartOfBlock:B,wasEndOfBlock:C,elementPath:A};},splitElement:function(t){var w=this;if(!w.collapsed)return null;w.setEndAt(t,2);var u=w.extractContents(),v=t.clone(false);u.appendTo(v);v.insertAfter(t);w.moveToPosition(t,4);return v;},checkBoundaryOfElement:function(t,u){var v=u==1,w=this.clone();w.collapse(v);w[v?'setStartAt':'setEndAt'](t,v?1:2);var x=new d.walker(w);x.evaluator=p;return x[v?'checkBackward':'checkForward']();},checkStartOfBlock:function(){var z=this;var t=z.startContainer,u=z.startOffset;if(u&&t.type==3){var v=e.ltrim(t.substring(0,u));if(v.length)return false;}z.trim();var w=new d.elementPath(z.startContainer),x=z.clone();x.collapse(true);x.setStartAt(w.block||w.blockLimit,1);var y=new d.walker(x);y.evaluator=o(true);return y.checkBackward();},checkEndOfBlock:function(){var z=this;  
     38v.endContainer=t;v.endOffset=u;if(!v.startContainer){v.startContainer=t;v.startOffset=u;}l(v);},setStartAfter:function(t){this.setStart(t.getParent(),t.getIndex()+1);},setStartBefore:function(t){this.setStart(t.getParent(),t.getIndex());},setEndAfter:function(t){this.setEnd(t.getParent(),t.getIndex()+1);},setEndBefore:function(t){this.setEnd(t.getParent(),t.getIndex());},setStartAt:function(t,u){var v=this;switch(u){case 1:v.setStart(t,0);break;case 2:if(t.type==3)v.setStart(t,t.getLength());else v.setStart(t,t.getChildCount());break;case 3:v.setStartBefore(t);break;case 4:v.setStartAfter(t);}l(v);},setEndAt:function(t,u){var v=this;switch(u){case 1:v.setEnd(t,0);break;case 2:if(t.type==3)v.setEnd(t,t.getLength());else v.setEnd(t,t.getChildCount());break;case 3:v.setEndBefore(t);break;case 4:v.setEndAfter(t);}l(v);},fixBlock:function(t,u){var x=this;var v=x.createBookmark(),w=x.document.createElement(u);x.collapse(t);x.enlarge(2);x.extractContents().appendTo(w);w.trim();if(!c)w.appendBogus();x.insertNode(w);x.moveToBookmark(v);return w;},splitBlock:function(t){var D=this;var u=new d.elementPath(D.startContainer),v=new d.elementPath(D.endContainer),w=u.blockLimit,x=v.blockLimit,y=u.block,z=v.block,A=null;if(!w.equals(x))return null;if(t!='br'){if(!y){y=D.fixBlock(true,t);z=new d.elementPath(D.endContainer).block;}if(!z)z=D.fixBlock(false,t);}var B=y&&D.checkStartOfBlock(),C=z&&D.checkEndOfBlock();D.deleteContents();if(y&&y.equals(z))if(C){A=new d.elementPath(D.startContainer);D.moveToPosition(z,4);z=null;}else if(B){A=new d.elementPath(D.startContainer);D.moveToPosition(y,3);y=null;}else{z=D.splitElement(y);if(!c&&!y.is('ul','ol'))y.appendBogus();}return{previousBlock:y,nextBlock:z,wasStartOfBlock:B,wasEndOfBlock:C,elementPath:A};},splitElement:function(t){var w=this;if(!w.collapsed)return null;w.setEndAt(t,2);var u=w.extractContents(),v=t.clone(false);u.appendTo(v);v.insertAfter(t);w.moveToPosition(t,4);return v;},checkBoundaryOfElement:function(t,u){var v=u==1,w=this.clone();w.collapse(v);w[v?'setStartAt':'setEndAt'](t,v?1:2);var x=new d.walker(w);x.evaluator=p;return x[v?'checkBackward':'checkForward']();},checkStartOfBlock:function(){var z=this;var t=z.startContainer,u=z.startOffset;if(u&&t.type==3){var v=e.ltrim(t.substring(0,u));if(v.length)return false;}z.trim();var w=new d.elementPath(z.startContainer),x=z.clone();x.collapse(true);x.setStartAt(w.block||w.blockLimit,1);var y=new d.walker(x);y.evaluator=o(true);return y.checkBackward();},checkEndOfBlock:function(){var z=this; 
    3939var t=z.endContainer,u=z.endOffset;if(t.type==3){var v=e.rtrim(t.substring(u));if(v.length)return false;}z.trim();var w=new d.elementPath(z.endContainer),x=z.clone();x.collapse(false);x.setEndAt(w.block||w.blockLimit,2);var y=new d.walker(x);y.evaluator=o(false);return y.checkForward();},checkReadOnly:(function(){function t(u,v){while(u){if(u.type==1)if(u.getAttribute('contentEditable')=='false'&&!u.data('cke-editable'))return 0;else if(u.is('html')||u.getAttribute('contentEditable')=='true'&&(u.contains(v)||u.equals(v)))break;u=u.getParent();}return 1;};return function(){var u=this.startContainer,v=this.endContainer;return!(t(u,v)&&t(v,u));};})(),moveToElementEditablePosition:function(t,u){function v(x,y){var z;if(x.type==1&&x.isEditable(false)&&!f.$nonEditable[x.getName()])z=x[u?'getLast':'getFirst'](s);if(!y&&!z)z=x[u?'getPrevious':'getNext'](s);return z;};var w=0;while(t){if(t.type==3){this.moveToPosition(t,u?4:3);w=1;break;}if(t.type==1)if(t.isEditable()){this.moveToPosition(t,u?2:1);w=1;}t=v(t,w);}return!!w;},moveToElementEditStart:function(t){return this.moveToElementEditablePosition(t);},moveToElementEditEnd:function(t){return this.moveToElementEditablePosition(t,true);},getEnclosedNode:function(){var t=this.clone();t.optimize();if(t.startContainer.type!=1||t.endContainer.type!=1)return null;var u=new d.walker(t),v=d.walker.bookmark(true),w=d.walker.whitespaces(true),x=function(z){return w(z)&&v(z);};t.evaluator=x;var y=u.next();u.reset();return y&&y.equals(u.previous())?y:null;},getTouchedStartNode:function(){var t=this.startContainer;if(this.collapsed||t.type!=1)return t;return t.getChild(this.startOffset)||t;},getTouchedEndNode:function(){var t=this.endContainer;if(this.collapsed||t.type!=1)return t;return t.getChild(this.endOffset-1)||t;}};})();a.POSITION_AFTER_START=1;a.POSITION_BEFORE_END=2;a.POSITION_BEFORE_START=3;a.POSITION_AFTER_END=4;a.ENLARGE_ELEMENT=1;a.ENLARGE_BLOCK_CONTENTS=2;a.ENLARGE_LIST_ITEM_CONTENTS=3;a.START=1;a.END=2;a.STARTEND=3;a.SHRINK_ELEMENT=1;a.SHRINK_TEXT=2;(function(){d.rangeList=function(n){if(n instanceof d.rangeList)return n;if(!n)n=[];else if(n instanceof d.range)n=[n];return e.extend(n,l);};var l={createIterator:function(){var n=this,o=d.walker.bookmark(),p=function(s){return!(s.is&&s.is('tr'));},q=[],r;return{getNextRange:function(s){r=r==undefined?0:r+1;var t=n[r];if(t&&n.length>1){if(!r)for(var u=n.length-1;u>=0;u--)q.unshift(n[u].createBookmark(true));if(s){var v=0;while(n[r+v+1]){var w=t.document,x=0,y=w.getById(q[v].endNode),z=w.getById(q[v+1].startNode),A; 
    4040while(1){A=y.getNextSourceNode(false);if(!z.equals(A)){if(o(A)||A.type==1&&A.isBlockBoundary()){y=A;continue;}}else x=1;break;}if(!x)break;v++;}}t.moveToBookmark(q.shift());while(v--){A=n[++r];A.moveToBookmark(q.shift());t.setEnd(A.endContainer,A.endOffset);}}return t;}};},createBookmarks:function(n){var s=this;var o=[],p;for(var q=0;q<s.length;q++){o.push(p=s[q].createBookmark(n,true));for(var r=q+1;r<s.length;r++){s[r]=m(p,s[r]);s[r]=m(p,s[r],true);}}return o;},createBookmarks2:function(n){var o=[];for(var p=0;p<this.length;p++)o.push(this[p].createBookmark2(n));return o;},moveToBookmarks:function(n){for(var o=0;o<this.length;o++)this[o].moveToBookmark(n[o]);}};function m(n,o,p){var q=n.serializable,r=o[p?'endContainer':'startContainer'],s=p?'endOffset':'startOffset',t=q?o.document.getById(n.startNode):n.startNode,u=q?o.document.getById(n.endNode):n.endNode;if(r.equals(t.getPrevious())){o.startOffset=o.startOffset-r.getLength()-u.getPrevious().getLength();r=u.getNext();}else if(r.equals(u.getPrevious())){o.startOffset=o.startOffset-r.getLength();r=u.getNext();}r.equals(t.getParent())&&o[s]++;r.equals(u.getParent())&&o[s]++;o[p?'endContainer':'startContainer']=r;return o;};})();(function(){if(b.webkit){b.hc=false;return;}var l=h.createFromHtml('<div style="width:0px;height:0px;position:absolute;left:-10000px;border: 1px solid;border-color: red blue;"></div>',a.document);l.appendTo(a.document.getHead());try{b.hc=l.getComputedStyle('border-top-color')==l.getComputedStyle('border-right-color');}catch(m){b.hc=false;}if(b.hc)b.cssClass+=' cke_hc';l.remove();})();j.load(i.corePlugins.split(','),function(){a.status='loaded';a.fire('loaded');var l=a._.pending;if(l){delete a._.pending;for(var m=0;m<l.length;m++)a.add(l[m]);}});if(c)try{document.execCommand('BackgroundImageCache',false,true);}catch(l){}a.skins.add('kama',(function(){var m='cke_ui_color';return{editor:{css:['editor.css']},dialog:{css:['dialog.css']},richcombo:{canGroup:false},templates:{css:['templates.css']},margins:[0,0,0,0],init:function(n){if(n.config.width&&!isNaN(n.config.width))n.config.width-=12;var o=[],p=/\$color/g,q='/* UI Color Support */.cke_skin_kama .cke_menuitem .cke_icon_wrapper{\tbackground-color: $color !important;\tborder-color: $color !important;}.cke_skin_kama .cke_menuitem a:hover .cke_icon_wrapper,.cke_skin_kama .cke_menuitem a:focus .cke_icon_wrapper,.cke_skin_kama .cke_menuitem a:active .cke_icon_wrapper{\tbackground-color: $color !important;\tborder-color: $color !important;}.cke_skin_kama .cke_menuitem a:hover .cke_label,.cke_skin_kama .cke_menuitem a:focus .cke_label,.cke_skin_kama .cke_menuitem a:active .cke_label{\tbackground-color: $color !important;}.cke_skin_kama .cke_menuitem a.cke_disabled:hover .cke_label,.cke_skin_kama .cke_menuitem a.cke_disabled:focus .cke_label,.cke_skin_kama .cke_menuitem a.cke_disabled:active .cke_label{\tbackground-color: transparent !important;}.cke_skin_kama .cke_menuitem a.cke_disabled:hover .cke_icon_wrapper,.cke_skin_kama .cke_menuitem a.cke_disabled:focus .cke_icon_wrapper,.cke_skin_kama .cke_menuitem a.cke_disabled:active .cke_icon_wrapper{\tbackground-color: $color !important;\tborder-color: $color !important;}.cke_skin_kama .cke_menuitem a.cke_disabled .cke_icon_wrapper{\tbackground-color: $color !important;\tborder-color: $color !important;}.cke_skin_kama .cke_menuseparator{\tbackground-color: $color !important;}.cke_skin_kama .cke_menuitem a:hover,.cke_skin_kama .cke_menuitem a:focus,.cke_skin_kama .cke_menuitem a:active{\tbackground-color: $color !important;}'; 
  • branches/2.4/library/ckeditor/config.js

    r6505 r6754  
    2323           config.extraPlugins = 'richcombo,expresso,keystrokes,aspell'; 
    2424           config.tabSpaces = 4; 
    25                config.disableNativeSpellChecker = false;  
     25                       config.disableNativeSpellChecker = false; 
    2626           config.removePlugins = 'elementspath,scayt,menubutton'; 
    27                config.resize_enabled = true; 
     27                       config.resize_enabled = true; 
    2828           config.toolbarCanCollapse = false;   
    2929           config.toolbar_mail = 
  • branches/2.4/listAdmin/setup/setup.inc.php

    r5298 r6754  
    99        $setup_info['listAdmin']['name'] = 'listAdmin'; 
    1010        $setup_info['listAdmin']['title'] = 'Mailman Admin'; 
    11         $setup_info['listAdmin']['version'] = '2.4.0'; 
     11        $setup_info['listAdmin']['version'] = '2.4.1'; 
    1212        $setup_info['listAdmin']['app_order'] = 10; 
    1313        $setup_info['listAdmin']['enable'] = 1; 
     
    3030        $setup_info['listAdmin']['depends'][] = array( 
    3131                'appname' => 'phpgwapi', 
    32                 'versions' => Array('2.0','2.1','2.2','2.4') 
     32                'versions' => Array('2.0','2.1','2.2','2.4', '2.4.1') 
    3333        ); 
    3434?> 
  • branches/2.4/login.php

    r6731 r6754  
    8787                case browser::PLATFORM_NOKIA: 
    8888                case browser::PLATFORM_ANDROID: 
    89                 case browser::PLATFORM_WINMOBILE:  
     89                case browser::PLATFORM_WINMOBILE: 
    9090                        $ifMobile = true;                                                
    9191                        break; 
  • branches/2.4/mobile/inc/class.ui_mobilemail.inc.php

    r6731 r6754  
    907907                        } 
    908908                         
    909                         if(!$this->imap_functions->add_recipients("cc", $ccaddress, &$mail, true))  
     909                        if(!$this->imap_functions->add_recipients("cc", $ccaddress, &$mail, true)) 
    910910                        { 
    911911                                $error_msg = lang("Some addresses in the CC field were not recognized. Please make sure that all addresses are properly formed"); 
  • branches/2.4/mobile/setup/setup.inc.php

    r5298 r6754  
    1414        $setup_info['mobile']['name']      = 'mobile'; 
    1515        $setup_info['mobile']['title']     = 'Expresso Mini'; 
    16         $setup_info['mobile']['version']   = '2.4.0'; 
     16        $setup_info['mobile']['version']   = '2.4.1'; 
    1717        $setup_info['mobile']['app_order'] = 4; 
    1818        $setup_info['mobile']['enable']    = 2; 
     
    3939        $setup_info['mobile']['depends'][] = array( 
    4040                'appname' => 'phpgwapi', 
    41                 'versions' => Array('2.4') 
     41                'versions' => Array('2.4.1') 
    4242        ); 
    4343?> 
  • branches/2.4/news_admin/setup/setup.inc.php

    r5298 r6754  
    1414        $setup_info['news_admin']['name']      = 'news_admin'; 
    1515        $setup_info['news_admin']['title']     = 'News Admin'; 
    16         $setup_info['news_admin']['version']   = '2.4.0'; 
     16        $setup_info['news_admin']['version']   = '2.4.1'; 
    1717        $setup_info['news_admin']['app_order'] = 16; 
    1818        $setup_info['news_admin']['enable']    = 1; 
     
    3131        $setup_info['news_admin']['depends'][] = array( 
    3232                 'appname' => 'phpgwapi', 
    33                  'versions' => Array('2.4') 
     33                 'versions' => Array('2.4.1') 
    3434        ); 
    3535 
  • branches/2.4/news_admin/setup/tables_update.inc.php

    r5311 r6754  
    7373                return $GLOBALS['setup_info']['news_admin']['currentver']; 
    7474        } 
     75        $test[] = '2.4.0'; 
     76        function news_admin_upgrade2_4_0() 
     77        { 
     78                $GLOBALS['setup_info']['news_admin']['currentver'] = '2.4.1'; 
     79                return $GLOBALS['setup_info']['news_admin']['currentver']; 
     80        } 
    7581?> 
  • branches/2.4/phpgwapi/inc/class.browser.inc.php

    r6731 r6754  
    4444                const PLATFORM_ANDROID = 'Android'; 
    4545                const PLATFORM_UNIX = 'Unix'; 
    46                 const PLATFORM_WINMOBILE = 'WinMobile';  
     46                const PLATFORM_WINMOBILE = 'WinMobile'; 
    4747 
    4848                function browser() 
     
    118118                                $this->BROWSER_PLATFORM = self::PLATFORM_MAC; 
    119119                        } 
    120                         elseif(strstr($HTTP_USER_AGENT,'IEMobile'))  
    121             {  
    122                     $this->BROWSER_PLATFORM = self::PLATFORM_WINMOBILE;  
    123             }  
     120                        elseif(strstr($HTTP_USER_AGENT,'IEMobile')) 
     121                        { 
     122                                $this->BROWSER_PLATFORM = self::PLATFORM_WINMOBILE; 
     123                        }        
    124124                        elseif(strstr($HTTP_USER_AGENT,'Win')) 
    125125                        { 
    126126                                $this->BROWSER_PLATFORM = self::PLATFORM_WINDOWS; 
    127                         }                        
     127                        }        
    128128                        elseif(strstr($HTTP_USER_AGENT,'Linux')) 
    129129                        { 
  • branches/2.4/phpgwapi/inc/class.setup_process.inc.php

    r6741 r6754  
    737737                                                                } 
    738738                                                        } 
    739                                                         // elseif ($GLOBALS['phpgw_setup']->alessthanb($value,$currentver))  
    740                                 // {  
    741                                 //      if($DEBUG) { echo '<br>process->upgrade(): running baseline delta only: ' . $function . '...'; }  
    742                                 //      $GLOBALS['phpgw_setup']->oProc->m_bDeltaOnly = True;  
    743                                 //      $success = $function(); 
     739                                                        // elseif ($GLOBALS['phpgw_setup']->alessthanb($value,$currentver)) 
     740                                                        // { 
     741                                                        //      if($DEBUG) { echo '<br>process->upgrade(): running baseline delta only: ' . $function . '...'; } 
     742                                                        //      $GLOBALS['phpgw_setup']->oProc->m_bDeltaOnly = True; 
     743                                                        //      $success = $function(); 
    744744                                                                 
    745                                                         //      // is the next update the one we need?  
    746                             //      if ($success && $test[$x+1] != $success &&  
    747                             //              ($num = array_search($success,$test)) !== False && $num !== null)  
    748                             //      {  
    749                             //              // do we have the needed update somewhere else in the row?  
    750                             //              // if yes, position the array-pointer just before that update and continue  
    751                             //              reset($test);  
    752                             //              while((list($x,$value) = each($test)) && $x < $num-1);  
    753                             //              continue;  
    754                             //      }  
    755                             // } 
     745                                                        //      // is the next update the one we need? 
     746                                                        //      if ($success && $test[$x+1] != $success && 
     747                                                        //              ($num = array_search($success,$test)) !== False && $num !== null) 
     748                                                        //      { 
     749                                                        //              // do we have the needed update somewhere else in the row? 
     750                                                        //              // if yes, position the array-pointer just before that update and continue 
     751                                                        //              reset($test); 
     752                                                        //              while((list($x,$value) = each($test)) && $x < $num-1); 
     753                                                        //              continue; 
     754                                                        //      } 
     755                                                        // } 
    756756                                                        else 
    757757                                                        {                                                                
  • branches/2.4/phpgwapi/setup/setup.inc.php

    r5141 r6754  
    1414        $setup_info['phpgwapi']['name']      = 'phpgwapi'; 
    1515        $setup_info['phpgwapi']['title']     = 'API'; 
    16         $setup_info['phpgwapi']['version']   = '2.4.0'; 
    17         $setup_info['phpgwapi']['versions']['current_header'] = '2.4.0'; 
     16        $setup_info['phpgwapi']['version']   = '2.4.1'; 
     17        $setup_info['phpgwapi']['versions']['current_header'] = '2.4.1'; 
    1818        $setup_info['phpgwapi']['enable']    = 3; 
    1919        $setup_info['phpgwapi']['app_order'] = 1; 
  • branches/2.4/phpgwapi/setup/tables_update.inc.php

    r5311 r6754  
    163163                return $GLOBALS['setup_info']['phpgwapi']['currentver']; 
    164164        } 
     165        $test[] = '2.4.0'; 
     166        function phpgwapi_upgrade2_4_0() 
     167        { 
     168                $GLOBALS['setup_info']['phpgwapi']['currentver'] = '2.4.1'; 
     169                return $GLOBALS['setup_info']['phpgwapi']['currentver']; 
     170        } 
    165171?> 
  • branches/2.4/phpgwapi/templates/default/login_default.php

    r5281 r6754  
    177177                        else 
    178178                                $_POST['login'] = $_POST['user']; 
     179 
     180                        /** 
     181                         * LOGIN OAUTH POR CURL 
     182                         */ 
     183                        $ch = curl_init(); 
     184 
     185                        $restConf = parse_ini_file( __DIR__ . '/../../../prototype/config/REST.ini', true ); 
     186 
     187                        $param  = 'grant_type=password'; 
     188                        $param .= '&client_id=' . $restConf['oauth']['client_id']; 
     189                        $param .= '&client_secret=' . $restConf['oauth']['client_secret']; 
     190                        $param .= '&username=' . $_POST['user']; 
     191                        $param .= '&password=' . $_POST['passwd']; 
     192 
     193                        // set URL and other appropriate options 
     194                        curl_setopt($ch, CURLOPT_URL, $restConf['oauth']['url_token']); 
     195                        curl_setopt($ch, CURLOPT_HTTPHEADER, array('Accept: */*')); 
     196                        curl_setopt($ch, CURLOPT_POST, TRUE); 
     197                        curl_setopt($ch, CURLOPT_POSTFIELDS, $param); 
     198                        curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);  //configura para nao imprimir a saida na tela 
     199                        curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 2);//Passe um nï¿œmero long como parï¿œmetro que contï¿œm o limite de tempo, em segundos, que vocï¿œ permite as funᅵᅵes CURL levar.  
     200 
     201                        // grab URL and pass it to the browser 
     202                        $res = curl_exec($ch); 
     203                         
     204                        // close cURL resource, and free up system resources 
     205                        curl_close($ch); 
     206                        $a = json_decode($res); 
     207         
     208                        if ( isset($a->access_token) ) { 
     209                                $_SESSION['oauth']['access_token'] = $a->access_token; 
     210                                $_SESSION['oauth']['expires_in'] = $a->expires_in; 
     211                                $_SESSION['oauth']['token_type'] = $a->token_type; 
     212                                $_SESSION['oauth']['scope'] = $a->scope; 
     213                                $_SESSION['oauth']['refresh_token'] = $a->refresh_token; 
     214                                 
     215                        } 
     216                        else { 
     217                        } 
     218                        /** 
     219                         * #################### 
     220                         */ 
     221 
    179222                } 
    180223                if(getenv('REQUEST_METHOD') != 'POST' && $_SERVER['REQUEST_METHOD'] != 'POST' && 
     
    598641        if(isset($ultima_revisao)) $tmpl->set_var('ultima_rev','<br>' . $ultima_revisao); 
    599642 
    600         // Adiciona código personalizado de outro template 
     643        // Adiciona cï¿œdigo personalizado de outro template 
    601644        // que esteja utilizando o login_default.php 
    602645        if(is_file('.'.$template_dir.'/login.inc.php')) { 
  • branches/2.4/preferences/setup/setup.inc.php

    r5298 r6754  
    1313        $setup_info['preferences']['name']      = 'preferences'; 
    1414        $setup_info['preferences']['title']     = 'Preferences'; 
    15         $setup_info['preferences']['version']   = '2.4.0'; 
     15        $setup_info['preferences']['version']   = '2.4.1'; 
    1616        $setup_info['preferences']['app_order'] = 1; 
    1717        $setup_info['preferences']['tables']    = ''; 
     
    2828        $setup_info['preferences']['depends'][] = array( 
    2929                'appname' => 'phpgwapi', 
    30                 'versions' => Array('2.4') 
     30                'versions' => Array('2.4.1') 
    3131        ); 
    3232?> 
  • branches/2.4/prototype/api/config.php

    r5764 r6754  
    11<?php 
     2 
     3namespace prototype\api; 
    24 
    35class Config  
    46{ 
    5     static $register; 
    6     static $sessionStarted; 
     7        static $register; 
     8        static $sessionStarted; 
    79   
    8     static function module($config , $module = false) 
    9     { 
    10         //Todo: registrar na nova api o currentapp 
    11         if(!$module) 
    12             $module =  $_SESSION['flags']['currentapp']; 
     10        static function module($config , $module = false) 
     11        { 
     12                //Todo: registrar na nova api o currentapp 
     13                if(!$module) 
     14                                $module =  $_SESSION['flags']['currentapp']; 
    1315   
    14         if( !isset( $_SESSION['config'][$module] ) || !isset( $_SESSION['config'][$module][$config] )) 
    15             $_SESSION['config'][$module] = parse_ini_file( ROOTPATH."/config/$module.ini", true ); 
     16                if( !isset( $_SESSION['config'][$module] ) || !isset( $_SESSION['config'][$module][$config] )) 
     17                                $_SESSION['config'][$module] = parse_ini_file( ROOTPATH."/config/$module.ini", true ); 
    1618         
    17         return isset($_SESSION['config'][$module][$config]) ? $_SESSION['config'][$module][$config] : false; 
     19                return isset($_SESSION['config'][$module][$config]) ? $_SESSION['config'][$module][$config] : false; 
    1820      
    19     } 
     21        } 
    2022     
    21     static function me($config) 
    22     { 
     23        static function me($config) 
     24        { 
    2325         
    24         return isset($_SESSION['wallet']['user'][$config]) ? $_SESSION['wallet']['user'][$config] : false; 
    25     } 
     26                return isset($_SESSION['wallet']['user'][$config]) ? $_SESSION['wallet']['user'][$config] : false; 
     27        } 
    2628     
    27     static function service( $service , $config ) 
    28     { 
    29         if( !isset( $_SESSION['wallet'][$service] ) || !isset( $_SESSION['wallet'][$service][$config] )) 
    30             $_SESSION['wallet'][$service] = parse_ini_file( ROOTPATH."/config/$service.srv", true ); 
     29        static function service( $service , $config ) 
     30        { 
     31                if( !isset( $_SESSION['wallet'][$service] ) || !isset( $_SESSION['wallet'][$service][$config] )) 
     32                                $_SESSION['wallet'][$service] = parse_ini_file( ROOTPATH."/config/$service.srv", true ); 
    3133        
    32         return (isset($_SESSION['wallet'][$service][$config])) ? $_SESSION['wallet'][$service][$config] : false; 
    33     } 
     34                return (isset($_SESSION['wallet'][$service][$config])) ? $_SESSION['wallet'][$service][$config] : false; 
     35        } 
    3436     
    35     static function get( $concept , $config = false , $module = false ) 
    36     { 
    37         $load = parse_ini_file( ROOTPATH."/config/$concept.ini", true ); 
     37        static function get( $concept , $config = false , $module = false ) 
     38        { 
     39                $load = parse_ini_file( ROOTPATH."/config/$concept.ini", true ); 
    3840         
    39         if($config === false) return $load; 
     41                if($config === false) return $load; 
    4042         
    41         return (isset($load[$config])) ? $load[$config] : false; 
    42     } 
     43                return (isset($load[$config])) ? $load[$config] : false; 
     44        } 
    4345     
    44     static function regSet( $name , $value) 
    45     { 
    46         self::$register[$name] = $value; 
    47     } 
    48     static function regGet ($name ) 
    49     { 
    50         return (isset(self::$register[$name]) ? self::$register[$name] : false ); 
    51     } 
     46        static function regSet( $name , $value) 
     47        { 
     48                self::$register[$name] = $value; 
     49        } 
     50        static function regGet ($name ) 
     51        { 
     52                return (isset(self::$register[$name]) ? self::$register[$name] : false ); 
     53        } 
    5254 
    53     static function init( ) 
    54     { 
     55        static function init( ) 
     56        { 
     57     
     58                if( !defined( 'ROOTPATH' ) ) 
     59                                define( 'ROOTPATH', dirname(__FILE__).'/..' ); 
    5560         
    56         if( !defined( 'ROOTPATH' ) ) 
    57             define( 'ROOTPATH', dirname(__FILE__).'/..' ); 
    58          
    59         if ( isset( $_COOKIE[ 'sessionid' ] ) )  
    60         { 
    61             session_id( $_COOKIE[ 'sessionid' ] );  
    62             $GLOBALS['phpgw']->session->sessionid = $_COOKIE[ 'sessionid' ]; 
    63         } 
     61                if ( isset( $_COOKIE[ 'sessionid' ] ) )  
     62                { 
     63                                session_id( $_COOKIE[ 'sessionid' ] );  
     64                                $GLOBALS['phpgw']->session->sessionid = $_COOKIE[ 'sessionid' ]; 
     65                } 
    6466                 
    6567        if( !self::$sessionStarted ) 
    66             self::$sessionStarted = session_start(); 
    67 //               
    68 //      if( $header === true ) 
    69 //      { 
    70 //            require_once (dirname(__FILE__).'/../../header.inc.php'); 
    71 // 
    72 //            $_SESSION['wallet']['Sieve']['user']          =  $GLOBALS['phpgw_info']['user']['account_lid']; 
    73 //            $_SESSION['wallet']['Sieve']['password']      =  $GLOBALS['phpgw_info']['user']['passwd']; 
    74 // 
    75 //            $_SESSION['wallet']['Cyrus']['user']          =  $GLOBALS['phpgw_info']['user']['account_lid']; 
    76 //            $_SESSION['wallet']['Cyrus']['password']      =  $GLOBALS['phpgw_info']['user']['passwd']; 
    77 // 
    78 //            $_SESSION['wallet']['user']['uid']                  =  $GLOBALS['phpgw_info']['user']['userid']; 
    79 //            $_SESSION['wallet']['user']['uidNumber']      =  $GLOBALS['phpgw_info']['user']['account_id']; 
    80 //            $_SESSION['wallet']['user']['password']       =  $GLOBALS['phpgw_info']['user']['passwd']; 
    81 //            $_SESSION['wallet']['user']['cn']             =  $GLOBALS['phpgw_info']['user']['cn']; 
    82 //            $_SESSION['wallet']['user']['mail']           =  $GLOBALS['phpgw_info']['user']['email']; 
    83 // 
    84 //            $_SESSION['wallet']['PostgreSQL']['user']     = $GLOBALS['phpgw_info']['server']['db_user']; 
    85 //            $_SESSION['wallet']['PostgreSQL']['password'] = $GLOBALS['phpgw_info']['server']['db_pass']; 
    86 //            $_SESSION['wallet']['PostgreSQL']['dbname']   = $GLOBALS['phpgw_info']['server']['db_name']; 
    87 //            $_SESSION['wallet']['PostgreSQL']['host']     = $GLOBALS['phpgw_info']['server']['db_host']; 
    88 //             
    89 //            $_SESSION['wallet']['OpenLDAP']['context']   =  $GLOBALS['phpgw_info']['server']['ldap_context']; 
    90 //            $_SESSION['wallet']['OpenLDAP']['host']      =  $GLOBALS['phpgw_info']['server']['ldap_host']; 
    91 //            
    92 //      } 
     68                                self::$sessionStarted = session_start(); 
    9369                 
    94     } 
     70        } 
     71     
     72        public static function writeIniFile($assoc_arr, $path, $has_sections) 
     73        { 
     74                $content = '';   
     75                self::_writeIniFile($content, $assoc_arr, $has_sections); 
     76                if( file_put_contents($path, $content) === false) 
     77                { 
     78                        trigger_error("Permission failure when trying to write in the file: $path ", E_USER_WARNING); 
     79                        return false; 
     80                } 
     81                return true; 
     82        } 
     83 
     84        private static function _writeIniFile(&$content, $assoc_arr, $has_sections) 
     85        { 
     86                foreach ($assoc_arr as $key => $val) 
     87                { 
     88                        if (is_array($val)) 
     89                        { 
     90                                if($has_sections) 
     91                                { 
     92                                        $content .= "[$key]\n"; 
     93                                        self::_writeIniFile(&$content, $val, false); 
     94                                } 
     95                                else                             
     96                                        foreach($val as $iKey => $iVal) 
     97                                        { 
     98                                                if (is_int($iKey)) 
     99                                                        $content .= $key ."[] = $iVal\n"; 
     100                                                else 
     101                                                        $content .= $key ."[$iKey] = $iVal\n"; 
     102                                        } 
     103                        } 
     104                        else 
     105                                $content .= "$key = $val\n"; 
     106                } 
     107        } 
    95108 
    96109} 
    97110 
    98     Config::init(); 
     111        Config::init(); 
    99112         
    100113 
  • branches/2.4/prototype/api/controller.php

    r6420 r6754  
    4444 
    4545require_once(ROOTPATH.'/api/config.php'); 
    46  
     46use prototype\api\Config as Config; 
    4747/** 
    4848TODO list: 
  • branches/2.4/prototype/api/datalayer.js

    r6453 r6754  
     1 
     2(function($){$.parseQuery=function(options){var config={query:window.location.search||""},params={};if(typeof options==='string'){options={query:options};} 
     3$.extend(config,$.parseQuery,options);config.query=config.query.replace(/^\?/,'');$.each(config.query.split(config.separator),function(i,param){var pair=param.split('='),key=config.decode(pair.shift(),null).toString(),value=config.decode(pair.length?pair.join('='):null,key);if(config.array_keys(key)){params[key]=params[key]||[];params[key].push(value);}else{params[key]=value;}});return params;};$.parseQuery.decode=$.parseQuery.default_decode=function(string){return decodeURIComponent((string||"").replace('+',' '));};$.parseQuery.array_keys=function(){return false;};$.parseQuery.separator="&";}(jQuery)); 
     4 
    15internalUrl = /^([A-z0-9-_]+)(:[A-z0-9-_]+)?$/; 
    26internalUri = /^([a-zA-Z0-9-_]+)\(([a-zA-Z0-9-_]+)\):\/\/(.*)|([a-zA-Z0-9-_]+):\/\/(.*)$/; 
     
    5761 
    5862          jqXHR.abort(); 
     63           
     64          if( typeof options.data === "string" ) 
     65              options.data = $.parseQuery( options.data ); 
    5966 
    6067          switch( options.type.toUpperCase() ) 
     
    624631     
    625632    rollback: function( concept, ids ){ 
    626        
    627     if(!DataLayer.storage.cache[':diff'])  
    628                 return false;  
     633    if(!DataLayer.storage.cache[':diff']) 
     634                return false; 
    629635        if(concept){ 
    630636                if(ids){ 
     
    13941400          properties: criteria.properties || '' 
    13951401 
    1396       } ); 
     1402      }, false, true ); 
    13971403    }, 
    13981404 
  • branches/2.4/prototype/api/newcontroller.php

    r5715 r6754  
    55 
    66require_once(ROOTPATH.'/api/config.php'); 
     7use prototype\api\Config as Config; 
    78 
    89/** 
  • branches/2.4/prototype/config/calendarSignatureAlarm.ini

    r5592 r6754  
    1515 
    1616[before.delete] 
    17 encodeURICalendarSignatureAlarm = modules/calendar/interceptors/DBMapping.php 
     17decodeDeleteCalendarSignatureAlarm = modules/calendar/interceptors/DBMapping.php   
    1818 
    1919[PostgreSQL.mapping] 
  • branches/2.4/prototype/config/filter.ini

    r6021 r6754  
    1010 
    1111[before.delete] 
     12deleteVacationRule = modules/filters/interceptors/FilterMapping.php 
    1213deleteRule = modules/filters/interceptors/FilterMapping.php 
    1314 
     
    2223makeId = modules/filters/interceptors/FilterMapping.php 
    2324applySieveFilter = modules/filters/interceptors/FilterMapping.php 
     25verifyVacationRule = modules/filters/interceptors/FilterMapping.php 
    2426 
    2527 
    2628[after.update] 
    2729makeId = modules/filters/interceptors/FilterMapping.php 
     30verifyVacationRule = modules/filters/interceptors/FilterMapping.php 
    2831 
    2932 
  • branches/2.4/prototype/config/labeled.ini

    r6638 r6754  
    11;service = PostgreSQL 
    22;PostgreSQL.concept = expressomail_message_label 
     3 
    34service = Imap 
    45Imap.concept = labeled 
  • branches/2.4/prototype/config/user.ini

    r6644 r6754  
    4444givenName = givenName 
    4545sn = sn 
     46dn = dn 
     47vacationInfo = vacationInfo 
     48vacationActive = vacationActive 
    4649displayName = displayName 
    4750mailAlternateAddress = mailAlternateAddress 
     
    5255phpgwAccountVisible = phpgwAccountVisible 
    5356gidNumber = gidNumber 
     57telephoneNumber=telephoneNumber 
  • branches/2.4/prototype/me.php

    r5399 r6754  
    11<?php 
    2  
    32require_once  (dirname(__FILE__).'/api/controller.php'); 
     3use prototype\api\Config as Config; 
    44 
    55$me = Controller::read(array('concept' => 'user', 'service' => 'OpenLDAP'  , 'id' => Config::me('uidNumber'))); 
    66 
     7// 
     8//if(isset($_POST['refreshToken'])){ 
     9//     
     10//    $ch = curl_init(); 
     11// 
     12//    $restConf = parse_ini_file( __DIR__ . '/config/REST.ini', true ); 
     13// 
     14//    $param  = 'grant_type=refresh_token'; 
     15//    $param .= '&client_id=' . $restConf['oauth']['client_id']; 
     16//    $param .= '&client_secret=' . $restConf['oauth']['client_secret']; 
     17//    $param .= '&refresh_token=' . $_SESSION['oauth']['refresh_token']; 
     18// 
     19//    // set URL and other appropriate options 
     20//    curl_setopt($ch, CURLOPT_URL, $restConf['oauth']['url_token']); 
     21//    curl_setopt($ch, CURLOPT_HTTPHEADER, array('Accept: */*')); 
     22//    curl_setopt($ch, CURLOPT_POST, TRUE); 
     23//    curl_setopt($ch, CURLOPT_POSTFIELDS, $param); 
     24//    curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);  //configura para nao imprimir a saida na tela 
     25//    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 2);//Passe um número long como parâmetro que contêm o limite de tempo, em segundos, que você permite as funções CURL levar.  
     26// 
     27//    // grab URL and pass it to the browser 
     28//    $res = curl_exec($ch); 
     29// 
     30//    // close cURL resource, and free up system resources 
     31//    curl_close($ch); 
     32//    $a = json_decode($res); 
     33// 
     34//    if ( isset($a->access_token) ) { 
     35//      $_SESSION['oauth']['access_token'] = $a->access_token; 
     36//      $_SESSION['oauth']['expires_in'] = $a->expires_in; 
     37//      $_SESSION['oauth']['token_type'] = $a->token_type; 
     38//      $_SESSION['oauth']['scope'] = $a->scope; 
     39//      $_SESSION['oauth']['refresh_token'] = $a->refresh_token; 
     40//      $_SESSION['oauth']['client_secret'] = $restConf['oauth']['client_secret']; 
     41//    }  else { 
     42//      echo json_encode(null); 
     43//      return; 
     44//    } 
     45//} 
     46 
     47 
     48$me['token'] = 'asdf1as5d1f56a1sdf1qw5e1q2we5qfq8ew';//$_SESSION['oauth']['access_token']; 
    749echo json_encode( $me ); 
    850 
  • branches/2.4/prototype/modules/calendar/alarms.php

    r6378 r6754  
    77require_once ROOTPATH.'/modules/calendar/constants.php'; 
    88require_once ROOTPATH.'/api/parseTPL.php'; 
     9 
     10use prototype\api\Config as Config; 
    911 
    1012$target = (gmdate('U') - 300 ).'000'; 
  • branches/2.4/prototype/modules/calendar/css/layout.css

    r6501 r6754  
    227227.new-event-win ul.attendee-permissions-list, li.attendee-permissions-list{text-align: left;} 
    228228 
    229 li.attendee-permissions-list input{width: 20px !important; margin: 3px 0 0 0 !important;}  
     229li.attendee-permissions-list input{width: 20px !important; margin: 3px 0 0 0 !important;} 
    230230 
    231231p.request-update{display: inline; position: relative; top: 2px;} 
     
    401401 
    402402label.messagesHelpers{display: block; position: absolute; left: 60px; top: 21px;} 
     403 
    403404/* -- calendar list styles -- */ 
    404405 
  • branches/2.4/prototype/modules/calendar/interceptors/DAViCalAdapter.php

    r6010 r6754  
    11<?php 
    22require_once ROOTPATH.'/modules/calendar/constants.php'; 
     3use prototype\api\Config as Config; 
    34 
    45class DAViCalAdapter {  
  • branches/2.4/prototype/modules/calendar/interceptors/DBMapping.php

    r6588 r6754  
    55 
    66require_once ROOTPATH . '/modules/calendar/interceptors/Helpers.php'; 
     7 
     8use prototype\api\Config as Config; 
    79 
    810class DBMapping extends Helpers { 
     
    147149                        .'(range_start >= \'' . $start[1] . '\' AND range_start <= \'' . $end[1] . '\') OR ' 
    148150                        .'(range_start <= \'' . $start[2] . '\' AND range_end >= \'' . $end[2] . '\')) ' 
    149                 .(!empty($ids) ? ' ' .'AND calendar_object.id NOT IN (\'' . implode('\',\'', $ids) . '\') ' : ' ')  
    150                 .'AND calendar_object.dtstart NOT IN (SELECT calendar_repeat_occurrence.occurrence from calendar_repeat_occurrence, '  
    151                 .'calendar_repeat where (calendar_repeat_occurrence.repeat_id = calendar_repeat.id) '  
    152                 .'AND (calendar_repeat.object_id = calendar_object.id))'; 
     151                .(!empty($ids) ? ' ' .'AND calendar_object.id NOT IN (\'' . implode('\',\'', $ids) . '\') ' : ' ') 
     152                .'AND calendar_object.dtstart NOT IN (SELECT calendar_repeat_occurrence.occurrence from calendar_repeat_occurrence, ' 
     153                .'calendar_repeat where (calendar_repeat_occurrence.repeat_id = calendar_repeat.id) ' 
     154                .'AND (calendar_repeat.object_id = calendar_object.id))'; 
    153155 
    154156                $params = Controller::service('PostgreSQL')->execResultSql($sql.$where); 
     
    206208        //Recurepa as execeções anteriores caso exista 
    207209        if (isset($lastExceptions) && count($lastExceptions) && $lastExceptions) 
    208             foreach ($lastExceptions as $value)  
    209                 array_push($exceptions, $value['occurrence']); 
     210            foreach ($lastExceptions as $value) 
     211                array_push($exceptions, $value['occurrence']); 
    210212 
    211213        $params = array_diff(self::decodeRepeat($repeat, $ranges[0]['rangeStart'], $ranges[0]['rangeEnd']), $exceptions); 
     
    215217        if (!empty($params)) 
    216218            Controller::service('PostgreSQL')->execResultSql("INSERT INTO calendar_repeat_occurrence(repeat_id,exception,occurrence)VALUES('" . $id . "','0','" . implode("'),('" . $id . "','0','", $params) . "')" . ( empty($exceptions) ? "" : ",('" . $id . "','1','" . implode("'),('" . $id . "','1','", $exceptions) . "')" )); 
    217         else if(!empty($exceptions))  
    218             Controller::service('PostgreSQL')->execResultSql("INSERT INTO calendar_repeat_occurrence(repeat_id,exception,occurrence)VALUES ('" . $id . "','1','" . implode("'),('" . $id . "','1','", $exceptions) . "')" );  
    219    } 
     219        else if(!empty($exceptions)) 
     220            Controller::service('PostgreSQL')->execResultSql("INSERT INTO calendar_repeat_occurrence(repeat_id,exception,occurrence)VALUES ('" . $id . "','1','" . implode("'),('" . $id . "','1','", $exceptions) . "')" ); 
     221    }        
    220222 
    221223    public function checkOccurrences($start, $end, $calendarIds) { 
     
    543545 
    544546                if (isset($v['id'])) { 
    545                     $data = self::decodeParticipantsEvent($uri, $v, $criteria, $original);  
    546          
    547                     $result[$i]['statusAttendees'] = isset($data['statusAttendees']) ? $data['statusAttendees'] : false;  
    548                     $result[$i]['sizeAttendees'] = isset($data['sizeAttendees']) ? $data['sizeAttendees'] : false;  
    549                     $result[$i]['participants'] = $data['attendees'];  
    550          
     547                    $data = self::decodeParticipantsEvent($uri, $v, $criteria, $original); 
     548 
     549                    $result[$i]['statusAttendees'] = isset($data['statusAttendees']) ? $data['statusAttendees'] : false; 
     550                    $result[$i]['sizeAttendees'] = isset($data['sizeAttendees']) ? $data['sizeAttendees'] : false; 
     551                    $result[$i]['participants'] = $data['attendees']; 
     552 
    551553                    $attachmentRelation = Controller::find(array('concept' => 'schedulableToAttachment'), false, array('filter' => array('=', 'schedulable', $v['id']))); 
    552554                    if (is_array($attachmentRelation)) { 
     
    571573        return $result; 
    572574    } 
    573  
     575     
    574576 
    575577//TODO: Remover apos suporte a deepness na api 
     
    698700///////////////////////////////////////////////////////////////////////// 
    699701 
    700     static function decodeParticipantsEvent( &$uri, $result, &$criteria, $original) {  
    701         $participants = Controller::find( array( 'concept' => 'participant' ) , false ,array( 'filter' => array('=', 'schedulable'  ,  $result['id']) ));  
    702                   
    703         if($participants && ($size = count($participants)) < 100){  
    704             if(isset($original['criteria']['deepness']) && $original['criteria']['deepness'] != 0){  
    705                self::deepnessFindParticipant($uri, $participants, $criteria, $original);  
    706                 $participants['attendees'] = $participants;  
    707             }  
    708                               
    709         }else if($participants && ($size = count($participants)) > 100){  
    710            $owner = Controller::read( array( 'concept' => 'calendarSignature' ) , false ,array( 'filter' => array('AND', array('=', 'calendar'  ,  $result['calendar']), array('=', 'isOwner', '1'))));  
    711            $owner = Controller::read( array( 'concept' => 'participant' ) , false ,array( 'filter' => array('AND', array('=', 'schedulable'  ,  $result['id']), array('=', 'user', $owner[0]['user'])), 'deepness' => 2));  
    712           
    713            if(is_array($owner))  
    714                $owner = $owner[0];  
    715           
    716            $reference = array_slice($participants, 0, 100);  
    717            $organizer = false;  
    718            $asOwner = false;  
    719                   
    720             foreach($reference as $r => &$v){  
    721                 if($v['id'] == $owner['id']){  
    722                    $v = $owner;  
    723                    $asOwner = true;  
    724                    continue;  
    725                 }  
    726                   
    727                 self::deepnessReadParticipant($uri, $v, $criteria, $original);  
    728           
    729                 if($v['isOrganizer'] == "1" )  
    730                    $organizer = $v;  
    731            }  
    732           
    733            if(!$organizer){  
    734                $organizer = Controller::find( array( 'concept' => 'participant' ) , false ,array( 'filter' => array('AND', array('=', 'schedulable'  ,  $result['id']), array('=', 'isOrganizer', '1')), 'deepness' => 2));  
    735                   
    736                array_push($reference, $organizer[0]);  
    737           
    738            }else if($organizer && ($organizer['id'] != $owner['id']))  
    739                array_merge($reference, $organizer);  
    740          
    741            if(!$asOwner)  
    742                array_push($reference, $owner);  
    743                   
    744            $statusAttendees = array( 'default' => 0, 'accepted' => 0, 'tentative' => 0, 'cancelled' => 0, 'unanswered' => 0, 'delegated' => 0 );  
    745            $statusLabels = array( 'default', 'accepted', 'tentative', 'cancelled', 'unanswered', 'delegated' );  
    746                   
    747            foreach($participants as $k => &$p){  
    748                if(!$organizer && $p['isOrganizer'] == "1"){  
    749                    self::deepnessReadParticipant($uri, $p, $criteria, $original);  
    750                    $reference = array_merge($reference, array($p));  
    751                }  
    752                   
    753                $statusAttendees[$statusLabels[$p['status']]]++;  
    754            }  
    755                   
    756            $participants['statusAttendees'] = $statusAttendees;  
    757            $participants['sizeAttendees'] = $size;  
    758            $participants['attendees'] = $reference;  
    759         }  
    760                           
    761         return $participants;  
    762     }  
    763               
    764     static function dayAlarm( &$uri , &$params , &$criteria , $original ) {     
     702    static function decodeParticipantsEvent( &$uri, $result, &$criteria, $original) { 
     703        $participants = Controller::find( array( 'concept' => 'participant' ) , false ,array( 'filter' => array('=', 'schedulable'  ,  $result['id']) )); 
     704 
     705        if($participants && ($size = count($participants)) < 100){ 
     706            if(isset($original['criteria']['deepness']) && $original['criteria']['deepness'] != 0){ 
     707                self::deepnessFindParticipant($uri, $participants, $criteria, $original); 
     708                 $participants['attendees'] = $participants; 
     709            } 
     710             
     711        }else if($participants && ($size = count($participants)) > 100){ 
     712            $owner = Controller::read( array( 'concept' => 'calendarSignature' ) , false ,array( 'filter' => array('AND', array('=', 'calendar'  ,  $result['calendar']), array('=', 'isOwner', '1')))); 
     713            $owner = Controller::read( array( 'concept' => 'participant' ) , false ,array( 'filter' => array('AND', array('=', 'schedulable'  ,  $result['id']), array('=', 'user', $owner[0]['user'])), 'deepness' => 2)); 
     714 
     715            if(is_array($owner)) 
     716                $owner = $owner[0]; 
     717 
     718            $reference = array_slice($participants, 0, 100); 
     719            $organizer = false; 
     720            $asOwner = false; 
     721 
     722            foreach($reference as $r => &$v){ 
     723                if($v['id'] == $owner['id']){ 
     724                    $v = $owner; 
     725                    $asOwner = true; 
     726                    continue; 
     727                } 
     728 
     729                self::deepnessReadParticipant($uri, $v, $criteria, $original); 
     730 
     731                if($v['isOrganizer'] == "1" ) 
     732                    $organizer = $v; 
     733            } 
     734 
     735            if(!$organizer){ 
     736                $organizer = Controller::find( array( 'concept' => 'participant' ) , false ,array( 'filter' => array('AND', array('=', 'schedulable'  ,  $result['id']), array('=', 'isOrganizer', '1')), 'deepness' => 2)); 
     737 
     738                array_push($reference, $organizer[0]); 
     739 
     740            }else if($organizer && ($organizer['id'] != $owner['id'])) 
     741                array_merge($reference, $organizer); 
     742 
     743            if(!$asOwner) 
     744                array_push($reference, $owner); 
     745 
     746            $statusAttendees = array( 'default' => 0, 'accepted' => 0, 'tentative' => 0, 'cancelled' => 0, 'unanswered' => 0, 'delegated' => 0 ); 
     747            $statusLabels = array( 'default', 'accepted', 'tentative', 'cancelled', 'unanswered', 'delegated' ); 
     748 
     749            foreach($participants as $k => &$p){ 
     750                if(!$organizer && $p['isOrganizer'] == "1"){ 
     751                    self::deepnessReadParticipant($uri, $p, $criteria, $original); 
     752                    $reference = array_merge($reference, array($p)); 
     753                } 
     754 
     755                $statusAttendees[$statusLabels[$p['status']]]++; 
     756            } 
     757 
     758            $participants['statusAttendees'] = $statusAttendees; 
     759            $participants['sizeAttendees'] = $size; 
     760            $participants['attendees'] = $reference; 
     761        } 
     762         
     763        return $participants; 
     764    } 
     765     
     766    static function dayAlarm( &$uri , &$params , &$criteria , $original ) { 
    765767        if(isset($criteria['filter'][1]) && $criteria['filter'][1] == 'date') 
    766768        { 
     
    898900        Controller::delete(array('concept' => 'attachment', 'id' => $original['URI']['id'])); 
    899901    } 
    900  
    901     public function decodeDeleteCalendarSignatureAlarm(&$uri, &$params, &$criteria, $original) {  
    902             if ($original['URI']['id'] == '' && isset($original['criteria']['filter'])){  
    903                     Controller::deleteAll(array('concept' => 'calendarSignatureAlarm'), null,$original['criteria']);  
    904                     return false;  
    905             }  
    906     }  
     902     
     903    public function decodeDeleteCalendarSignatureAlarm(&$uri, &$params, &$criteria, $original) { 
     904                if ($original['URI']['id'] == '' && isset($original['criteria']['filter'])){ 
     905                        Controller::deleteAll(array('concept' => 'calendarSignatureAlarm'), null,$original['criteria']); 
     906                        return false; 
     907                } 
     908    } 
     909 
    907910    public function createDefaultSignature(&$uri, &$result, &$criteria, $original) { 
    908911 
     
    963966                //Criaremos uma agenda padrão 
    964967                $cal = array('name' => 'Calendario', 
    965                   'description' => 'Calendario Padrão',  
     968                    'description' => 'Calendario Padrão', 
    966969                    'timezone' => (date_default_timezone_get()) ? date_default_timezone_get() : 'America/Sao_Paulo', 
    967970                    'dtstamp' => time() . '000' 
  • branches/2.4/prototype/modules/calendar/interceptors/Notifications.php

    r6331 r6754  
    55require_once ROOTPATH . '/plugins/icalcreator/iCalcreator.class.php'; 
    66require_once ROOTPATH . '/api/parseTPL.php'; 
     7 
     8use prototype\api\Config as Config; 
    79 
    810class Notifications extends Helpers { 
  • branches/2.4/prototype/modules/calendar/js/calendar.codecs.js

    r6588 r6754  
    349349            return { 
    350350                participant : meAttendee(form.attendee),  
    351                 startTime: Date.parseExact(form.startDate + " "+$.trim(form.startHour) , formatString ).toString(!!form.allDay ? 'yyyy-MM-dd 00:00:00' : 'yyyy-MM-dd HH:mm:00'),  
    352                 endTime:  Date.parseExact(form.endDate + " "+$.trim(form.endHour), formatString ).toString(!!form.allDay ? 'yyyy-MM-dd 00:00:00' : 'yyyy-MM-dd HH:mm:00'),  
     351                startTime: Date.parseExact(form.startDate + " "+$.trim(form.startHour) , formatString ).toString(!!form.allDay ? 'yyyy-MM-dd 00:00:00' : 'yyyy-MM-dd HH:mm:00'), 
     352                endTime:  Date.parseExact(form.endDate + " "+$.trim(form.endHour), formatString ).toString(!!form.allDay ? 'yyyy-MM-dd 00:00:00' : 'yyyy-MM-dd HH:mm:00'), 
    353353                allDay: ( !!form.allDay ? 1 : 0 ), 
    354354                schedulable: form.idEvent 
     
    499499 
    500500            var isShared = !objEvent.id ? false : (!!objEvent.calendar) && parseInt(Calendar.signatureOf[objEvent.calendar].isOwner) ? false : true; 
    501             var limitAttendee = false;  
     501            var limitAttendee = false; 
    502502 
    503503            return { 
     
    587587                me: me, 
    588588                delegatedFrom: delegatedFrom, 
    589                 statusParticipants: (objEvent.sizeAttendees != "") ? objEvent.statusAttendees : statusParticipants,  
    590                 sizeAttendeeLimit: (objEvent.sizeAttendees != "") ? objEvent.sizeAttendees : false  
     589                statusParticipants: (objEvent.sizeAttendees != "") ? objEvent.statusAttendees : statusParticipants, 
     590                sizeAttendeeLimit: (objEvent.sizeAttendees != "") ? objEvent.sizeAttendees : false 
    591591            }; 
    592592        }); 
     
    641641    patati['byday'] = day.join(','); 
    642642 
    643     var formatString = User.preferences.dateFormat + " " + User.preferences.hourFormat;  
    644    
    645     var date = Date.parseExact( form.startDate + " "+$.trim(form.startHour) , formatString )  
    646               
     643    var formatString = User.preferences.dateFormat + " " + User.preferences.hourFormat; 
     644 
     645    var date = Date.parseExact( form.startDate + " "+$.trim(form.startHour) , formatString ) 
     646     
    647647    patati['startTime'] = date.toString(!!form.allDay ? 'yyyy-MM-dd 00:00:00' : 'yyyy-MM-dd HH:mm:00'); 
    648  
     648         
    649649    if( !patati['byday'] ) 
    650650        switch(form.frequency) { 
     
    657657                break; 
    658658            case 'yearly': 
    659                 patati['byyearday'] = (1 + date.getDayOfYear());  
     659                patati['byyearday'] = (1 + date.getDayOfYear()); 
    660660                break; 
    661661            default : 
     
    667667         
    668668    if (($(".endRepeat").val() == 'customDate')) 
    669         patati['endTime'] = Date.parseExact( $(".customDateEnd").val() + (" "+$.trim(form.endHour)) , formatString ).toString(!!form.allDay ? 'yyyy-MM-dd 00:00:00' : 'yyyy-MM-dd HH:mm:00');  
    670     
    671  patati['interval']  = $(".eventInterval").val(); 
     669        patati['endTime'] = Date.parseExact( $(".customDateEnd").val() + (" "+$.trim(form.endHour)) , formatString ).toString(!!form.allDay ? 'yyyy-MM-dd 00:00:00' : 'yyyy-MM-dd HH:mm:00'); 
     670         
     671    patati['interval']  = $(".eventInterval").val(); 
    672672 
    673673    /** 
     
    722722            return DataLayer.merge({ 
    723723                "class": form["class"], 
    724                 startTime: Date.parseExact(form.startDate + " "+$.trim(form.startHour) , formatString ).toString(!!form.allDay ? 'yyyy-MM-dd 00:00:00' : 'yyyy-MM-dd HH:mm:00'),  
    725                 endTime:  Date.parseExact(form.endDate + " "+$.trim(form.endHour), formatString ).toString(!!form.allDay ? 'yyyy-MM-dd 00:00:00' : 'yyyy-MM-dd HH:mm:00'),  //+ (!!form.allDay ? 86400000 : 0) ,  
     724                startTime: Date.parseExact(form.startDate + " "+$.trim(form.startHour) , formatString ).toString(!!form.allDay ? 'yyyy-MM-dd 00:00:00' : 'yyyy-MM-dd HH:mm:00'), 
     725                endTime:  Date.parseExact(form.endDate + " "+$.trim(form.endHour), formatString ).toString(!!form.allDay ? 'yyyy-MM-dd 00:00:00' : 'yyyy-MM-dd HH:mm:00'),  //+ (!!form.allDay ? 86400000 : 0) , 
    726726                allDay: ( !!form.allDay ? 1 : 0 ),        
    727727                id: form.idEvent, 
  • branches/2.4/prototype/modules/calendar/js/calendar.contentMenu.js

    r6588 r6754  
    2626                var schedulable = DataLayer.get('schedulable', idEvent); 
    2727 
    28                 var isRecurrence = DataLayer.get('repeat', schedulable.repeat).frequency || false;  
    29                   
    30                 var top = $('#divAppbox').scrollTop();   
    31                    
     28                var isRecurrence = DataLayer.get('repeat', schedulable.repeat).frequency || false; 
     29 
     30                var top = $('#divAppbox').scrollTop(); 
     31 
    3232                var template = DataLayer.render( 'templates/menu_context_event.ejs', {event: schedulable.id , 
    33                     top: (event.clientY - 135 + top), left: (event.clientX - 445),   
    34                     signature: Calendar.signatureOf[idCalendar],  
    35                     calendars: Calendar.calendars, isRecurrence: (!isRecurrence || isRecurrence == 'none') ? false : true, 
     33                    top: (event.clientY - 135 + top), left: (event.clientX - 445),  
     34                    signature: Calendar.signatureOf[idCalendar], 
     35                    calendars: Calendar.calendars, isRecurrence: (!isRecurrence || isRecurrence == 'none') ? false : true, 
    3636                    idRecurrence: idRecurrence 
    3737                }); 
    38                  
     38 
    3939                $('#context-menu-event').html(template); 
    40                  
     40 
    4141                var method = function(value){ 
    4242                    switch (value){ 
  • branches/2.4/prototype/modules/calendar/js/calendar.date.js

    r6453 r6754  
    143143                return dateFormat( date, format.replace(/m/g, 'M') ); 
    144144 
    145         },  
    146                   
    147         toString: function(date, format){  
    148                         return dateFormat( date, format.replace(/M/g, 'm') );  
    149         },  
    150           
    151         decodeRange: function(date, range){  
    152                         return (parseInt(date.getTime()) + (range * 60000));  
     145        }, 
     146 
     147        toString: function(date, format){ 
     148                        return dateFormat( date, format.replace(/M/g, 'm') ); 
     149        }, 
     150         
     151        decodeRange: function(date, range){ 
     152                        return (parseInt(date.getTime()) + (range * 60000)); 
    153153        } 
    154154                 
  • branches/2.4/prototype/modules/calendar/js/calendar.shared.js

    r6613 r6754  
    7171                    }); 
    7272            }); 
    73                                  
    74                                  
    75            DataLayer.commit();  
    76            UI.dialogs.sharedCalendar.dialog("close"); 
     73 
     74            DataLayer.commit(); 
     75            UI.dialogs.sharedCalendar.dialog("close"); 
    7776        }; 
    7877 
  • branches/2.4/prototype/modules/calendar/js/helpers.js

    r6734 r6754  
    1313 
    1414function validDateEvent(){ 
    15     
    16     var errors = {  
    17             'emptyInitData': 'Por favor, informe uma data inicial',  
    18             'emptyEndData': 'Por favor, informe uma data final',  
    19             'emptyInitHour': 'Por favor, informe uma hora inicial',  
    20             'emptyEndHour': 'Por favor, informe uma hora final',  
    21               
    22             'invalidInitData' : 'Data inicial inválida',  
    23             'invalidEndData' : 'Data final inválida',  
    24               
    25             'equalData' : 'Hora inicial igual a final',  
    26             'theirData' : 'Data final menor que a inicial',           
    27             'theirHour' : 'Hora final menor que a inicial',  
    28               
    29             'emptyOcurrence' : 'Por favor, informe o número de ocorrências',  
    30             'invalidOcurrence' : 'Por favor, informe um valor válido para a quantidade de ocorrências',  
    31                
    32             'emptyInterval' : 'Por favor, informe o intervalo',  
    33             'invalidInterval' : 'Por favor informe um valor válido para o intervalo'  
    34     };  
     15         
     16        var errors = { 
     17                'emptyInitData': 'Por favor, informe uma data inicial', 
     18                'emptyEndData': 'Por favor, informe uma data final', 
     19                'emptyInitHour': 'Por favor, informe uma hora inicial', 
     20                'emptyEndHour': 'Por favor, informe uma hora final', 
     21                 
     22                'invalidInitData' : 'Data inicial inválida', 
     23                'invalidEndData' : 'Data final inválida', 
     24                 
     25                'equalData' : 'Hora inicial igual a final', 
     26                'theirData' : 'Data final menor que a inicial',          
     27                'theirHour' : 'Hora final menor que a inicial', 
     28                 
     29                'emptyOcurrence' : 'Por favor, informe o número de ocorrências', 
     30                'invalidOcurrence' : 'Por favor, informe um valor válido para a quantidade de ocorrências', 
     31                 
     32                'emptyInterval' : 'Por favor, informe o intervalo', 
     33                'invalidInterval' : 'Por favor informe um valor válido para o intervalo' 
     34        }; 
    3535 
    3636    var start_date = $(".new-event-win.active .start-date").val(); 
     
    4444     
    4545    if(start_date == "") 
    46         return errors['emptyInitData'];  
     46                return errors['emptyInitData']; 
    4747    else if(end_date == "") 
    48         return errors['emptyEndData'];  
     48                return errors['emptyEndData']; 
    4949    else if(!isAllDay && start_time == "") 
    50         return errors['emptyInitHour'];  
     50                return errors['emptyInitHour']; 
    5151    else if(!isAllDay && end_time == "") 
    52         return errors['emptyEndHour'];  
    53                
    54         var formatString = User.preferences.dateFormat + " " + User.preferences.hourFormat;  
    55                       
    56         var startDate = Date.parseExact( start_date + " " + $.trim(start_time) , formatString );  
    57         var endDate = Date.parseExact( end_date + " " + $.trim(end_time) , formatString );  
     52                return errors['emptyEndHour']; 
     53         
     54    var formatString = User.preferences.dateFormat + " " + User.preferences.hourFormat; 
     55                 
     56    var startDate = Date.parseExact( start_date + " " + $.trim(start_time) , formatString ); 
     57    var endDate = Date.parseExact( end_date + " " + $.trim(end_time) , formatString ); 
    5858 
    5959    if(startDate == null || startDate.getTime() < 0 ) 
    60         return errors['invalidInitData']; 
     60                return errors['invalidInitData']; 
    6161    if(endDate == null || endDate.getTime() < 0) 
    62         return errors['invalidEndData'];  
    63               
    64         if(isAllDay){  
    65                 startDate.clearTime();  
    66                 endDate.clearTime();  
    67                 if(endDate.compareTo(startDate) == -1)  
    68                         return errors['theirData'];  
    69         }else{  
    70                 var condition = endDate.compareTo(startDate);  
    71                                 if(condition != 1){  
    72                                         if(condition < 0){  
    73                                                 startDate.clearTime();  
    74                                                 endDate.clearTime();  
    75                                                 condition = endDate.compareTo(startDate);                                 
    76                                                 return (errors[ condition == 0 ? 'theirHour' : 'theirData'] );  
    77                                         }  
    78                                         else  
    79                                                 return errors['equalData'];  
    80                                 } 
    81         } 
     62                return errors['invalidEndData']; 
     63         
     64        if(isAllDay){ 
     65                startDate.clearTime(); 
     66                endDate.clearTime(); 
     67                if(endDate.compareTo(startDate) == -1) 
     68                        return errors['theirData']; 
     69        }else{ 
     70                var condition = endDate.compareTo(startDate); 
     71                if(condition != 1){ 
     72                        if(condition < 0){ 
     73                                startDate.clearTime(); 
     74                                endDate.clearTime(); 
     75                                condition = endDate.compareTo(startDate);                                
     76                                return (errors[ condition == 0 ? 'theirHour' : 'theirData'] ); 
     77                        } 
     78                        else 
     79                                return errors['equalData']; 
     80                } 
     81        } 
    8282     
    83    if (customDate)      
    84               if ( !($('.new-event-win.active .customDateEnd').val().length) )  
    85                  return errors['emptyEndData'];  
    86             
    87    if (occurrences){ 
    88        if ( !($('.occurrencesEnd').val().length) )  
    89           return errors['emptyOcurrence'];  
    90        else if (parseInt($('.occurrencesEnd').val(),10) <= 0 || parseInt($('.occurrencesEnd').val(),10).toString() == "NaN")  
    91           return errors['invalidOcurrence'];  
    92    }  
     83    if (customDate)     
     84                if ( !($('.new-event-win.active .customDateEnd').val().length) ) 
     85                   return errors['emptyEndData']; 
     86 
     87    if (occurrences){ 
     88                if ( !($('.occurrencesEnd').val().length) )  
     89                   return errors['emptyOcurrence']; 
     90                else if (parseInt($('.occurrencesEnd').val(),10) <= 0 || parseInt($('.occurrencesEnd').val(),10).toString() == "NaN") 
     91                   return errors['invalidOcurrence']; 
     92        } 
    9393 
    9494    if (!($('.new-event-win.active p.input-group.finish_event.repeat-in').hasClass('hidden'))){ 
    9595        if (!eventInterval.length) 
    96            return errors['emptyInterval'];  
     96            return errors['emptyInterval']; 
    9797        else if (parseInt(eventInterval,10) < 1 || parseInt(eventInterval,10).toString() == "NaN") 
    98            return errors['invalidInterval'];  
     98            return errors['invalidInterval']; 
    9999    }     
    100100    return false; 
     
    337337                    $('.qtip-active').find('input[name="'+acl_names[aclsParticipant.charAt(i)]+'"]').attr('checked', true); 
    338338                } 
     339                                                         
     340            $('.qtip .button').button(); 
    339341                                         
    340                                          
    341                 $('.qtip .button').button();                                     
    342342        }; 
    343343        }else{ 
     
    402402        position: 'center',  
    403403        close: function(event, ui) { 
    404             /** 
     404                /** 
    405405                 * Remove tooltip possivelmente existente 
    406406                 */ 
    407             if ($('.qtip.qtip-blue.qtip-active').length)  
    408                 $('.qtip.qtip-blue.qtip-active').qtip('destroy');                                                 
    409         attendees  = {}; 
    410  
     407                if ($('.qtip.qtip-blue.qtip-active').length) 
     408                        $('.qtip.qtip-blue.qtip-active').qtip('destroy');                                                
     409                attendees  = {}; 
    411410        }, 
    412411        beforeClose: function(event, ui) { 
     
    442441                                zebraDiscardEventDialog = false; 
    443442                            } 
    444                                  
    445                                 /**                                      
    446                                 * Uma vez aberta uma janela de confirmação (Zebra_Dialog), ao fechá-la  
    447                                 * com ESC, para que o evento ESC não seja propagado para fechamento da  
    448                                 * janela de edição de eventos, deve ser setada uma flag indicando que  
    449                                 * já existe uma janela de confirmação aberta.  
    450                                 */  
     443                                                                         
     444                            /** 
     445                            * Uma vez aberta uma janela de confirmação (Zebra_Dialog), ao fechá-la 
     446                            * com ESC, para que o evento ESC não seja propagado para fechamento da 
     447                            * janela de edição de eventos, deve ser setada uma flag indicando que 
     448                            * já existe uma janela de confirmação aberta. 
     449                            */ 
    451450                            if (!clicked) { 
    452451                                window.setTimeout(function() { 
     
    462461            //DataLayer.rollback(); 
    463462            return canDiscardEventDialog; 
    464         },  
    465     dragStart: function(event, ui) {  
    466             if ($('.qtip.qtip-blue.qtip-active').length)  
    467                     $('.qtip.qtip-blue.qtip-active').qtip('destroy'); 
     463        }, 
     464        dragStart: function(event, ui) { 
     465                if ($('.qtip.qtip-blue.qtip-active').length) 
     466                        $('.qtip.qtip-blue.qtip-active').qtip('destroy'); 
    468467        } 
    469468    }); 
     
    473472} 
    474473                 
    475 var tabs = UI.dialogs.addEvent.children('.content').tabs({  
    476         select: function(event, ui) {  
    477                 if ($('.qtip.qtip-blue.qtip-active').length)  
    478                         $('.qtip.qtip-blue.qtip-active').qtip('destroy');  
    479         }         
    480         }); 
     474var tabs = UI.dialogs.addEvent.children('.content').tabs({ 
     475        select: function(event, ui) {  
     476                if ($('.qtip.qtip-blue.qtip-active').length) 
     477                        $('.qtip.qtip-blue.qtip-active').qtip('destroy'); 
     478        }        
     479        }); 
    481480var calendar = DataLayer.get('calendar', objEvent.calendar); 
    482481                                 
     
    493492 
    494493    UI.dialogs.addEvent.find('#calendar_addevent_details3').html(repeatHtml); 
    495     $(".date").datepicker({  
    496                 dateFormat: User.preferences.dateFormat.replace(/M/g, 'm').replace(/yyyy/g, 'yy')  
    497                 });  
     494    $(".date").datepicker({ 
     495                dateFormat: User.preferences.dateFormat.replace(/M/g, 'm').replace(/yyyy/g, 'yy') 
     496                }); 
    498497                   
    499498    if(objEvent.repeat)  
     
    675674} 
    676675 
    677 /*Seleciona a agenda padrão para visualização/edição de um evento*/  
    678 if(objEvent.id)  
    679     UI.dialogs.addEvent.find('option[value="'+objEvent.calendar+'"]').attr('selected','selected').trigger('change');  
    680                  
     676/*Seleciona a agenda padrão para visualização/edição de um evento*/ 
     677if(objEvent.id) 
     678    UI.dialogs.addEvent.find('option[value="'+objEvent.calendar+'"]').attr('selected','selected').trigger('change'); 
     679 
    681680/*Adicionar alarms padrões, quando alterado a agenda do usuário*/                
    682681UI.dialogs.addEvent.find('select[name="calendar"]').change(function(){ 
     
    704703} 
    705704 
    706 var participant =  UI.dialogs.addEvent.find('dd.me input[name="attendee[]"]').val();  
    707         var calendar = $(this).val();  
    708            
    709         if( !parseInt(Calendar.signatureOf[calendar].isOwner) ){  
    710         var signature = Calendar.signatureOf[calendar];  
     705    var participant =  UI.dialogs.addEvent.find('dd.me input[name="attendee[]"]').val(); 
     706    var calendar = $(this).val(); 
     707     
     708    if( !parseInt(Calendar.signatureOf[calendar].isOwner) ){ 
     709        var signature = Calendar.signatureOf[calendar]; 
    711710        var organizer = DataLayer.get('calendarSignature', { 
    712711            filter: ['AND', ['=','calendar',signature.calendar.id], ['=','isOwner','1']],  
     
    15541553    if(acls.remove) 
    15551554        UI.dialogs.addEvent.find('.button.remove').show(); 
    1556                  
    1557     UI.dialogs.addEvent.find('.button.cancel').show(); 
     1555     
     1556    UI.dialogs.addEvent.find('.button.cancel').show();   
    15581557} 
    15591558 
     
    15611560 
    15621561/*Seleciona a agenda padrão para criação de um evento*/ 
    1563 if(!objEvent.id){  
    1564     var selectedCalendar = (objEvent.calendar != undefined) ? objEvent.calendar : (User.preferences.defaultCalendar ? User.preferences.defaultCalendar : myCalendar());  
    1565     UI.dialogs.addEvent.find('option[value="'+selectedCalendar+'"]').attr('selected','selected').trigger('change');  
    1566 }  
     1562if(!objEvent.id){ 
     1563    var selectedCalendar = (objEvent.calendar != undefined) ? objEvent.calendar : (User.preferences.defaultCalendar ? User.preferences.defaultCalendar : myCalendar()); 
     1564    UI.dialogs.addEvent.find('option[value="'+selectedCalendar+'"]').attr('selected','selected').trigger('change'); 
     1565} 
    15671566UI.dialogs.addEvent.find(':input').change(function(event){ 
    15681567    if (event.keyCode != '27' && event.keyCode != '13') 
     
    16971696    var signatures = []; 
    16981697    var previewActiveCalendarConf = 0; 
    1699     var calendarAlarms = [];  
    1700  
     1698        var calendarAlarms = []; 
     1699         
    17011700    for (var i=0; i<Calendar.signatures.length; i++) { 
    17021701        calendars[i]  = Calendar.signatures[i].calendar; 
     
    17221721        var populateAccordionOnActive = function(event, ui) { 
    17231722            var nowActive = (typeof(event) == 'number') ? event : $(event.target).accordion( "option", "active" ); 
    1724             if (nowActive === false)  
    1725                         return; 
     1723            if (nowActive === false) 
     1724                        return; 
    17261725            dataColorPicker.colorsDefined = { 
    17271726                border: '#'+signatures[nowActive].borderColor,  
     
    17461745                }); 
    17471746            form_content.find('.button').button(); 
    1748             jQuery('.preferences-alarms-list').find('.button.remove').click(function(el){  
    1749                         calendarAlarms[calendarAlarms.length] = $(this).parent('li').find('input[name="alarmId[]"]').val();  
    1750                         $(this).parent().remove();  
    1751                 });              
     1747            jQuery('.preferences-alarms-list').find('.button.remove').click(function(el){ 
     1748                        calendarAlarms[calendarAlarms.length] = $(this).parent('li').find('input[name="alarmId[]"]').val(); 
     1749                        $(this).parent().remove(); 
     1750                }); 
    17521751         
    17531752                DataLayer.render( 'templates/timezone_list.ejs', {}, function( timezones_options ){ 
     
    18681867    var template_content = jQuery('#configure_tab').html( template ).find('.configure-calendars-win'); 
    18691868    template_content.find('.button').button().filter('.save').click(function(evt){ 
    1870         if(calendarAlarms.length)  
    1871                 DataLayer.removeFilter('calendarSignatureAlarm', {filter: ['IN','id', calendarAlarms]}); 
     1869        if(calendarAlarms.length) 
     1870                DataLayer.removeFilter('calendarSignatureAlarm', {filter: ['IN','id', calendarAlarms]});         
    18721871        template_content.find('form').submit(); 
    18731872        $tabs.tabs( "remove", "#configure_tab"); 
     
    18771876            refresh_calendars(); 
    18781877        }); 
    1879         if(calendarAlarms.length)  
    1880                 Calendar.load();  
     1878        if(calendarAlarms.length) 
     1879                Calendar.load(); 
    18811880    }).end().filter('.cancel').click(function(evt){ 
    18821881        $tabs.tabs( "remove", "#configure_tab"); 
     
    19041903 
    19051904} else { 
    1906                 $('.positionHelper').css('display','none');  
    1907         $('.cal-list-options-btn').removeClass('fg-menu-open ui-state-active'); 
     1905        $('.positionHelper').css('display','none'); 
     1906    $('.cal-list-options-btn').removeClass('fg-menu-open ui-state-active'); 
    19081907    $tabs.tabs("select", "#configure_tab"); 
    19091908    $('.accordion-user-calendars').accordion( "activate" , previewActiveCalendarConf ); 
     
    20702069        var meu_container = $(".calendars-list").html( html ); 
    20712070         
    2072         var doMenu = function(){  
    2073         $('ul.list-calendars .cal-list-options-btn').each(function(){  
    2074                         $(this).menu({     
    2075                         content: $(this).next().html(),  
    2076                         width: '120',  
    2077                         positionOpts: {  
    2078                                 posX: 'left',    
    2079                                 posY: 'bottom',  
    2080                                 offsetX: 0,  
    2081                                 offsetY: 0,  
    2082                                 directionH: 'right',  
    2083                                 directionV: 'down',    
    2084                                 detectH: true, // do horizontal collision detection     
    2085                                 detectV: true, // do vertical collision detection  
    2086                                 linkToFront: false  
    2087                         },  
    2088                         flyOut: true,  
    2089                         showSpeed: 100,  
    2090                         crumbDefaultText: '>'  
    2091                         });  
    2092                 });  
    2093         }  
    2094         doMenu();  
    2095         $('#divAppbox').on('scroll',function(){  
    2096                 if ($('.cal-list-options-btn.fg-menu-open.ui-state-active')){                     
    2097                         var offset = $('.cal-list-options-btn.fg-menu-open.ui-state-active').offset();  
    2098                         if (offset)  
    2099                                 $('.positionHelper').css('top',offset.top);  
    2100                 }  
    2101         });          
    2102         $('ul.list-calendars .cal-list-options-btn').on('click',function(){doMenu();});  
    2103  
     2071        var doMenu = function(){ 
     2072                $('ul.list-calendars .cal-list-options-btn').each(function(){  
     2073                        $(this).menu({    
     2074                        content: $(this).next().html(),  
     2075                        width: '120',  
     2076                        positionOpts: {  
     2077                                posX: 'left',   
     2078                                posY: 'bottom',  
     2079                                offsetX: 0,  
     2080                                offsetY: 0,  
     2081                                directionH: 'right',  
     2082                                directionV: 'down',   
     2083                                detectH: true, // do horizontal collision detection    
     2084                                detectV: true, // do vertical collision detection  
     2085                                linkToFront: false  
     2086                        },  
     2087                        flyOut: true,  
     2088                        showSpeed: 100,  
     2089                        crumbDefaultText: '>'  
     2090                        });  
     2091                }); 
     2092        } 
     2093        doMenu(); 
     2094        $('#divAppbox').on('scroll',function(){ 
     2095                if ($('.cal-list-options-btn.fg-menu-open.ui-state-active')){                    
     2096                        var offset = $('.cal-list-options-btn.fg-menu-open.ui-state-active').offset(); 
     2097                        if (offset) 
     2098                                $('.positionHelper').css('top',offset.top); 
     2099                } 
     2100        }); 
     2101        $('ul.list-calendars .cal-list-options-btn').on('click',function(){doMenu();});          
     2102         
    21042103        meu_container.find(".button.new-calendar").button({ 
    21052104            icons: { 
     
    25442543// não há resultados     
    25452544 
    2546 var currentView = '#tab_events_list_' + ((Base64.encode(keyword)).replace(/[^\w\s]/gi, "") || '');  
     2545var currentView = '#tab_events_list_' + ((Base64.encode(keyword)).replace(/[^\w\s]/gi, "") || ''); 
    25472546 
    25482547if ((((typeof(results) == 'undefined') || (!results.events_list )) && selecteds) &&(keyword != '' && keyword != null)) { 
    2549     $(currentView).html(  
    2550                 '<div title="Lista de eventos" class="events-list events-list-win active empty">' +  
    2551                 '<label>Não foi encontrado nenhum evento correspondente à sua pesquisa.</label>' +  
    2552                 '</div>'  
     2548    $(currentView).html( 
     2549                '<div title="Lista de eventos" class="events-list events-list-win active empty">' + 
     2550                '<label>Não foi encontrado nenhum evento correspondente à sua pesquisa.</label>' + 
     2551                '</div>' 
    25532552        ); 
    25542553// há resultados e Agendas Selecionadas 
    25552554} else{  
    25562555    if(typeof(results) != 'undefined'){ 
    2557                 results['page_index'] = page_index;  
    2558                 results['keyword'] = keyword;  
    2559                                                   
    2560                 DataLayer.render( 'templates/event_list.ejs', results, function( html ){  
    2561                                                   
    2562                         $(currentView).html( html );  
    2563                         $('.events-list-win .menu-container .button').button();  
    2564                                                                                                                                
    2565                         $(".event-details-item").parent().click(function(){  
    2566                  
    2567                         $(this).siblings("div.details-event-list").toggleClass("hidden")  
    2568                         .find('.button.delete').click(function(){  
    2569                                 var eventId = $(this).siblings('[name="eventid"]').val();  
    2570                                 var calendarId = $(this).siblings('[name="calendarid"]').val();  
    2571                  
    2572                                 remove_event(eventId, calendarId);  
    2573                         })  
    2574                         .end().find('.button.edit').click(function(){                             
    2575                                 eventDetails( DataLayer.get( "schedulable", $(this).siblings('[name="eventid"]').val() ), true );                                         
    2576                         });  
    2577                           
    2578                         });  
    2579                         paginatorListEvent(currentView, (keyword == '' || keyword == null) ? 'list' : 'search',  !!view ? view : User.preferences.defaultCalView);                                       
     2556                results['page_index'] = page_index; 
     2557                results['keyword'] = keyword; 
     2558                                 
     2559                DataLayer.render( 'templates/event_list.ejs', results, function( html ){ 
     2560                         
     2561                        $(currentView).html( html ); 
     2562                        $('.events-list-win .menu-container .button').button(); 
     2563                                                                                                                         
     2564                        $(".event-details-item").parent().click(function(){ 
     2565 
     2566                        $(this).siblings("div.details-event-list").toggleClass("hidden") 
     2567                        .find('.button.delete').click(function(){ 
     2568                                var eventId = $(this).siblings('[name="eventid"]').val(); 
     2569                                var calendarId = $(this).siblings('[name="calendarid"]').val(); 
     2570 
     2571                                remove_event(eventId, calendarId); 
     2572                        }) 
     2573                        .end().find('.button.edit').click(function(){                            
     2574                                eventDetails( DataLayer.get( "schedulable", $(this).siblings('[name="eventid"]').val() ), true );                                        
     2575                        }); 
     2576 
     2577                        }); 
     2578                        paginatorListEvent(currentView, (keyword == '' || keyword == null) ? 'list' : 'search',  !!view ? view : User.preferences.defaultCalView); 
    25802579                }); 
    25812580    }else{ 
    2582         $(currentView).html(  
    2583                 '<div title="Lista de eventos" class="events-list events-list-win active empty">' +  
    2584                 '<input type="hidden" name="page_index" value="'+page_index+'"></inpunt>'+  
    2585                 '<input type="hidden" name="keyword" value="'+keyword+'"></inpunt>'+  
    2586                 '<label class="empty-result">Não foram encontrados eventos neste intervalo.</label>' +  
    2587                 '</div>'  
    2588                 );  
    2589         paginatorListEvent(currentView, 'list', !!view ? view : User.preferences.defaultCalView);  
    2590     }  
    2591 }  
    2592       if(currentView != '#tab_events_list_')  
    2593           $tabs.tabs("select", currentView);  
     2581                $(currentView).html( 
     2582                        '<div title="Lista de eventos" class="events-list events-list-win active empty">' + 
     2583                        '<input type="hidden" name="page_index" value="'+page_index+'"></inpunt>'+ 
     2584                        '<input type="hidden" name="keyword" value="'+keyword+'"></inpunt>'+ 
     2585                        '<label class="empty-result">Não foram encontrados eventos neste intervalo.</label>' + 
     2586                        '</div>' 
     2587                        ); 
     2588                paginatorListEvent(currentView, 'list', !!view ? view : User.preferences.defaultCalView); 
     2589    } 
     2590} 
     2591        if(currentView != '#tab_events_list_') 
     2592            $tabs.tabs("select", currentView); 
    25942593} 
    25952594 
     
    28062805 
    28072806    } 
    2808 }  
    2809                   
    2810 function messageHelper(msg, isShow){  
    2811     if(isShow)  
    2812         new $.Zebra_Dialog('<span style="width: 50px; height: 50px;">'+  
    2813                             '<img src="'+DataLayer.dispatchPath+'/modules/calendar/img/loading.gif"></img>'+  
    2814                         '</span><label class="messagesHelpers"> '+ msg +' </label>' , {  
    2815                         'buttons':  false,  
    2816                         'modal': true,  
    2817                         'overlay_opacity': '0.5',  
    2818                         'keyboard': false,  
    2819                         'overlay_close': false,  
    2820                         'type': false,  
    2821                         'custom_class': 'messagesHelpersExpressoCalendar'  
    2822                         }  
    2823                     );  
    2824     else{  
    2825         $('.messagesHelpersExpressoCalendar').remove();  
    2826         $('.ZebraDialogOverlay').remove();  
    2827     }  
    2828 }  
     2807} 
     2808 
     2809function messageHelper(msg, isShow){ 
     2810    if(isShow) 
     2811        new $.Zebra_Dialog('<span style="width: 50px; height: 50px;">'+ 
     2812                            '<img src="'+DataLayer.dispatchPath+'/modules/calendar/img/loading.gif"></img>'+ 
     2813                        '</span><label class="messagesHelpers"> '+ msg +' </label>' , { 
     2814                        'buttons':  false, 
     2815                        'modal': true, 
     2816                        'overlay_opacity': '0.5', 
     2817                        'keyboard': false, 
     2818                        'overlay_close': false, 
     2819                        'type': false, 
     2820                        'custom_class': 'messagesHelpersExpressoCalendar' 
     2821                        } 
     2822                    ); 
     2823    else{ 
     2824        $('.messagesHelpersExpressoCalendar').remove(); 
     2825        $('.ZebraDialogOverlay').remove(); 
     2826    } 
     2827} 
  • branches/2.4/prototype/modules/calendar/templates/attendee_add.ejs

    r6656 r6754  
    33        %> 
    44        <dl class="block-attendee-list attendees-list"> 
    5                 <dt class="me"><%= data.event.me.user ? data.event.me.user.name : data.event.me.name %></dt>  
     5                <dt class="me"><%= data.event.me.user ? data.event.me.user.name : data.event.me.name %></dt> 
    66                <dd class="me"> 
    77                    <select class="status" name="status" <%= data.event.isAttendee ? '' : 'disabled' %>> 
     
    3939                <dd class="attendee-list"> 
    4040                        <ul class="attendee-list"> 
    41                             <% if (data.event.isAttendee && !data.event.acl.organization){ %>  
    42                                 <label for="attendee" title="<%=  data.event.me.user ? data.event.me.user.mail : data.event.me.mail %>" class="mail hidden"></label>  
    43                             <%}%> 
     41                            <% if (data.event.isAttendee && !data.event.acl.organization){ %> 
     42                                <label for="attendee" title="<%=  data.event.me.user ? data.event.me.user.mail : data.event.me.mail %>" class="mail hidden"></label> 
     43                            <%}%> 
     44                             
    4445                                <li class="organizer <%= (data.event.acl.organization) ? "hidden" : "" %>">  
    4546                                        <div style="overflow:hidden; width:100%; display:table;"> 
     
    148149                <% if (data.event && data.event.attendee.length > 0) { %> 
    149150                  <ul class="attendees-count"> 
    150                     <li><label>Sim:</label><%=data.event.statusParticipants.accepted%></li>  
     151                    <li><label>Sim:</label><%=data.event.statusParticipants.accepted%></li> 
    151152                    <li><label>Não:</label><%=data.event.statusParticipants.cancelled%></li> 
    152153                    <li><label>Talvez:</label><%=data.event.statusParticipants.tentative%></li> 
    153154                    <li><label>Aguardando:</label><%=data.event.statusParticipants.unanswered%></li> 
    154                   </ul>  
    155   <% } %>  
    156   <% if (data.event && data.event.sizeAttendeeLimit){%>  
    157       <ul class="attendees-count">  
    158           <li>Evento com muitos participantes, exibindo os 100 primeiros!</li>  
    159       </ul>      
     155                  </ul>      
     156            <% } %> 
     157            <% if (data.event && data.event.sizeAttendeeLimit){%> 
     158                <ul class="attendees-count"> 
     159                    <li>Evento com muitos participantes, exibindo os 100 primeiros!</li> 
     160                </ul> 
    160161            <% } %> 
    161162                </dd> 
  • branches/2.4/prototype/modules/calendar/templates/event_add.ejs

    r6586 r6754  
    225225    <div title="" class="menu-container footer-container menu-addevent"> 
    226226            <% if (data.event.id) { %> 
    227                         <a title="Exportar" class="button export" href="#">Exportar</a>  
    228                         <a title="Excluir" class="button delete" href="#">Excluir</a>  
     227                        <a title="Exportar" class="button export" href="#">Exportar</a> 
     228                        <a title="Excluir" class="button delete" href="#">Excluir</a> 
    229229            <% } %> 
    230                 <a title="Cancelar" class="button cancel" href="#">Cancelar</a>  
    231             <a title="Salvar" class="button save" href="#">Salvar</a>  
     230                <a title="Cancelar" class="button cancel" href="#">Cancelar</a> 
     231            <a title="Salvar" class="button save" href="#">Salvar</a> 
    232232    </div> 
    233233</div> 
  • branches/2.4/prototype/modules/calendar/templates/event_list.ejs

    r6586 r6754  
    168168                                                                <input name="eventid" type="hidden" value="<%=_event.id%>"></input> 
    169169                                                                <input name="calendarid" type="hidden" value="<%=_event.calendar%>"></input> 
    170                                                                 <a title="Excluir" class="button delete" href="#">Excluir</a>  
    171                                                                 <a title="Editar" class="button edit" href="#">Editar</a> 
     170                                                                <a title="Excluir" class="button delete" href="#">Excluir</a> 
     171                                                                <a title="Editar" class="button edit" href="#">Editar</a> 
    172172                                                        </div> 
    173173                                                </div> 
  • branches/2.4/prototype/modules/calendar/templates/index.ejs

    r6586 r6754  
    102102<body> 
    103103        <div id="wrap" class="expresso-calendar-container" style="text-align:left;"> 
    104                 <div title="Configurações" class="block-horizontal-toolbox"> 
     104                <div title="Configura&ccedil;&otilde;es" class="block-horizontal-toolbox"> 
    105105                        <a class="button config-menu main-config-menu" href="#"></a> 
    106106                        <div class="main-config-menu-content hidden">  
  • branches/2.4/prototype/modules/filters/edit-filter.ejs

    r6387 r6754  
    124124                                        %> 
    125125                                </select> 
     126                                <input type="checkbox" name="actionType[]" value="alertMessage" class="alertMessage"/> 
     127                                <label><%= get_lang("Alert message filter by sender")%></label> 
    126128                        </fieldset> 
    127129                        <fieldset> 
  • branches/2.4/prototype/modules/filters/filter-list.ejs

    r6728 r6754  
    44        data.rules = (data.rules || []); 
    55        for (var i=0; i<data.rules.length; i++) { 
    6                         if(data.rules[i].id != "vacation") continue;  
    7     %>  
    8             <li class="rule vacation" title="vacation">  
    9                     <strong class="title <%= (data.rules[i].enabled == "true")? 'enable':'disable' %>"><%= (data.rules[i].name ? data.rules[i].name : data.rules[i].id)%></strong>  
    10                     <input type="hidden" class="id" value="<%= data.rules[i].id %>">  
    11                     <dl class="rule-briefing">  
    12                             <dt><%= get_lang("Criteria")%>:</dt>  
    13                             <dd class="rule-briefing-criteria">  
    14                                     <ul class="rule-briefing-criteria-list">  
    15                                             <li><br></li>  
    16                                     </ul>  
    17                             </dd>  
    18                             <dt><%= get_lang("Actions")%>:</dt>  
    19                             <dd class="rule-briefing-action">  
    20                                     <ul class="rule-briefing-action-list">  
    21                                     <%   
    22                                             for (var k=0; k<data.rules[i].actions.length; k++) {  
    23                                                     if(data.rules[i].actions[k].type == "addflag") {   
    24                                     %>                
    25                                                             <li><strong> (<%= get_lang("The filter is active for alerts") %>) </strong></li>  
    26                                     <%                
    27                                                             continue;  
    28                                                     }  
    29                                     %>  
    30                                             <li><strong><%= get_lang(data.rules[i].actions[k].type) %>:</strong> <%= (data.rules[i].actions[k].type == 'setflag') ? get_lang(data.rules[i].actions[k].parameter) : data.rules[i].actions[k].parameter %></li>  
    31                                     <%  
    32                                             }  
    33                                     %>  
    34                                     </ul>  
    35                             </dd>  
    36                     </dl>  
    37                     <ul class="menu-control">  
    38                             <li><a href="#<%= data.rules[i].name %>" class="button update" title="<%= get_lang("Change rule")%> '<%= data.rules[i].name %>'"></a></li>  
    39                             <li><a href="#<%= data.rules[i].name %>" class="button enable<%= (data.rules[i].enabled == "true")? '': ' hidden' %>" title="<%= get_lang("Disable rule")%>"></a></li>  
    40                             <li><a href="#<%= data.rules[i].name %>" class="button disable<%= (data.rules[i].enabled  == "true")? ' hidden': '' %>" title="<%= get_lang("Enable rule")%>"></a></li>  
    41                             <li><a href="#<%= data.rules[i].name %>" class="button close" title="<%= get_lang("Delete rule")%> '<%= data.rules[i].name %>'"></a></li>  
    42                             <li class="select" ><input type="checkbox"/></li>  
    43                     </ul>  
    44             </li>  
    45 <%  
    46     }  
    47 %>  
    48 <%  
    49     for (var i=0; i<data.rules.length; i++) {  
    50             if(typeof data.rules[i].criteria == "undefined" && data.rules[i].id != "vacation") continue;  
    51             if(data.rules[i].id == "vacation") continue; 
    52  
     6                if(data.rules[i].id != "vacation") continue; 
     7        %> 
     8                <li class="rule vacation" title="vacation"> 
     9                        <strong class="title <%= (data.rules[i].enabled == "true")? 'enable':'disable' %>"><%= (data.rules[i].name ? data.rules[i].name : data.rules[i].id)%></strong> 
     10                        <input type="hidden" class="id" value="<%= data.rules[i].id %>"> 
     11                        <dl class="rule-briefing"> 
     12                                <dt><%= get_lang("Criteria")%>:</dt> 
     13                                <dd class="rule-briefing-criteria"> 
     14                                        <ul class="rule-briefing-criteria-list"> 
     15                                                <li><br></li> 
     16                                        </ul> 
     17                                </dd> 
     18                                <dt><%= get_lang("Actions")%>:</dt> 
     19                                <dd class="rule-briefing-action"> 
     20                                        <ul class="rule-briefing-action-list"> 
     21                                        <%  
     22                                                for (var k=0; k<data.rules[i].actions.length; k++) { 
     23                                                        if(data.rules[i].actions[k].type == "addflag") {  
     24                                        %>               
     25                                                                <li><strong> (<%= get_lang("The filter is active for alerts") %>) </strong></li> 
     26                                        <%               
     27                                                                continue; 
     28                                                        } 
     29                                        %> 
     30                                                <li><strong><%= get_lang(data.rules[i].actions[k].type) %>:</strong> <%= (data.rules[i].actions[k].type == 'setflag') ? get_lang(data.rules[i].actions[k].parameter) : data.rules[i].actions[k].parameter %></li> 
     31                                        <% 
     32                                                } 
     33                                        %> 
     34                                        </ul> 
     35                                </dd> 
     36                        </dl> 
     37                        <ul class="menu-control"> 
     38                                <li><a href="#<%= data.rules[i].name %>" class="button update" title="<%= get_lang("Change rule")%> '<%= data.rules[i].name %>'"></a></li> 
     39                                <li><a href="#<%= data.rules[i].name %>" class="button enable<%= (data.rules[i].enabled == "true")? '': ' hidden' %>" title="<%= get_lang("Disable rule")%>"></a></li> 
     40                                <li><a href="#<%= data.rules[i].name %>" class="button disable<%= (data.rules[i].enabled  == "true")? ' hidden': '' %>" title="<%= get_lang("Enable rule")%>"></a></li> 
     41                                <li><a href="#<%= data.rules[i].name %>" class="button close" title="<%= get_lang("Delete rule")%> '<%= data.rules[i].name %>'"></a></li> 
     42                                <li class="select" ><input type="checkbox"/></li> 
     43                        </ul> 
     44                </li> 
     45<% 
     46        } 
    5347%> 
    54                 <% if(data.rules[i].id == "") continue; %>  
    55             <li class="rule" title="<%= data.rules[i].id %>">  
     48<% 
     49        for (var i=0; i<data.rules.length; i++) { 
     50                if(typeof data.rules[i].criteria == "undefined" && data.rules[i].id != "vacation") continue; 
     51                if(data.rules[i].id == "vacation") continue; 
     52         
     53%> 
     54                <% if(data.rules[i].id == "") continue; %> 
     55                <li class="rule" title="<%= data.rules[i].id %>"> 
    5656                        <strong class="title <%= (data.rules[i].enabled == "true")? 'enable':'disable' %>"><%= (data.rules[i].name ? data.rules[i].name : data.rules[i].id)%></strong> 
    5757                        <input type="hidden" class="id" value="<%= data.rules[i].id %>"> 
     
    8080                                        <%  
    8181                                                for (var k=0; k<data.rules[i].actions.length; k++) { 
     82                                                        if(data.rules[i].actions[k].type == "addflag") {  
     83                                        %>               
     84                                                                <li><strong> (<%= get_lang("The filter is active for alerts") %>) </strong></li> 
     85                                        <%               
     86                                                                continue; 
     87                                                        } 
    8288                                        %> 
    8389                                                <li><strong><%= get_lang(data.rules[i].actions[k].type) %>:</strong> <%= (data.rules[i].actions[k].type == 'setflag') ? get_lang(data.rules[i].actions[k].parameter) : data.rules[i].actions[k].parameter %></li> 
  • branches/2.4/prototype/modules/filters/filters.js

    r6646 r6754  
    1 /* Verifica se a regra fora de escritório está ativa */ 
     1/*  
     2 * Retorna as regras por remetente e que o usuário deseja ser avisado  
     3 */ 
     4function getFromAlertRules() {  
     5        var filters = DataLayer.get("filter"); 
     6        fromRules = []; 
     7        var alertMessage; 
     8        var active; 
     9        for (var index in filters) { 
     10                alertMessage = filters[index]['alertMessage'];           
     11                active = filters[index]['enabled']; 
     12                for(var criterias in filters[index]['actions']) { 
     13                        if (filters[index]['actions'][criterias]['type'] == 'fileinto' && alertMessage == 'true' && active == 'true') 
     14                                fromRules[fromRules.length] = filters[index]['actions'][criterias]['parameter']; 
     15                } 
     16        } 
     17        return fromRules; 
     18} 
     19 
     20/*  
     21 * Verifica se a regra Fora de escritório está ativa 
     22 */ 
    223function outOfficeVerify() {     
    324        DataLayer.remove('filter', false); 
     
    930                        outoffice = true; 
    1031                if(filters[index].id == "vacation" && filters[index].enabled == "true"){ 
    11                         write_msg(get_lang("Attention, you are in out of office mode."), true);  
     32                        write_msg(get_lang("Attention, you are in out of office mode."), true); 
    1233                        outoffice_active = true; 
    1334                        break; 
     
    1839} 
    1940 
    20  
    21 /* Valida as informações do formulário de filtro de mensagens */ 
     41/*  
     42 * Valida os campos do formulário da tela de filtros para salvar. 
     43 */ 
    2244valid_save = function(){ 
    2345        var accord = list_container.find(".rule-details-container").accordion({autoHeight: false}); 
     
    5375                                        error = true; 
    5476                                        return; 
    55                                 }        
     77                                } 
    5678                        }); 
    5779                        if(error){ 
     
    6385        var criteria_list = list_container.find('[name="criteriaValue[]"]'); 
    6486        var er_num = /^[0-9]+$/; 
    65          
     87 
    6688        if($(".sizeRule").val() != "" && er_num.test($(".sizeRule").val()) == false) { 
    6789                $.Zebra_Dialog(get_lang("Size rule must be a number"),{ 
     
    7496        } 
    7597        $.each(criteria_list, function(index, value){ 
    76                 criteria += $.trim($(criteria_list[index]).val()); 
     98                if(($(criteria_list[index]).val() != "" && index != 5) || ($(criteria_list[index]).is(':checked'))){ 
     99                        criteria += $.trim($(criteria_list[index]).val()); 
     100                } 
    77101        }); 
    78102        if(criteria == ""){ 
     
    101125                                } 
    102126                        }); 
     127                        return false; 
     128                } 
     129        } 
     130        /*Validação ao salvar filtro com alerta*/ 
     131        var criteria_operator_list = list_container.find('[name="criteriaOperator[]"]'); 
     132        if(list_container.find('.alertMessage').is(':checked')){ 
     133                if($(criteria_list[0]).val() != "" && $('.select-folderlist').find('[type="radio"]').is(':checked') && $(criteria_operator_list[0]).find('option:selected').val() != "!*"){ 
     134                        var hasValue = false; 
     135                        $.each(criteria_list, function(index, value){ 
     136                                if(($(criteria_list[index]).val() != "" && index != 0 && index != 5) || ($(criteria_list[index]).is(':checked'))){ 
     137                                        if($('.fields-isexact').find(':checked').val() == 'or'){ 
     138                                                hasValue = true; 
     139                                        } 
     140                                } 
     141                        }); 
     142                        if(hasValue){ 
     143                                $.Zebra_Dialog('<strong>'+get_lang('Filter with alert')+'</strong><br>'+get_lang('If more than one criterion for the filter, the "Meeting all the criteria" must be selected')); 
     144                                return false; 
     145                        }  
     146                }else{ 
     147                        $.Zebra_Dialog('<strong>'+get_lang('Filter with alert')+'</strong><br>'+get_lang('The filter should be set as a criteria "Sender" and action "Archive folder"')); 
    103148                        return false; 
    104149                } 
     
    132177date2Time = function (timestamp) { 
    133178        var date = new Date(); 
     179        if( typeof timestamp === "string" ) 
     180            timestamp = parseInt( timestamp, 10 ); 
    134181        if ((date.getTime() - timestamp) < (24*60*60*1000)) { 
    135182                return '<span class="timable" title="'+timestamp+'"> </span>'; 
     
    143190 
    144191keys = function( object ){ 
    145    
     192 
    146193  var array = []; 
    147    
     194 
    148195  for( var key in object ) 
    149196       array[ array.length ] = key; 
    150    
     197 
    151198  return( array ); 
    152199 
    153200} 
    154201 
    155 /* Mostra os detalhes do filtro para edição */ 
     202/*  
     203 * Preenche o formulário de filtros com as informações originais para edição 
     204 */ 
    156205showDetails = function( filter ){ 
    157    
     206 
    158207    form.get(0).reset(); 
    159208 
     
    175224                if(filter.actions[i].type == "redirect") 
    176225                        actions.siblings('[name="addressRedirect"]').val(filter.actions[i].parameter); 
    177                 if(filter.actions[i].type == "reject")   
     226                if(filter.actions[i].type == "reject") 
    178227                        actions.siblings('[name="messageReject"]').val(filter.actions[i].parameter); 
    179228                if(filter.actions[i].type == "fileinto" || filter.actions[i].type == "setflag") 
    180229                        actions.parent().find('[value="'+filter.actions[i].parameter+'"]').attr("selected", "selected"); 
    181230    } 
    182         isExact.filter('[value="'+(filter.isExact != "false"? "and" : "or")+'"]').attr("checked", "True");       
     231        isExact.filter('[value="'+(filter.isExact != "false"? "and" : "or")+'"]').attr("checked", "True"); 
     232         
     233        if (filter.alertMessage == 'true') $('.alertMessage').attr('checked', 'True'); 
    183234} 
    184235 
    185236 
    186237DataLayer.codec( "filter", "detail", { 
    187    
     238 
    188239  decoder: function( form ){ 
    189       if( form.vacation ) 
     240          if( form.vacation ) 
    190241          return { 
    191242                criteria: [{ value: "vacation", operator: "", field: "vacation" }], 
     
    199250 
    200251        var apply_messages_ = keys(selectedMessages); 
    201          
     252 
    202253        action = ''; 
    203          
     254 
    204255    return { 
    205256                name: form.name ? form.name.replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;') : nameObj.val().replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;'), 
    206257                isExact: ( form.isExact === "and" ), 
    207                 criteria: $.map( form.criteriaOperator || [], function( criteriaOperator, i ){   
     258                criteria: $.map( form.criteriaOperator || [], function( criteriaOperator, i ){ 
    208259                        return (!form.criteriaValue[i]) ? null: 
    209                         {  
     260                        { 
    210261                                        value:  form.criteriaValue[i].replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;'), 
    211262                                        operator: criteriaOperator, 
     
    215266                actions: $.map( form.actionType || [], function( type, i ){ 
    216267                        var the_parameter = form.actionParameter[i]; 
    217                          
     268 
    218269                        !the_parameter ? the_parameter = form.actionParameter[i+1] : ""; 
     270 
     271                        if (type == 'alertMessage') {  
     272                                //if(!$('[value="alertMessage"]').parent().hasClass("hidden")){ 
     273                                        type = 'addflag'; 
     274                                        the_parameter = '$FilteredMessage'; 
     275                                //}else{ 
     276                                //      return; 
     277                                //} 
     278                        }  
    219279                        if (type == 'fileinto') {  
    220280                                the_parameter = form.valueFileInto; 
     
    223283                                the_parameter = form.messageReject; 
    224284                        } 
    225                         if (type == 'fileintoInbox') {  
     285                        if (type == 'fileintoInbox') { 
    226286                                if(!$('[value="fileintoInbox"]').parent().hasClass("hidden")){ 
    227287                                        type = 'fileinto'; 
     
    238298                                the_parameter = form.addressRedirect; 
    239299                        } 
    240                         if (type == 'setflag') {  
     300                        if (type == 'setflag') { 
    241301                                the_parameter = form.valueSetFlag; 
    242302                                action = form.valueSetFlag; 
     
    247307                }), 
    248308                enabled : true, 
     309                alertMessage: $('.alertMessage').is(':checked'), 
     310                //applyMessages: allMessages? !$.isEmptyObject( selectedMessages ) ? 
     311                //keys( selectedMessages ) : allMessages : "" 
    249312                applyMessages: apply_messages_  
     313                //applyMessages: "" 
    250314    }; 
    251315  }, 
    252    
     316 
    253317  encoder: function( filters ){ 
    254318        var rules = []; 
     
    260324 
    261325  } 
    262    
     326 
    263327}); 
    264328 
    265329/* Codec do datalayer */ 
    266330DataLayer.codec( "folder", "select", { 
    267    
     331 
    268332  decoder:function(){ 
    269      
     333 
    270334  }, 
    271335  encoder:function( data ){ 
    272   
     336 
    273337      var tree1 = [], tree2 = [], tree3 = []; 
    274338 
     
    295359 
    296360      } 
    297        
     361 
    298362      return {folders: [ tree1, tree2, tree3 ]}; 
    299363 
     
    301365 
    302366}); 
     367 
     368 
     369fromRules = getFromAlertRules(); 
    303370 
    304371var BASE_PATH = '../prototype/'; 
     
    310377var allMessages = false; 
    311378 
    312 /* Bloqueio de usuários na tela de mensagem do ExpressoMail */ 
    313 function block_user_email(email) {  
     379/*  
     380 * Bloqueia usuário por email - utilizado na tela de mensagens do ExpressoMail 
     381 */ 
     382function block_user_email(email) { 
    314383        delete selectedMessages; 
    315384        var idd = urlencode(email); 
     
    324393                                        $.Zebra_Dialog(get_lang("Lock User") + " " + email + " " + get_lang("removed")); 
    325394                                        list_filters(); 
     395                                        getFromAlertRules(); 
    326396                                }); 
    327397                                return true; 
     
    331401        } 
    332402        if(confirm(get_lang("Want to block the user") + " " + email + "?")){ 
    333                 DataLayer.put( 'filter', idd,  
    334                                         { name: email, isExact: false,  
     403                DataLayer.put( 'filter', idd, 
     404                                        { name: email, isExact: false, 
    335405                                                criteria:{ 0: {value: email, operator: "=", field: "from"} }, 
    336                                                 actions: { 0: {parameter: "INBOX" + cyrus_delimiter + "Spam", type: "fileinto"}},  
    337                                                 enabled: true,  
     406                                                actions: { 0: {parameter: "INBOX" + cyrus_delimiter + "Spam", type: "fileinto"}}, 
     407                                                enabled: true, 
    338408                                                id: email, 
    339                                                 block: true  
     409                                                block: true 
    340410                                        }); 
    341411                DataLayer.commit("filter", false, function(){ 
    342412                        $.Zebra_Dialog(get_lang("User") + " " + email + " " + get_lang("blocked")); 
    343413                        list_filters(); 
    344                 }); 
    345                  
     414                        getFromAlertRules(); 
     415                }); 
     416 
    346417        } 
    347418} 
    348419 
    349 /* Gerencia o grid das mensagens da caixa de entrada */ 
     420 
     421DataLayer.codec( 'message', 'jqGrid', { 
     422 
     423      encoder: function( data ){ 
     424 
     425          return( data ); 
     426 
     427      } 
     428}); 
     429 
     430/* Gerencia o grid das mensagens da caixa de entrada  
     431 * Mostra o grid de mensagens para aplicar a regra nas mensagens da caixa de entrada. 
     432 */ 
    350433function showGridMessages(thiss) { 
    351434        var criteria_list = list_container.find('[name="criteriaValue[]"]'); 
     
    366449        var options = ["from", "to", "subject", "body", "size"]; 
    367450        var criterias_ = new Array(); 
    368         var j = 0;               
    369         for (i in criteria_) { 
    370                 if(criteria_[i] != "") { 
    371                         (j == 0) ? criterias_[j] = {"0": options[i], "1": criteria_value_[i], "2": criteria_[i]} : criterias_[j] = {"0": "OR", "1": options[i], "2": criteria_value_[i], "3": criteria_[i]};  
    372                         j++; 
    373                 }        
    374         } 
     451 
     452        for (i in criteria_) 
     453                if(criteria_[i] != "") 
     454                    criterias_.push( criterias_.length ?  {"0": "OR", "1": options[i], "2": criteria_value_[i], "3": criteria_[i]} : {"0": options[i], "1": criteria_value_[i], "2": criteria_[i]} ); 
     455 
    375456        showGridButton = thiss.parent(); 
    376 //      .html('buscando mensagens...'); 
    377         showGridButton.siblings("#filtergrid-container").block({   
    378                                                         message: '<div id="loading-content"><div class="image"></div></div>',   
    379                                                         css: {   
    380                                                                 backgroundImage: 'url('+BASE_PATH+'modules/attach_message/images/loading.gif)',   
    381                                                                 backgroundRepeat: 'no-repeat',  
    382                                                                 backgroundPosition: 'center',  
    383                                                                 backgroundColor: 'transparent',  
    384                                                                 width: '32px',  
    385                                                                 height: '32px',  
    386                                                                 border:'none'   
    387                                                         },  
    388                                                         overlayCSS: {   
    389                                                                 backgroundColor: '#CCC',   
    390                                                                 opacity:         0.5  
    391                                                         }   
    392                                                 });  
    393  
    394         $.ajax({   
    395                 url: DataLayer.basePath + 'folder/INBOX/message&' +  $.param( {"filter": criterias_} ), 
    396                 dataType: 'json', 
    397                 success: function(data){ 
    398                         allMessages = data; 
    399  
    400                         var parametro =  { "filter": ( data != false ? [ "msgNumber", "IN", data ] : criterias_ ) }; 
    401                          
    402                         if (typeof grid !== "undefined") {  
    403                                 grid.jqGrid( 'setGridParam', { url: DataLayer.basePath + 'folder/INBOX/message&' +  $.param( parametro ) } ).trigger( 'reloadGrid' );  
    404                                 //return; 
    405                         } 
    406                         grid = showGridButton.siblings("#filtergrid-container").removeClass('empty-container') 
    407                         .html('<table class="hidden fields-search-messages-grid" id="fields-search-messages-grid"><tr><td/></tr></table><div class="hidden fields-search-messages-grid-pager" id="fields-search-messages-grid-pager"></div>') 
    408                         .children(".fields-search-messages-grid, .fields-search-messages-grid-pager").removeClass('hidden').filter(".fields-search-messages-grid").trigger( 'reloadGrid' ).jqGrid({ 
    409                                 //url: DataLayer.basePath + 'folder/INBOX/message&' +  $.param( {"filter": [ "msgNumber", "IN", data ]} ), 
    410                                 url: DataLayer.basePath + 'folder/INBOX/message&' +  $.param( parametro ), 
    411                                 datatype: "json", 
    412                                 mtype: 'GET', 
    413                                 colNames:['#', 'De', 'Assunto', 'Data', 'Tamanho'], 
    414                                 colModel:[ 
    415                                         {name:'msg_number',index:'msg_number', width:45, hidden:true, sortable:false}, 
    416                                         {name:'from.email',index:'msg_number', width:130, sortable:false}, 
    417                                         {name:'subject',index:'subject', width:250, sortable:false}, 
    418                                         {name:'timestamp',index:'timestamp', width:65, align:"center", sortable:false, formatter:date2Time}, 
    419                                         {name:'size',index:'size', width:50, align:"right", sortable:false, formatter:bytes2Size} 
    420                                 ], 
    421                                 jsonReader : { 
    422                                         root:"rows", 
    423                                         page: "page", 
    424                                         total: "total", 
    425                                         records: "records", 
    426                                         repeatitems: false, 
    427                                         id: "0" 
    428                                 }, 
    429                                 rowNum:10, 
    430                                 //rowList:[10,25,50], 
    431                                 rowList:[10], 
    432                                 pager: '#fields-search-messages-grid-pager', 
    433                                 sortname: 'id', 
    434                                 viewrecords: true, 
    435                                 sortorder: "desc", 
    436                                 multiselect: true, 
    437                                 autowidth: true, 
    438                                 reloadAfterEdit: true, 
    439                                 reloadAfterSubmit: true, 
    440                                 height:200, 
    441                                 loadComplete: function(data) { 
    442                           //                            // aplica o contador 
    443                           //                            jQuery('.timable').each(function (i) { 
    444                           //                                    jQuery(this).countdown({ 
    445                           //                                            since: new Date(parseInt(this.title)),  
    446                           //                                            significant: 1, 
    447                           //                                            layout: 'h&aacute; {d<}{dn} {dl} {d>}{h<}{hn} {hl} {h>}{m<}{mn} {ml} {m>}{s<}{sn} {sl}{s>}',  
    448                           //                                            description: ' atr&aacute;s' 
    449                           //                                    }); 
    450                           //                            }); 
    451                                 }, 
    452                                 onSelectRow: function (id, selected) { 
    453                                         if( selected )  
    454                                         { 
    455                                                 selectedMessages[ id ] = true; 
    456                                         } 
    457                                         else 
    458                                         { 
    459                                                 delete selectedMessages[ id ]; 
    460                                         } 
    461                                 }, 
    462                                 onSelectAll: function (id, selected) {                                   
    463                                         for (i in id) { 
    464                                                 if(selected) 
    465                                                         selectedMessages[id[i]] = true; 
    466                                                 else 
    467                                                         delete selectedMessages[id[i]];  
    468                                         } 
    469                                 }, 
    470                                 caption: 'Mensagens que atendem aos crit&eacute;rios' 
    471                         }); // end jqGrid 
    472                 } // end success 
    473         }); // end ajax 
     457 
     458        showGridButton.siblings("#filtergrid-container").block({ 
     459                                                        message: '<div id="loading-content"><div class="image"></div></div>', 
     460                                                        css: { 
     461                                                                backgroundImage: 'url('+BASE_PATH+'modules/attach_message/images/loading.gif)', 
     462                                                                backgroundRepeat: 'no-repeat', 
     463                                                                backgroundPosition: 'center', 
     464                                                                backgroundColor: 'transparent', 
     465                                                                width: '32px', 
     466                                                                height: '32px', 
     467                                                                border:'none' 
     468                                                        }, 
     469                                                        overlayCSS: { 
     470                                                                backgroundColor: '#CCC', 
     471                                                                opacity:         0.5 
     472                                                        } 
     473                                                }); 
     474 
     475        var data = DataLayer.get( 'message', { filter: criterias_, criteria: { properties: { context: { folder: 'INBOX' } } } }, true ); 
     476 
     477        DataLayer.register( 'criterias', 'message:jqGrid', function( crit ){ 
     478 
     479                    crit.properties = { context: { folder: 'INBOX' } }; 
     480 
     481                    return { filter: [ "msgNumber", "IN", data ], criteria: crit }; 
     482        }); 
     483 
     484        allMessages = data; 
     485 
     486        if (typeof grid !== "undefined") { 
     487                grid.jqGrid( 'setGridParam', { url: 'message:jqGrid', postData: data } ).trigger( 'reloadGrid' ); 
     488                //return; 
     489        } 
     490        grid = showGridButton.siblings("#filtergrid-container").removeClass('empty-container') 
     491        .html('<table class="hidden fields-search-messages-grid" id="fields-search-messages-grid"><tr><td/></tr></table><div class="hidden fields-search-messages-grid-pager" id="fields-search-messages-grid-pager"></div>') 
     492        .children(".fields-search-messages-grid, .fields-search-messages-grid-pager").removeClass('hidden').filter(".fields-search-messages-grid").trigger( 'reloadGrid' ).jqGrid({ 
     493                url: 'message:jqGrid', 
     494                datatype: "json", 
     495                mtype: 'GET', 
     496                colNames:['#', 'De', 'Assunto', 'Data', 'Tamanho'], 
     497                colModel:[ 
     498                        {name:'msg_number',index:'msg_number', width:45, hidden:true, sortable:false}, 
     499                        {name:'from.email',index:'msg_number', width:130, sortable:false}, 
     500                        {name:'subject',index:'subject', width:250, sortable:false}, 
     501                        {name:'timestamp',index:'timestamp', width:65, align:"center", sortable:false, formatter:date2Time}, 
     502                        {name:'size',index:'size', width:50, align:"right", sortable:false, formatter:bytes2Size} 
     503                ], 
     504                jsonReader : { 
     505                        root:"rows", 
     506                        page: "page", 
     507                        total: "total", 
     508                        records: "records", 
     509                        repeatitems: false, 
     510                        id: "0" 
     511                }, 
     512                rowNum:10, 
     513                //rowList:[10,25,50], 
     514                rowList:[10], 
     515                pager: '#fields-search-messages-grid-pager', 
     516                sortname: 'id', 
     517                viewrecords: true, 
     518                sortorder: "desc", 
     519                multiselect: true, 
     520                autowidth: true, 
     521                reloadAfterEdit: true, 
     522                reloadAfterSubmit: true, 
     523                height:200, 
     524                loadComplete: function(data) { 
     525          //                            // aplica o contador 
     526          //                            jQuery('.timable').each(function (i) { 
     527          //                                    jQuery(this).countdown({ 
     528          //                                            since: new Date(parseInt(this.title)), 
     529          //                                            significant: 1, 
     530          //                                            layout: 'h&aacute; {d<}{dn} {dl} {d>}{h<}{hn} {hl} {h>}{m<}{mn} {ml} {m>}{s<}{sn} {sl}{s>}', 
     531          //                                            description: ' atr&aacute;s' 
     532          //                                    }); 
     533          //                            }); 
     534                }, 
     535                onSelectRow: function (id, selected) { 
     536                        if( selected ) 
     537                        { 
     538                                selectedMessages[ id ] = true; 
     539                        } 
     540                        else 
     541                        { 
     542                                delete selectedMessages[ id ]; 
     543                        } 
     544                }, 
     545                onSelectAll: function (id, selected) { 
     546                        for (i in id) { 
     547                                if(selected) 
     548                                        selectedMessages[id[i]] = true; 
     549                                else 
     550                                        delete selectedMessages[id[i]]; 
     551                        } 
     552                }, 
     553                caption: 'Mensagens que atendem aos crit&eacute;rios' 
     554        }); // end jqGrid 
    474555} 
    475556 
    476557/* Gerencia a listagem de filtros do usuário */ 
     558/*  
     559 * Lista os filtros para o usuário 
     560 */ 
    477561function list_filters(html){ 
    478562        outOfficeVerify(); 
     
    486570        } 
    487571        list_container = $(".expresso-window-filters").dialog({ 
     572                title: get_lang('Filters'), 
    488573            width:700, 
    489574            modal: true, 
     
    493578                    event.stopPropagation(); 
    494579                        if(list_container.find(".cancel").length) 
    495                                 list_container.find(".cancel").trigger('click');         
     580                                list_container.find(".cancel").trigger('click'); 
    496581                        $(".dialog-head-buttonpane").hide(); 
    497582            }, 
     
    516601        $(".dialog-head-buttonpane").css("padding", "5px"). 
    517602        find(".header-buttonpane").html("<a href='#' class='button add' title='"+get_lang("Add new rule")+"'>"+get_lang("New rule")+"</a>"+(!outoffice ? "<a href='#' class='button add vacation' title='"+get_lang("Add rule out of office")+"'>"+get_lang("Out of office")+"</a>" : "")).find(".button").button(); 
    518          
     603 
    519604        $(".ui-dialog-buttonpane.ui-widget-content").css("background-color", "#E0EEEE"); 
    520605        var list = DataLayer.render( BASE_PATH + 'modules/filters/filter-list.ejs', DataLayer.get("filter:detail", true)); 
    521606        list_container.html(list).find(".button").button(); 
    522          
     607 
    523608        list_container.find(".rule-list").selectable({ 
    524609                selecting: function(event, ui) { 
     
    529614                } 
    530615        }); 
    531          
     616 
    532617        list_container.find( ".menu-control .button" ).filter(".update").button({ 
    533618                icons: { 
     
    542627                                filters = filters[i]; 
    543628                                break; 
    544                         }        
     629                        } 
    545630                } 
    546631                DataLayer.render( BASE_PATH + 'modules/filters/edit-filter.ejs', {folders : DataLayer.get("folder", true), delimiter: cyrus_delimiter},function(html){ 
     
    571656                                        else 
    572657                                                return; 
    573                                         DataLayer.commit( 'filter', false,function(){                                            
    574                                                 if($('#gbox_fields-search-messages-grid').length > 0 && action != '') {  
     658                                        DataLayer.commit( 'filter', false,function(data){ 
     659                                                if(filters['alertMessage'] == "true"){ 
     660                                                        if(filters['alertMessage'] != $('.alertMessage').is(':checked').toString()){ 
     661                                                                /**RETIRA FLAG*/ 
     662                                                                removeMessagesFlag(filters['id']); 
     663                                                        } 
     664                                                } 
     665                                                if($('#gbox_fields-search-messages-grid').length > 0 && action != '') { 
    575666                                                        for (var index in selectedMessages) { 
    576667                                                                set_message_flag(index, action, false); 
     
    578669                                                } 
    579670                                                DataLayer.render( BASE_PATH + 'modules/filters/init.ejs', {},list_filters); 
     671                                                getFromAlertRules(); 
    580672                                        }); 
    581                                 }).end().filter('.button.search').click(function() {                             
     673                                }).end().filter('.button.search').click(function() { 
    582674                                        /* Valida se o usuário preencheu as informações */ 
    583675                                        if(valid_save()) 
     
    595687                                        DataLayer.commit( 'filter', false,function(){ 
    596688                                                DataLayer.render( BASE_PATH + 'modules/filters/init.ejs', {},list_filters); 
     689                                                getFromAlertRules(); 
    597690                                        }); 
    598691                                }); 
     
    607700                text: false 
    608701        }).click(function(){ 
    609                 var id = $(this).parents("li.rule").find('.id').val();           
     702                var id = $(this).parents("li.rule").find('.id').val(); 
    610703                DataLayer.put( 'filter', id, { enabled: false  }); 
     704                /**RETIRA FLAG*/ 
     705                removeMessagesFlag(id); 
    611706                DataLayer.commit("filter", false,function(){ 
    612707                        DataLayer.render( BASE_PATH + 'modules/filters/init.ejs', {},list_filters); 
     708                        getFromAlertRules(); 
    613709                }); 
    614710        }).end() 
     
    624720                DataLayer.commit("filter", false,function(){ 
    625721                        DataLayer.render( BASE_PATH + 'modules/filters/init.ejs', {},list_filters); 
     722                        getFromAlertRules(); 
    626723                }); 
    627724        }).end() 
    628          
     725 
    629726        .filter(".close").button({ 
    630727                icons: { 
     
    644741                                        DataLayer.remove('filter', false); 
    645742                                        DataLayer.get('filter'); 
     743                                        /**RETIRA FLAG*/ 
     744                                        removeMessagesFlag(filter_name); 
    646745                                        DataLayer.remove( 'filter', filter_name); 
     746 
    647747                                        DataLayer.commit("filter", false,function(){ 
    648748                                                DataLayer.render( BASE_PATH + 'modules/filters/init.ejs', {},list_filters); 
     749                                                getFromAlertRules(); 
    649750                                        }); 
    650751                                }else{ 
     
    654755                }); 
    655756        }).end().removeClass("ui-button-icon-only"); 
    656          
     757 
    657758        $(".button.allenable").click(function(){ 
    658759                container.find('.rule-list').find('.rule').find('.select').find(':checked').parents('.rule').find('.title').each(function(i,o){ 
    659                         DataLayer.put( 'filter', o.innerHTML, { enabled: true  }); 
     760                        DataLayer.put( 'filter', urlencode(o.innerHTML), { enabled: true  }); 
    660761                }); 
    661762                DataLayer.commit("filter", false, function(){ 
    662763                        DataLayer.render( BASE_PATH + 'modules/filters/init.ejs', {},list_filters); 
    663                 }); 
    664         }); 
    665          
     764                        getFromAlertRules(); 
     765                }); 
     766        }); 
     767 
    666768        $(".button.alldisable").click(function(){ 
    667769                container.find('.rule-list').find('.rule').find('.select').find(':checked').parents('.rule').find('.title').each(function(i,o){ 
    668                         DataLayer.put( 'filter', o.innerHTML, { enabled: false  }); 
     770                        DataLayer.put( 'filter', urlencode(o.innerHTML), { enabled: false  }); 
     771                        /**RETIRA FLAG*/ 
     772                        removeMessagesFlag(o.innerHTML); 
    669773                }); 
    670774                DataLayer.commit("filter", false, function(){ 
    671775                        DataLayer.render( BASE_PATH + 'modules/filters/init.ejs', {},list_filters); 
    672                 }); 
    673         }); 
    674          
     776                        getFromAlertRules(); 
     777                }); 
     778        }); 
     779 
    675780        $(".button.alldelete").click(function(){ 
    676781                $.Zebra_Dialog(get_lang("Are you sure to delete the filters?"),{ 
     
    683788                                        DataLayer.remove('filter', false); 
    684789                                        DataLayer.get('filter'); 
    685                                         container.find('.rule-list').find('.rule').find('.select').find(':checked').parents('.rule').find('.title').each(function(i,o){                                          
    686                                                 removeMessagesFlag(urlencode(o.innerHTML));       
    687                                                 filter_Name = urlencode(o.innerHTML.replace(".", "_"));  
    688                                                 DataLayer.remove( 'filter', (filter_Name) ); 
     790                                        container.find('.rule-list').find('.rule').find('.select').find(':checked').parents('.rule').find('.title').each(function(i,o){ 
     791                                                /**RETIRA FLAG*/ 
     792                                                removeMessagesFlag(urlencode(o.innerHTML));      
     793                                                filter_Name = urlencode(o.innerHTML.replace(".", "_")); 
     794                                                DataLayer.remove( 'filter', (filter_Name) ); 
    689795                                        }); 
    690796                                        DataLayer.commit("filter", false,function(){ 
    691797                                                DataLayer.render( BASE_PATH + 'modules/filters/init.ejs', {},list_filters); 
     798                                                getFromAlertRules(); 
    692799                                        }); 
    693800                                }else{ 
     
    697804                }); 
    698805        }); 
    699          
     806 
    700807        var aa = 0; 
    701          
     808 
    702809        list_container.parent().find(".button.add:first").click(function(){ 
    703810                list_container.parent().find(".dialog-head-buttonpane").addClass("hidden"); 
     
    721828                                        return; 
    722829                                DataLayer.commit( 'filter',false,function(){ 
    723                                         if($('#gbox_fields-search-messages-grid').length > 0 && action != '') {  
     830                                        if($('#gbox_fields-search-messages-grid').length > 0 && action != '') { 
    724831                                                for (var index in selectedMessages) { 
    725832                                                        set_message_flag(index, action, false); 
     
    727834                                        } 
    728835                                        DataLayer.render( BASE_PATH + 'modules/filters/init.ejs', {},list_filters); 
     836                                        getFromAlertRules(); 
    729837                                }); 
    730                         }).end().filter('.button.search').click(function() {                             
     838                        }).end().filter('.button.search').click(function() { 
    731839                                if(valid_save()) 
    732840                                        showGridMessages($(this)); 
     
    737845        }); 
    738846        list_container.parent().find(".button.add.vacation").click(function(){ 
    739          
     847 
    740848                list_container.parent().find(".dialog-head-buttonpane").addClass("hidden"); 
    741849                DataLayer.render( BASE_PATH + 'modules/filters/edit-filter.ejs', {folders : DataLayer.get("folder", true), delimiter: cyrus_delimiter},function(html){ 
     
    745853                        list_container.find(".button").button().filter(".back").click(function(){ 
    746854                                DataLayer.render( BASE_PATH + 'modules/filters/init.ejs', {},list_filters); 
    747                         }).end().filter(".submit").click(function(){                     
     855                        }).end().filter(".submit").click(function(){ 
    748856                                if(list_container.find(".vacation-details-container .filter-textarea").val().length <= 0){ 
    749857                                                $.Zebra_Dialog(get_lang('Write a message')); 
     
    753861                                        DataLayer.commit( 'filter',false,function(){ 
    754862                                                DataLayer.render( BASE_PATH + 'modules/filters/init.ejs', {},list_filters); 
     863                                                getFromAlertRules(); 
    755864                                        }); 
    756865                                } 
    757866                        }); 
    758                 });      
     867                }); 
    759868        }); 
    760869} 
    761870 
    762 /* Inicializa os filtros e chama o list_filters */ 
     871 
     872/* Inicializa os filtros e chama o list_filters  
     873 * Inicia a funcionalidade de filtros de mensagens 
     874 */ 
    763875function  init_filters(){ 
    764876        var html = DataLayer.render( BASE_PATH + 'modules/filters/init.ejs', {}); 
    765877        list_filters(html); 
    766878} 
     879 
     880/* 
     881 * Ao excluir filtro, desabilitar filtro ou retirar a ação Alerta de um filtro 
     882 * esta função é chamada para retirar as flags que caracterizam uma mensagem como alertada pelos Filtros por Remetente  
     883 */ 
     884function removeMessagesFlag(id){ 
     885        var filters_c = DataLayer.get('filter', urlencode(id)); 
     886        var folder = ''; 
     887        var from = '';   
     888        if(filters_c['actions']) 
     889        for(var i=0; i < filters_c['actions'].length; i++){ 
     890                if(filters_c['actions'][i].type == 'fileinto'){ 
     891                        folder = filters_c['actions'][i].parameter; 
     892                } 
     893        } 
     894        $.each(fromRules, function(index, value) { 
     895                if(value == folder){ 
     896                        for(var i=0; i < filters_c['criteria'].length; i++){ 
     897                                if(filters_c['criteria'][i].field == 'from'){ 
     898                                        from = filters_c['criteria'][i].value; 
     899                                } 
     900                        } 
     901                        cExecute ("$this.imap_functions.removeFlagMessagesFilter&folder="+folder+"&from="+from, function(){});  
     902                        return false; 
     903                } 
     904        }); 
     905} 
  • branches/2.4/prototype/modules/filters/interceptors/FilterMapping.php

    r6590 r6754  
    4141*/ 
    4242 
    43 use prototype\api\Config as Config;  
     43use prototype\api\Config as Config; 
    4444 
    4545/** 
     
    224224                        $script_criteria .= ")";  
    225225 
    226                         $script_action = " {\r\n "; 
     226                        //$script_action = " {\r\n "; 
     227                        /* Somente para controlar que o addFlag virá antes de qualquer ação. Modificar isso depois */ 
     228                        $action_addFlag = ''; 
    227229                         
    228230                        if( is_array($action) ) 
     
    230232                        { 
    231233                                switch ($action[$k]['type']) { 
     234                                        case 'setflag': 
     235                                                $require_flag = true; 
     236                                                $action[$k]['parameter'] = "\\\\" . $action[$k]['parameter']; 
     237                                                break; 
     238                                        case 'addflag':  
     239                                                $require_flag = true; 
     240                                                $action_addFlag = "addflag \"" . $action[$k]['parameter'] . "\";\r\n "; 
     241                                                break; 
    232242                                        case 'redirect': 
    233243                                                break; 
     
    245255                                                $vacation = true; 
    246256                                                continue; 
    247                                         case 'setflag': 
    248                                                 $require_flag = true; 
    249                                                 $action[$k]['parameter'] = "\\\\" . $action[$k]['parameter']; 
    250                                                 break; 
    251257                                        case 'discard': 
    252258                                                break; 
    253259                                } 
    254                                 if ($vacation == false) $script_action .= $action[$k]['type'] . " \"" . $action[$k]['parameter'] . "\";\r\n "; 
     260                                if ($vacation == false && $action[$k]['type'] != 'addflag') $script_action .= $action[$k]['type'] . " \"" . $action[$k]['parameter'] . "\";\r\n "; 
    255261                        } 
    256                         $script_action .= "}"; 
    257262                         
     263                        /* ATENÇÃO: Colocar sempre o comando addflag antes de qualquer outro no caso de ações compostas no Sieve */ 
     264                        if ($action_addFlag != '') $script_action = $action_addFlag . $script_action;  
     265                         
     266                        $script_action = "{\r\n " . $script_action . "}"; 
     267                        $action_addFlag = ''; 
    258268                        if($vacation == false) 
    259269                                $script_rules .= $script_match . $script_criteria . $script_action . "\r\n"; 
     
    263273                        $script_match = ""; 
    264274                        $script_criteria = "";   
     275                        $script_action = ""; 
    265276                        $data['applyMessages'] = "";                                                     
    266277                } 
     
    295306 
    296307                $content = $script_begin . $script_header . $script_rules . "\r\n\r\n#PseudoScript#" . "\r\n#" . $json_data; 
    297                  
     308 
    298309                return( $content ); 
    299310        } 
     
    697708                return( $return ); 
    698709        } 
     710 
     711        /**  
     712         * Método que insere no ldap as informações do vacation  
     713         *  
     714         * @license    http://www.gnu.org/copyleft/gpl.html GPL  
     715         * @author     Consórcio Expresso Livre - 4Linux (www.4linux.com.br) e Prognus Software Livre (www.prognus.com.br)  
     716         * @sponsor     Caixa Econômica Federal  
     717         * @author     Cristiano Corrêa Schmidt  
     718         * @param      <$uri>  
     719         * @param      <$result>  
     720         * @param      <$criteria>  
     721         * @param      <$original>  
     722         * @return     <void>  
     723         * @access     public  
     724         */  
     725        public function verifyVacationRule( &$uri , &$params , &$criteria , $original  )  
     726        {  
     727            if( $original['properties']['id'] === 'vacation' )  
     728            {  
     729 
     730                $user = Controller::read(array('concept' => 'user' , 'id' => config::me('uidNumber') , 'service' => 'OpenLDAP'));  
     731                $ldapConf = Config::service('OpenLDAP', 'config');  
     732                $con = ldap_connect( $ldapConf['host'] );  
     733                ldap_set_option( $con,LDAP_OPT_PROTOCOL_VERSION, 3 );  
     734                ldap_bind( $con, $ldapConf['user'], $ldapConf['password']);  
     735 
     736                $info = array();  
     737                if(!in_array('Vacation', $user['objectClass']))  
     738                        $info['objectClass'] = 'Vacation';  
     739 
     740                $info['vacationActive'] = strtoupper($original['properties']['enabled']);  
     741 
     742                if(isset($original['properties']['actions']) && isset($original['properties']['actions'][0]['parameter']))  
     743                        $info['vacationInfo']   = $original['properties']['actions'][0]['parameter'];  
     744                else if( !isset($user['vacationInfo']) )  
     745                {  
     746                    $rules = $this->getRules();  
     747                    if(is_array($rules))  
     748                        foreach ($rules as $rule)  
     749                        if($rule['id'] === 'vacation')  
     750                                $info['vacationInfo'] = $rule['actions'][0]['parameter'];  
     751                }  
     752 
     753                if(!in_array('Vacation', $user['objectClass']))  
     754                        ldap_mod_add ( $con , $user['dn'] ,  $info );  
     755                else  
     756                        ldap_modify ( $con , $user['dn'] ,  $info );  
     757 
     758 
     759                ldap_close($con);  
     760 
     761            }  
     762          
     763        } 
     764 
     765        /**  
     766         * Método que remove do ldap as informações do vacation  
     767         *  
     768         * @license    http://www.gnu.org/copyleft/gpl.html GPL  
     769         * @author     Consórcio Expresso Livre - 4Linux (www.4linux.com.br) e Prognus Software Livre (www.prognus.com.br)  
     770         * @sponsor     Caixa Econômica Federal  
     771         * @author     Cristiano Corrêa Schmidt  
     772         * @param      <$uri>  
     773         * @param      <$result>  
     774         * @param      <$criteria>  
     775         * @param      <$original>  
     776         * @return     <void>  
     777         * @access     public  
     778         */  
     779        public function deleteVacationRule( &$uri , &$params , &$criteria , $original  )  
     780        {          
     781            if( $original['URI']['id'] === 'vacation' )  
     782            {  
     783                $user = Controller::read(array('concept' => 'user' , 'id' => config::me('uidNumber') , 'service' => 'OpenLDAP'));  
     784                $ldapConf = Config::service('OpenLDAP', 'config');  
     785                $con = ldap_connect( $ldapConf['host'] );  
     786                ldap_set_option( $con,LDAP_OPT_PROTOCOL_VERSION, 3 );  
     787                ldap_bind( $con, $ldapConf['user'], $ldapConf['password']);  
     788                $info = array();  
     789                $info['vacationActive'] = 'FALSE';  
     790                $info['vacationInfo'] = "";  
     791                ldap_modify ( $con , $user['dn'] ,  $info );  
     792                ldap_close($con);  
     793            }  
     794        } 
    699795} 
  • branches/2.4/prototype/modules/mail/css/followupflag.css

    r6167 r6754  
    5353.followupflag-container .background-color  {margin:0; outline: 0; width: 100px; -moz-border-radius: 5px; -webkit-border-radius:5px; float: left; } 
    5454.flag-edit { background: #00820F; width: 8px; height: 6px; float:left; margin: 4px 0 -3px 5px; } 
    55 .flag-edited{ width: 8px; height: 6px;} 
     55.flag-edited{ width: 8px; height: 6px; } 
    5656.colorpicker { float: right; margin: -15px 0 0 0; } 
    5757 
     
    209209span.removeLabeledMsg {margin:0 5px 0 5px;font-weight: bold;} 
    210210span.removeLabeledMsg:hover {cursor: pointer;} 
     211 
     212.freeow .gray:hover .background { 
     213    border-color: #BBB; 
     214} 
     215.minimize-alarm { 
     216        background: url("../img/minimizar.png") no-repeat scroll 0 0 transparent; 
     217        height: 16px; 
     218    position: relative; 
     219    width: 16px; 
     220        float:right;  
     221        margin-right:5px; 
     222} 
     223.maximize-alarm { 
     224        background: url("../img/maximizar.png") no-repeat scroll 0 0 transparent; 
     225        height: 16px; 
     226    position: relative; 
     227    width: 16px; 
     228        float:right;  
     229        margin-right:5px; 
     230} 
     231.content-alarm ul { 
     232        max-height: 100px; 
     233        overflow: auto; 
     234} 
     235.content-alarm { 
     236        margin-top: 5px; 
     237} 
     238.title-alarm { 
     239    margin-left: 90px; 
     240        font-size: 16px; 
     241} 
     242.alert-options { 
     243        border: none; 
     244} 
     245.confirm-alarm { 
     246        float:right; 
     247} 
     248.freeow .gray h2 { 
     249        font-size: 12px; 
     250} 
     251.freeow { 
     252        width: 325px; 
     253} 
     254.freeow .gray .content { 
     255        margin: 5px; 
     256} 
     257.freeow .gray .background { 
     258        background-color: #fafafa; 
     259        border: 2px solid #BBB; 
     260} 
     261.freeow .content { 
     262        margin: 5px; 
     263} 
     264 
     265.filtersDeadline .img_title { 
     266        background: url("../img/email.png") no-repeat scroll 0 0 transparent; 
     267        height: 20px; 
     268    position: absolute; 
     269    width: 20px; 
     270        float:left;  
     271        margin-left:40px; 
     272        top: 7px; 
     273} 
     274.alarmDeadline .img_title { 
     275        background: url("../img/flagDefault4.png") no-repeat scroll 0 0 transparent; 
     276        height: 10px; 
     277    position: absolute; 
     278    width: 10px; 
     279        float:left;  
     280        margin-left:42px; 
     281        top: 11px; 
     282} 
     283.doneDeadline .img_title { 
     284        background: url("../img/flagDone.png") no-repeat scroll 0 0 transparent; 
     285        height: 10px; 
     286    position: absolute; 
     287    width: 10px; 
     288        float:left;  
     289        margin-left:43px; 
     290        top: 11px; 
     291} 
     292.search-result-item {  
     293        border: none; 
     294} 
     295.td-label-search { 
     296        border: none; 
     297} 
  • branches/2.4/prototype/modules/mail/interceptors/Attachments.php

    r6130 r6754  
    4747* @since      Classe disponibilizada na versão 2.4 
    4848*/ 
     49 
     50use prototype\api\Config as Config; 
     51 
    4952class Attachments {      
    5053         
  • branches/2.4/prototype/modules/mail/interceptors/FollowupflagSecure.php

    r5611 r6754  
    11<?php 
     2 
     3use prototype\api\Config as Config; 
     4 
    25class FollowupflagSecure {       
    36         
  • branches/2.4/prototype/modules/mail/interceptors/Helpers.php

    r6653 r6754  
    11<?php 
    22include_once ROOTPATH."/../expressoMail1_2/inc/class.imap_functions.inc.php"; 
     3 
     4use prototype\api\Config as Config; 
    35 
    46class Helpers {     
     
    4143                                $labeledsIds[] = $e['id']; 
    4244                } 
    43                  
    4445                Controller::delete( array( 'concept' => 'labeled', 'service' => 'Imap' ), false, array( 'filter' => array( 'IN', 'id', $labeledsIds )) ); 
    4546 
     
    205206                 
    206207                if(empty($params['messageId']))  
    207                     throw new Exception('#FollowupflagMessageIdError');  
    208                 else  
    209                     $params = Controller::create($imap_uri, $params); 
     208                    throw new Exception('#FollowupflagMessageIdError'); 
     209                else  
     210                    $params = Controller::create($imap_uri, $params); 
    210211 
    211212                if (!$params) 
     
    219220                 * deste interceptor. 
    220221                 */ 
    221  
    222  
    223  
    224  
     222                 
     223            
     224             
     225             
    225226                if ($original['URI']['service'] == 'PostgreSQL') return $result; 
    226227                 
     
    268269        //followupflagged:PostgreSQL.after.find 
    269270        public function doImapFind( &$uri , &$result , &$criteria , $original ){ 
    270  
    271                 $imap_uri = $uri; 
     271             
     272                $imap_uri = $uri; 
    272273                $imap_uri['service'] = 'Imap'; 
    273274                $imap_criteria = $original['criteria']; 
  • branches/2.4/prototype/modules/mail/interceptors/LabelSecure.php

    r5540 r6754  
    11<?php 
     2 
     3use prototype\api\Config as Config; 
     4 
    25class LabelSecure {      
    36 
  • branches/2.4/prototype/modules/mail/js/foldertree.js

    r6635 r6754  
    233233                        // eventnsagens : SE O DROP VIER DE UMA ABA ABERTA 
    234234                        else if(folder_to_move == "border_tr"){ 
    235                                 var id_msg = border_id.split("_")[0];  
     235                                var id_msg = border_id.split("_")[0]; 
    236236                                folder = $("#input_folder_"+border_id+"_r")[0] ? $("#input_folder_"+border_id+"_r").val() : (openTab.imapBox[border_id] ? openTab.imapBox[border_id]:get_current_folder()); 
     237                                alternate_border(border_id); 
    237238                                move_msgs2(folder, id_msg, border_id, folder_to, to_folder_title,true); 
    238239                                return refresh(); 
  • branches/2.4/prototype/modules/mail/js/followupflag.js

    r6653 r6754  
    1 MsgsCallbackFollowupflag = {  
    2                   
    3     '#FollowupflagMessageIdError': function(){  
    4         alert('Não foi possível sinalizar esta mensagem. \nDetalhes do erro: mensagem não contém o atributo message-id.');  
    5     },  
    6     '#FollowupflagLimitError': function(){  
    7         alert('Não foi possível sinalizar esta mensagem. \nDetalhes do erro: limite de flags atingido para esta pasta.');  
    8     },  
    9     '#FollowupflagParamsError': function(){  
    10         alert('Não foi possível sinalizar esta mensagem. \nDetalhes do erro: mensagem não contém todos os atributos necessários.');  
    11     }  
    12       
    13 }  
     1MsgsCallbackFollowupflag = { 
     2 
     3    '#FollowupflagMessageIdError': function(){ 
     4        alert('Não foi possível sinalizar esta mensagem. \nDetalhes do erro: mensagem não contém o atributo message-id.'); 
     5    }, 
     6    '#FollowupflagLimitError': function(){ 
     7        alert('Não foi possível sinalizar esta mensagem. \nDetalhes do erro: limite de flags atingido para esta pasta.'); 
     8    }, 
     9    '#FollowupflagParamsError': function(){ 
     10        alert('Não foi possível sinalizar esta mensagem. \nDetalhes do erro: mensagem não contém todos os atributos necessários.'); 
     11    } 
     12     
     13} 
    1414 
    1515function updateCacheFollowupflag(msgNumber, msgFolder, op){ 
     
    265265                                        updateCacheFollowupflag(selectedMessageIds, folders, true); 
    266266                                        winElement.dialog("close"); 
    267                                         alarmFollowupflagged(); 
     267                                        alarmFollowupflagged('followupflagAlarms'); 
    268268                                }); 
    269269                                winElement.find('.menu-configure-followupflag .save').button("option", "disabled", true); 
     
    342342                DataLayer.commit(false, false, function(){ 
    343343                        winElement.dialog("close"); 
    344                         alarmFollowupflagged(); 
     344                        alarmFollowupflagged('followupflagAlarms'); 
    345345                }); 
    346346                 
     
    485485 
    486486/** 
    487  * constrói as duas possíveis janela de alerta, utilizando o mesmo template 
     487 * constrói as três possíveis janelas de alerta, utilizando o mesmo template 
     488 * para o parametro alert_type, espera-se vazio, followupflagAlarms ou filtersAlarms 
     489 * vazio: quando serão carregadas todas as modais de alarmes 
     490 * followupflagAlarms: quando serão carregadas as modais referentes à sinalizações 
     491 * filtersAlarms: quando será carregada a modal de filtros (nesse caso o parametro filter_list deve conter a lista de mensagens a ser exibida na modal) 
    488492 */ 
    489 function alarmFollowupflagged(){ 
    490     $('.followupflag-alarm').remove(); 
    491         var toIterate = [ 
    492                 { 
    493                         attrDeadline: 'doneDeadline',  
    494                         caption: {singular:'You have one undone message today:',  
    495                         plural:"You have %1 undone messages today:" 
    496                         }, 
    497                         onOk: function(event){ 
    498                                 if($(event.target).parents('.doneDeadline').find('[name="stopAlert"]').is(':checked')){ 
    499                                         $.cookie("fadeCompleted", (new Date).toString("dd/MM/yyyy"), {  
    500                                                 expires: 1  
    501                                         }); 
    502                                 } 
    503                         }, 
    504                         enable: ($.cookie("fadeCompleted") != (new Date).toString("dd/MM/yyyy")) 
    505                 }, 
    506                 { 
    507                         attrDeadline: 'alarmDeadline', 
    508                         caption: { 
    509                                 singular:'You have a follow up due for today:',  
    510                                 plural:'You have %1 follow ups due for today:' 
    511                         }, 
    512                         onOk: function(event){ 
    513                                 if($(event.target).parents('.alarmDeadline').find('[name="stopAlert"]').is(':checked')){ 
    514                                         $.cookie("fadeAlarm", (new Date).toString("dd/MM/yyyy"), {  
    515                                                 expires: 1  
    516                                         }); 
    517                                 } 
    518                         }, 
    519                         enable: ($.cookie("fadeAlarm") != (new Date).toString("dd/MM/yyyy")) 
    520                 } 
    521         ]; 
     493function alarmFollowupflagged(alert_type, filter_list){ 
     494        switch(alert_type){ 
     495                // carregar modais de sinalizadores 
     496                case 'followupflagAlarms': 
     497                        $('.doneDeadline').remove(); 
     498                        $('.alarmDeadline').remove(); 
     499                        var toIterate = [ 
     500                                { 
     501                                        attrDeadline: 'doneDeadline',  
     502                                        caption: {singular:'You have one undone message today:',  
     503                                        plural:"You have %1 undone messages today:" 
     504                                        }, 
     505                                        title: get_lang('Done'), 
     506                                        enable: ($.cookie("fadeCompleted") != (new Date).toString("dd/MM/yyyy")) 
     507                                }, 
     508                                { 
     509                                        attrDeadline: 'alarmDeadline', 
     510                                        caption: { 
     511                                                singular:'You have a follow up due for today:',  
     512                                                plural:'You have %1 follow ups due for today:' 
     513                                        }, 
     514                                        title: get_lang('Follow ups'), 
     515                                        enable: ($.cookie("fadeAlarm") != (new Date).toString("dd/MM/yyyy")) 
     516                                } 
     517                        ]; 
     518                        break; 
     519                // carregar modal de filtros 
     520                case 'filtersAlarms': 
     521                        $('.filtersDeadline').remove(); 
     522                        var toIterate = [ 
     523                                { 
     524                                        attrDeadline: 'filtersDeadline', 
     525                                        caption: { 
     526                                                singular:'You have an archived message:',  
     527                                                plural:'You have %1 messages archived:' 
     528                                        }, 
     529                                        title: get_lang('Filter by sender'), 
     530                                        enable: ($.cookie("fadeFilterAlarm") != (new Date).toString("dd/MM/yyyy")) 
     531                                } 
     532                        ]; 
     533                        break; 
     534                // carregar todas as modais 
     535                default: 
     536                        $('.gray').remove(); 
     537                        var toIterate = [ 
     538                                { 
     539                                        attrDeadline: 'filtersDeadline', 
     540                                        caption: { 
     541                                                singular:'You have an archived message:',  
     542                                                plural:'You have %1 messages archived:' 
     543                                        }, 
     544                                        title: get_lang('Filter by sender'), 
     545                                        enable: ($.cookie("fadeFilterAlarm") != (new Date).toString("dd/MM/yyyy")) 
     546                                }, 
     547                                { 
     548                                        attrDeadline: 'doneDeadline',  
     549                                        caption: {singular:'You have one undone message today:',  
     550                                        plural:"You have %1 undone messages today:" 
     551                                        }, 
     552                                        title: get_lang('Done'), 
     553                                        enable: ($.cookie("fadeCompleted") != (new Date).toString("dd/MM/yyyy")) 
     554                                },                               
     555                                { 
     556                                        attrDeadline: 'alarmDeadline', 
     557                                        caption: { 
     558                                                singular:'You have a follow up due for today:',  
     559                                                plural:'You have %1 follow ups due for today:' 
     560                                        }, 
     561                                        title: get_lang('Follow ups'), 
     562                                        enable: ($.cookie("fadeAlarm") != (new Date).toString("dd/MM/yyyy")) 
     563                                } 
     564                        ]; 
     565                        break; 
     566        } 
    522567        var i = 0; 
     568        // recupera e monta os dados para serem exibidos nas modais de alarmes 
    523569        while (it = toIterate.pop()){ 
    524570                if (!it.enable) continue; 
    525  
    526                 var alarmInRange = DataLayer.get('followupflagged', {filter: ['AND', ['>', it.attrDeadline, (new Date()).set({hour:0, minute:0, second:0}).toString('yyyy-MM-dd 00:00:00')], ['<', it.attrDeadline, (new Date()).set({hour:0, minute:0, second:0}).addHours(24).toString('yyyy-MM-dd 00:00:00')]], criteria: {deepness: 1}}); 
     571                 
     572                var alarmInRange = {}; 
     573                // caso for alarme de sinalizadores 
     574                if(it.attrDeadline == 'doneDeadline' || it.attrDeadline == 'alarmDeadline'){ 
     575                        alarmInRange = DataLayer.get('followupflagged', {filter: ['AND', ['>', it.attrDeadline, (new Date()).set({hour:0, minute:0, second:0}).toString('yyyy-MM-dd 00:00:00')], ['<', it.attrDeadline, (new Date()).set({hour:0, minute:0, second:0}).addHours(24).toString('yyyy-MM-dd 00:00:00')]], criteria: {deepness: 1}}); 
     576                        if(alarmInRange.length > 0){ 
     577                                for(var i=0; i<alarmInRange.length; i++){ 
     578                                        if(alarmInRange[i].isDone == 1){ 
     579                                                 alarmInRange.splice(i,1); 
     580                                                 i--; 
     581                                        } 
     582                                } 
     583                        } 
     584                         
     585                        if(alarmInRange.length > 0){ 
     586                                var messages_alarm = []; 
     587                                for(var i=0; i<alarmInRange.length; i++){ 
     588                                        var date = Date.parseExact(alarmInRange[i][it.attrDeadline], 'yyyy-MM-dd HH:mm:ss'); 
     589                                        if(date) 
     590                                                alarmInRange[i][it.attrDeadline] = date.toString('HH:mm'); 
     591                                         
     592                                        if(alarmInRange[i]['followupflag']['id'] < 7){ 
     593                                                var nameFollowupflag = get_lang(alarmInRange[i]['followupflag']['name']); 
     594                                        }else{ 
     595                                                var nameFollowupflag = alarmInRange[i]['followupflag']['name']; 
     596                                        } 
     597                                        var li_alarm = alarmInRange[i][it.attrDeadline] + ' - ' + nameFollowupflag + ' - ' + truncate(alarmInRange[i]['message']['headers']['subject'], 15); 
     598                                        messages_alarm.push({ 
     599                                                "msg_number" : alarmInRange[i]['messageNumber'], 
     600                                                "msg_folder" : alarmInRange[i]['folderName'], 
     601                                                "a"                      : li_alarm 
     602                                        });                              
     603                                } 
     604                        } 
     605                }  
     606                // caso for alarme de filtros 
     607                else if(filter_list){ 
     608                        alarmInRange = filter_list; 
     609                        if(alarmInRange.length > 0){ 
     610                                var messages_alarm = []; 
     611                                for(var i=0; i<alarmInRange.length; i++){ 
     612                                        var d = new Date(alarmInRange[i]['udate']*1000); 
     613                                        var dia = d.getDate(); 
     614                                        if(dia < 10){ 
     615                                                dia = "0" + dia; 
     616                                        } 
     617                                        var mes = (d.getMonth()) + 1; 
     618                                        if(mes < 10){ 
     619                                                mes = "0" + mes; 
     620                                        } 
     621                                        var ano = d.getFullYear(); 
     622                                        var dtFormatada = dia + '/' + mes + '/' + ano; 
     623                                        alarmInRange[i]['udate'] = dtFormatada; 
     624                                                 
     625                                        var li_alarm = alarmInRange[i]['udate'] + ' ' + alarmInRange[i]['smalldate'] + ' - ' + alarmInRange[i]['from'] + ' - ' + truncate(alarmInRange[i]['subject'], 15); 
     626                                        messages_alarm.push({ 
     627                                                "msg_number" : alarmInRange[i]['msg_number'], 
     628                                                "msg_folder" : alarmInRange[i]['msg_folder'], 
     629                                                "a"                      : li_alarm 
     630                                        });                              
     631                                } 
     632                        } 
     633                } 
     634                                 
    527635                if(alarmInRange.length > 0){ 
    528                         for(var i=0; i<alarmInRange.length; i++){ 
    529                                 if(alarmInRange[i].isDone == 1){ 
    530                                  alarmInRange.splice(i,1); 
    531                                  i--; 
    532                                 } 
    533                         } 
    534                 } 
    535                 if(alarmInRange.length > 0){ 
    536                         for(var i=0; i<alarmInRange.length; i++){ 
    537                                 var date = Date.parseExact(alarmInRange[i][it.attrDeadline], 'yyyy-MM-dd HH:mm:ss'); 
    538                                 if(date) 
    539                                         alarmInRange[i][it.attrDeadline] = date.toString('HH:mm'); 
    540                         } 
     636                        // monta o subtitulo da modal 
    541637                        var caption = (alarmInRange.length == 1) ? 
    542638                                get_lang(it.caption.singular): 
    543639                                get_lang(it.caption.plural, alarmInRange.length); 
    544                                  
     640                        // monta o array de dados a ser passado para o template  
    545641                        var data = { 
    546                                 alarmInRange : alarmInRange,  
     642                                alarmInRange : messages_alarm,  
    547643                                caption: caption,  
    548                                 it : it 
     644                                type: it.attrDeadline, 
     645                                captions: it.caption 
    549646                        }; 
     647                        // tipo de modal a ser exibida 
     648                        var type_alarm = it.attrDeadline; 
     649                        //função chamada ao clicar no botão Ok da modal 
     650                        var ok_function = function(event, type, type_cookie){ 
     651                                if($(event.target).parents('.'+type).find('[name="stopAlert"]').is(':checked')){ 
     652                                        $.cookie(type_cookie, (new Date).toString("dd/MM/yyyy"), {  
     653                                                expires: 1  
     654                                        }); 
     655                                } 
     656                        } 
     657                        // carrega o template dos alarmes e cria a modal utilizando o plugin freeow 
    550658                        var dialogText = DataLayer.render("../prototype/modules/mail/templates/followupflag_alarm_list.ejs", data); 
     659                        var titulo = '<div class="header-alarm"><span class="img_title"></span><span class="title-alarm"><strong>'+it.title+'</strong></span><span name="header-icon" class="maximize-alarm"></span></div>'; 
     660                        $("#freeow").freeow(titulo, dialogText, { 
     661                                classes: ["gray", type_alarm], 
     662                                autoHide: false,  
     663                                startStyle: null, 
     664                                onClick: function(event){ 
     665                                        var type = ''; 
     666                                        var type_cookie = ''; 
     667                                        if($(this).hasClass('alarmDeadline')){ 
     668                                                type = 'alarmDeadline'; 
     669                                                type_cookie = 'fadeAlarm'; 
     670                                        }else if($(this).hasClass('doneDeadline')){ 
     671                                                type = 'doneDeadline'; 
     672                                                type_cookie = 'fadeCompleted'; 
     673                                        }else if($(this).hasClass('filtersDeadline')){ 
     674                                                type = 'filtersDeadline'; 
     675                                                type_cookie = 'fadeFilterAlarm'; 
     676                                        } 
     677                                        if($(event.target).hasClass('stop-alert-alarm')){ 
     678                                                return; 
     679                                        } 
     680                                        if($(event.target).hasClass('minimize-alarm')){ 
     681                                                $('.'+type).find('.content-alarm').hide(); 
     682                                                $(event.target).removeClass('minimize-alarm').addClass('maximize-alarm'); 
     683                                                return; 
     684                                        } 
     685                                        if($(event.target).hasClass('maximize-alarm')){ 
     686                                                $('.'+type).find('.content-alarm').show(); 
     687                                                $(event.target).removeClass('maximize-alarm').addClass('minimize-alarm'); 
     688                                                return; 
     689                                        } 
     690                                        if($(event.target).hasClass('confirm-alarm')){ 
     691                                                ok_function(event, type, type_cookie); 
     692                                                $('.'+type).remove(); 
     693                                                return; 
     694                                        } 
     695                                        return false; 
     696                                } 
     697                        }); 
     698                        // elementos do freeow desnecessários 
     699                        $('.gray .background .content p').remove(); 
     700                        $('.gray .icon').remove(); 
     701                        $('.gray .close').remove(); 
    551702                         
    552                         /** 
    553                          * A última dialog criada é a dialog mais ao alto 
    554                          */ 
    555                         var offsetHeight = $('.ZebraDialog.right-bottom:last').length ?  
    556                                 $(window).height() - $('.ZebraDialog.right-bottom:last').position().top : 0; 
    557  
    558                         /** 
    559                          * Se for a primeira, desloca para cima do rodapé do grid 
    560                          * caso contrário desloca para um pouco acima da última dialog criada 
    561                          */ 
    562                         offsetHeight = !offsetHeight ? 35 : offsetHeight + 20 ;                  
    563                         var dialog = new $.Zebra_Dialog(dialogText, { 
    564                                 'buttons':  ['Ok'], 
    565                                 'modal': false, 
    566                                 'vcenter_short_message': false, 
    567                                 'position': ['right - 20', 'bottom - ' + offsetHeight.toString() ], 
    568                                 'custom_class': 'right-bottom followupflag-alarm '+it.attrDeadline 
    569                         }).dialog; 
    570                         $(".ZebraDialog.followupflag-alarm .ZebraDialog_Button0").click(it.onOk); 
    571                         $(".ZebraDialog.followupflag-alarm .display-options .more").click(function(event) { 
    572                                 $(event.target).parents('.followupflag-alarm').find('.message-list').css('height', 'auto'); 
    573                         }); 
     703                        // botão ok da modal com jquery button 
     704                        $('.content-alarm button').button(); 
    574705                }                
    575706        } 
     707         
     708        // controle de qual janela de alarme estará maximizada 
     709        $('.gray').find('.content-alarm').hide(); 
     710        $('.gray').find('.header-alarm [name="header-icon"]').removeClass('minimize-alarm').addClass('maximize-alarm'); 
     711         
     712        if($('.gray').length > 0){ 
     713                if($('.gray').hasClass('filtersDeadline')){ 
     714                        $('.filtersDeadline').find('.content-alarm').show(); 
     715                        $('.filtersDeadline .header-alarm [name="header-icon"]').removeClass('maximize-alarm').addClass('minimize-alarm'); 
     716                }else if($('.gray').hasClass('alarmDeadline')){ 
     717                        $('.alarmDeadline').find('.content-alarm').show(); 
     718                        $('.alarmDeadline .header-alarm [name="header-icon"]').removeClass('maximize-alarm').addClass('minimize-alarm');         
     719                }else if($('.gray').hasClass('doneDeadline')){ 
     720                        $('.doneDeadline').find('.content-alarm').show(); 
     721                        $('.doneDeadline .header-alarm [name="header-icon"]').removeClass('maximize-alarm').addClass('minimize-alarm');  
     722                } 
     723        } 
     724         
    576725} 
     726                 
    577727$('#main_table').ready(function(){ 
    578     alarmFollowupflagged(); 
     728        handlerMessageFilter = function (data) { 
     729                alarmFollowupflagged(null, data); 
     730        } 
     731        /* Busca  nas pastas indexadas para ver se há novas mensagens com a flag $FilteredMessage */ 
     732        cExecute ("$this.imap_functions.getFlaggedAlertMessages&folders="+fromRules, handlerMessageFilter); 
    579733}); 
     734 
  • branches/2.4/prototype/modules/mail/js/label.js

    r6653 r6754  
    127127                                var hasLabel = true; 
    128128                                $.each(data, function(index, value) { 
    129                                  
    130                                 hasLabel = typeof value == 'object' ? false : value; 
    131  
     129                                         
     130                                        hasLabel = typeof value == 'object' ? false : value; 
     131                                         
    132132                                }); 
    133133                                         
     
    166166                                                 
    167167                                                draw_tree_labels(); 
    168                                                 var msgsReference = DataLayer.get('labeled', {filter: ['=', 'labelId', ''+labelEdited.id]}, true);  
    169                                                 updateMessageLabels(msgsReference); 
     168                                                var msgsReference = DataLayer.get('labeled', {filter: ['=', 'labelId', ''+labelEdited.id]}, true); 
     169                                                updateMessageLabels(msgsReference); 
    170170                                 
    171171                                                /** 
     
    207207                 
    208208        DataLayer.remove('label', id); 
    209          
     209 
    210210        DataLayer.commit(false, false, function(data){ 
    211211                $.contextMenu( 'destroy', ".table_box tbody tr"); 
    212212                loadMenu(); 
    213                 updateMessageLabels(msgsReference);              
     213                updateMessageLabels(msgsReference);      
    214214        }); 
    215215        winElement.find(".label-list li:first").trigger("click"); 
  • branches/2.4/prototype/modules/mail/templates/followupflag_alarm_list.ejs

    r5738 r6754  
    1 <p class="title"><strong><%= data.caption %> </strong></p> 
    2  
    3 <ul class="message-list"> 
    4 <% 
    5 for(var i=0; i<data.alarmInRange.length; i++){ 
    6         var openMessageScript = "cExecute('$this.imap_functions.get_info_msg&msg_number="+data.alarmInRange[i].messageNumber+"&msg_folder="+data.alarmInRange[i].folderName+"&alarm=true', show_msg);"; 
    7         if(data.alarmInRange[i].followupflag.id < 7){ 
    8                 var nameFollowupflag = get_lang(data.alarmInRange[i].followupflag.name); 
    9         }else{ 
    10                 var nameFollowupflag = data.alarmInRange[i].followupflag.name; 
     1<div class="content-alarm"> 
     2        <span class="subtitle-alarm"> 
     3                <strong><%=data.caption %></strong> 
     4        </span> 
     5        <ul class="message-list"> 
     6        <% 
     7        for(var i=0; i<data.alarmInRange.length; i++){ 
     8                if(data.type == 'filtersDeadline') 
     9                        var openMessageScript = "$(this).parent().remove(); var msgs_count = $('.filtersDeadline').find('.message-item').length; if(msgs_count == 0){ $('.filtersDeadline').remove(); } $('.subtitle-alarm').find('strong').html((msgs_count == 1)?get_lang('"+data.captions.singular+"'):get_lang('"+data.captions.plural+"', msgs_count)); cExecute('$this.imap_functions.open_flagged_msg&msg_number="+data.alarmInRange[i].msg_number+"&msg_folder="+data.alarmInRange[i].msg_folder+"&alarm=true', show_msg);"; 
     10                else     
     11                        var openMessageScript = "cExecute('$this.imap_functions.get_info_msg&msg_number="+data.alarmInRange[i].msg_number+"&msg_folder="+data.alarmInRange[i].msg_folder+"&alarm=true', show_msg);"; 
     12        %> 
     13                <li class="message-item"> 
     14                        <a onclick="<%=openMessageScript%>"> 
     15                                <%= data.alarmInRange[i].a %> 
     16                        </a> 
     17                </li> 
     18        <% 
    1119        } 
    12 %> 
    13         <li class="message-item"> 
    14                 <a onclick="<%=openMessageScript%>"> 
    15                         <%= (it.attrDeadline == 'alarmDeadline') ? data.alarmInRange[i].alarmDeadline : data.alarmInRange[i].doneDeadline %> - <%= nameFollowupflag %> - <%= data.alarmInRange[i].message.headers.subject %> 
    16                 </a> 
    17         </li> 
    18 <% 
    19 } 
    20 %> 
    21 </ul>  
    22  
    23 <fieldset class="alert-options"> 
    24         <input type="checkbox" name="stopAlert"> <label><%= get_lang("Don't show this window anymore today.")%></label> 
    25 </fieldset> 
     20        %> 
     21        </ul>  
     22        <fieldset class="alert-options"> 
     23                <input type="checkbox" class="stop-alert-alarm" name="stopAlert"> <label><%= get_lang("Don't show this window anymore today.")%></label> 
     24                <button class="confirm-alarm">Ok</button> 
     25        </fieldset> 
     26</div> 
  • branches/2.4/prototype/modules/mail/templates/label_list.ejs

    r6723 r6754  
    1414                                                background: <%= (data.labels[i].backgroundColor) ? data.labels[i].backgroundColor : '#ffffff' %>; float:right;"></div> 
    1515 
    16                                 <div class="button close tiny" style="float: right" title="<%= get_lang("Delete")%>"></div>  
    17                     <div class="button edit tiny" style="float: right" title="<%= get_lang("Edit")%>"></div>  
     16                                <div class="button close tiny" style="float: right" title="<%= get_lang("Delete")%>"></div> 
     17                                <div class="button edit tiny" style="float: right" title="<%= get_lang("Edit")%>"></div> 
    1818                        </li> 
    1919                <%}%> 
  • branches/2.4/prototype/modules/mail/templates/label_listitem.ejs

    r6723 r6754  
    55                <input type="hidden" value="<%= data.id%>" name="labelItemId" class="id-item-list" /> 
    66                <span class="text-list"><%= data.name %></span> 
    7                 <div class="button close tiny" style="float: right" title="<%= get_lang("Delete")%>"></div>  
    8             <div class="button edit tiny" style="float: right" title="<%= get_lang("Edit")%>"></div> 
     7                <div class="button close tiny" style="float: right" title="<%= get_lang("Delete")%>"></div> 
     8                <div class="button edit tiny" style="float: right" title="<%= get_lang("Edit")%>"></div> 
    99                                         
    1010        </li> 
  • branches/2.4/prototype/modules/mail/templates/new_message.ejs

    r6220 r6754  
    6161                                </td> 
    6262                                <td class="value" style="width: 100%;"> 
    63                                         <textarea class="new-message-input to" name="input_to" style="width:99%; resize: none;"></textarea> 
     63                                        <div class="email-area ui-corner-all"> 
     64                                                <input class="new-message-input to email-text" name="input_aux_to" type="text" value="" autocomplete="off"/>     
     65                                        </div> 
     66                                        <textarea class="new-message-input to" name="input_to" style="width:99%; resize: none;display : none;"></textarea> 
    6467                                </td> 
    6568                        </tr> 
     
    7174                                </td> 
    7275                                <td class="value"> 
    73                                         <textarea class="new-message-input cc" name="input_cc" style="width:99%; resize: none;"></textarea> 
     76                                        <div class="email-area ui-corner-all"> 
     77                                                <input class="new-message-input cc email-text" name="input_aux_cc" type="text" value="" autocomplete="off"/>     
     78                                        </div> 
     79                                        <textarea class="new-message-input cc" name="input_cc" style="width:99%; resize: none;display : none;"></textarea> 
    7480                                </td> 
    7581                        </tr> 
     
    8187                                </td> 
    8288                                <td class="value"> 
    83                                         <textarea class="new-message-input cco" name="input_cco" style="width:99%; resize: none;"></textarea> 
     89                                        <div class="email-area ui-corner-all"> 
     90                                                <input class="new-message-input cco email-text" name="input_aux_cco" type="text" value="" autocomplete="off"/>   
     91                                        </div> 
     92                                        <textarea class="new-message-input cco" name="input_cco" style="width:99%; resize: none;display : none;"></textarea> 
    8493                                </td> 
    8594                        </tr> 
     
    8998                                </td> 
    9099                                <td class="value"> 
    91                                         <input name="input_subject" class="new-message-input subject" style="width:99.2%;"></input> 
     100                                        <input name="input_subject" class="new-message-input subject" style="width:99.2%; border-radius: 5px;"></input> 
    92101                                </td> 
    93102                        </tr> 
  • branches/2.4/prototype/modules/mail/templates/quickAddContact.ejs

    r6690 r6754  
    1 <div style="width:auto;">         
    2         <table>  
    3                 <tr>  
    4                         <td>  
    5                                 <span><%=get_lang('Nickname')%>:</span>  
    6                         </td>  
    7                         <td>  
    8                                 <input type="text" value="<%=data.nick%>" maxlength="50" id="quickAddOne_nickName" style="width:205px;"/>  
    9                         </td>  
    10                 </tr>  
    11                   
    12                 <tr>  
    13                         <td>  
    14                                 <span><%=get_lang('First Name')%>:</span>  
    15                         </td>  
    16                         <td>  
    17                                 <input type="text" value="<%=data.fname%>" maxlength="50" id="quickAddOne_firstName" style="width:205px;" class="required-field"/>  
    18                         </td>  
    19                 </tr>  
    20                   
    21                 <tr>  
    22                         <td>  
    23                                 <span><%=get_lang('Last Name')%>:</span>  
    24                         </td>  
    25                         <td>  
    26                                 <input type="text" value="<%=data.lname%>" maxlength="50" id="quickAddOne_lastName" style="width:205px;"/>  
    27                         </td>  
    28                 </tr>  
    29                   
    30                 <tr>  
    31                         <td>  
    32                                 <span><%=get_lang('Email')%>:</span>  
    33                         </td>  
    34                         <td>  
    35                                 <input type="text" value="<%=data.email%>" maxlength="50" id="quickAddOne_email" style="width:205px;" class="required-field"/>  
    36                         </td>  
    37                 </tr>  
    38         </table>  
     1<div style="width:auto;">        
     2        <table> 
     3                <tr> 
     4                        <td> 
     5                                <span><%=get_lang('Nickname')%>:</span> 
     6                        </td> 
     7                        <td> 
     8                                <input type="text" value="<%=data.nick%>" maxlength="50" id="quickAddOne_nickName" style="width:205px;"/> 
     9                        </td> 
     10                </tr> 
     11                 
     12                <tr> 
     13                        <td> 
     14                                <span><%=get_lang('First Name')%>:</span> 
     15                        </td> 
     16                        <td> 
     17                                <input type="text" value="<%=data.fname%>" maxlength="50" id="quickAddOne_firstName" style="width:205px;" class="required-field"/> 
     18                        </td> 
     19                </tr> 
     20                 
     21                <tr> 
     22                        <td> 
     23                                <span><%=get_lang('Last Name')%>:</span> 
     24                        </td> 
     25                        <td> 
     26                                <input type="text" value="<%=data.lname%>" maxlength="50" id="quickAddOne_lastName" style="width:205px;"/> 
     27                        </td> 
     28                </tr> 
     29                 
     30                <tr> 
     31                        <td> 
     32                                <span><%=get_lang('Email')%>:</span> 
     33                        </td> 
     34                        <td> 
     35                                <input type="text" value="<%=data.email%>" maxlength="50" id="quickAddOne_email" style="width:205px;" class="required-field"/> 
     36                        </td> 
     37                </tr> 
     38        </table> 
    3939</div> 
  • branches/2.4/prototype/request.php

    r6111 r6754  
    11<?php 
    22 
    3 // $properties = $_GET['properties']; 
    4 // $limit = $_GET['limit']; 
    5 // $offset = $_GET['offset']; 
    6 // $group = $_GET['group']; 
    7 // $order = $_GET['join']; 
    8 // $filter = $_GET['filter']; 
    9 // $URI = $_GET['URI']; 
     3// $properties = $_REQUEST['properties']; 
     4// $limit = $_REQUEST['limit']; 
     5// $offset = $_REQUEST['offset']; 
     6// $group = $_REQUEST['group']; 
     7// $order = $_REQUEST['join']; 
     8// $filter = $_REQUEST['filter']; 
     9// $URI = $_REQUEST['URI']; 
    1010 
    11 $concept = isset( $_GET['concept'] ) ? $_GET['concept'] : false; 
    12 $id = isset( $_GET['id'] ) ? $_GET['id'] : false; 
    13 $filter = isset( $_GET['filter'] ) ? $_GET['filter'] : false; 
    14 $criteria =  isset( $_GET['criteria'] ) ? $_GET['criteria'] : false; 
     11$concept = isset( $_REQUEST['concept'] ) ? $_REQUEST['concept'] : false; 
     12$id = isset( $_REQUEST['id'] ) ? $_REQUEST['id'] : false; 
     13$filter = isset( $_REQUEST['filter'] ) ? $_REQUEST['filter'] : false; 
     14$criteria =  isset( $_REQUEST['criteria'] ) ? $_REQUEST['criteria'] : false; 
    1515 
    1616$criteria = $filter ? $criteria ? 
  • branches/2.4/prototype/services/ImapServiceAdapter.php

    r6719 r6754  
    4242include_once ROOTPATH."/../expressoMail1_2/inc/class.imap_functions.inc.php"; 
    4343 
     44use prototype\api\Config as Config; 
     45 
    4446/** 
    4547 * 
     
    536538                                         
    537539                                        $data['messageId'] = $headers[0]->message_id; 
    538                                                          
    539  
    540                                         /*  
    541                                          * TODO  
    542                                          * Verificar erro ao tentar setar uma flag com o limite de flags atingido  
    543                                          * onde o status retornado pelo imap_setflag_full é true mesmo não sendo possível  
    544                                          * a inserção da flag.  
    545                                          */  
    546   
    547                                         return (($s) && (imap_last_error() != 'Too many user flags in mailbox')) ? $data : array(); 
     540                                         
     541                                        /* 
     542                                         * TODO 
     543                                         * Verificar erro ao tentar setar uma flag com o limite de flags atingido 
     544                                         * onde o status retornado pelo imap_setflag_full é true mesmo não sendo possível 
     545                                         * a inserção da flag. 
     546                                         */ 
     547 
     548                                        return (($s) && (imap_last_error() != 'Too many user flags in mailbox')) ? $data : array(); 
    548549 
    549550                                } else if (isset($data['messageId'])) { 
     
    614615                                        $mailService->addHeaderField('Disposition-Notification-To', Config::me('mail')); 
    615616 
     617                                $this->rfc2397ToEmbeddedAttachment($mailService , $body); 
     618 
    616619                                $isHTML = ( isset($data['type']) && $data['type'] == 'html' )?  true : false; 
    617620 
     
    633636                                                { 
    634637                                                        $body = str_replace('"../prototype/getArchive.php?mailAttachment='.$att['id'].'"', '"'.mb_convert_encoding($att['name'], 'ISO-8859-1' , 'UTF-8,ISO-8859-1').'"', $body); 
    635                                                         $mailService->addStringImage(base64_decode($att['source']), $att['type'], mb_convert_encoding($att['name'], 'ISO-8859-1' , 'UTF-8,ISO-8859-1'));  
     638                                                        $mailService->addStringImage(base64_decode($att['source']), $att['type'], mb_convert_encoding($att['name'], 'ISO-8859-1' , 'UTF-8,ISO-8859-1')); 
    636639                                                } 
    637640                                                else 
    638641                                                        $mailService->addStringAttachment(base64_decode($att['source']), mb_convert_encoding($att['name'], 'ISO-8859-1' , 'UTF-8,ISO-8859-1'), $att['type'], 'base64', isset($att['disposition']) ? $att['disposition'] :'attachment' ); 
    639                                                          
     642 
    640643                                                unset($att); 
    641644                                        } 
     
    650653                                                                {     
    651654                                                                        $body = str_ireplace('<img src="./inc/get_archive.php?msgFolder='.$value['folder'].'&msgNumber='.$value['uid'].'&indexPart='.$value['part'].'" />' , '<img src="'.$att['name'].'" />', $body); 
    652                                                                         $mailService->addStringImage($att['source'], $att['type'], mb_convert_encoding($att['name'], 'ISO-8859-1' , 'UTF-8,ISO-8859-1'));  
     655                                                                        $mailService->addStringImage($att['source'], $att['type'], mb_convert_encoding($att['name'], 'ISO-8859-1' , 'UTF-8,ISO-8859-1')); 
    653656                                                                } 
    654657                                                                else 
     
    783786    public function deleteAll( $URI, $justthese = false, $criteria = false ) 
    784787    { 
    785                 $op = $criteria['filter'][0];  
    786                 $ids = $criteria['filter'][2];  
    787                 if($op == 'IN'){  
    788                         foreach ($ids as $id){  
    789                                 self::delete( array( 'concept' => $URI['concept'], 'id' => $id), false, false);  
    790                         }  
    791                 } 
    792                  
     788                $op = $criteria['filter'][0]; 
     789                $ids = $criteria['filter'][2]; 
     790                if($op == 'IN'){ 
     791                        foreach ($ids as $id){ 
     792                                self::delete( array( 'concept' => $URI['concept'], 'id' => $id), false, false); 
     793                        } 
     794                } 
     795 
    793796                /** 
    794797                 * TODO - implementar a deleção de todos os followupflaggeds conforme filtro 
  • branches/2.4/prototype/services/OpenLDAP.php

    r5804 r6754  
    11<?php 
     2 
     3use prototype\api\Config as Config; 
    24 
    35class OpenLDAP implements Service 
     
    1315        if( !isset($criteria["limit"]) ) 
    1416                $criteria["limit"] = $this->limit; 
    15          
     17       
    1618        $sr =  ldap_search( $this->con , $this->config['context'] , self::parseCriteria($criteria , $map) , self::parseJustthese($justthese, $map) , 0 , $criteria["limit"]);  
    1719        if(!$sr) return false;  
     
    156158        $as = array_shift( $filter ); 
    157159        $op = self::parseOperator( $as ); 
    158                  
     160 
    159161        if( is_array($filter[0]) ) 
    160162        { 
  • branches/2.4/prototype/services/PostgreSQL.php

    r6299 r6754  
    4040 */ 
    4141 
     42use prototype\api\Config as Config; 
     43 
    4244class PostgreSQL implements Service 
    4345{ 
     
    8789            $map = Config::get($uri['concept'], 'PostgreSQL.mapping'); 
    8890            $criteria = ($criteria !== false) ? $this->parseCriteria ( $criteria , $map , ' WHERE '.$map['id'].' = \''.addslashes( $uri['id'] ).'\'') : ' WHERE '.$map['id'].' = \''.addslashes( $uri['id'] ).'\''; 
     91 
    8992            return $this->execSql('UPDATE '.(Config::get($uri['concept'],'PostgreSQL.concept')).' '. self::parseUpdateData( $data ,$map).$criteria); 
    9093    } 
     
    197200                    $val[] = '\''.addslashes($v).'\''; 
    198201            } 
    199              
    200             return '('.implode(',', $ind).') VALUES ('.implode(',', $val).') RETURNING '.$map['id'].' as id'; 
     202            return '('.implode(',', $ind).') VALUES ('.implode(',', $val).') RETURNING '.$map['id'].' as id';        
    201203    } 
    202204         
     
    244246                    $query .= ' GROUP BY '.( is_array($criteria["group"]) ? implode(', ', $criteria["group"]) : $criteria["group"] ).' '; 
    245247            } 
    246              
     248    
    247249            if( isset($criteria["order"]) ) 
    248250            { 
    249                     $query .= ' ORDER BY '.self::parseOrder( $criteria["order"], $map ).' '; 
    250             } 
     251                    //Verificar se os atributos para o ORDER BY serao ordenados em ordem decrescente [DESC] 
     252                    $orderDesc = ( isset($criteria["orderDesc"]) && count($criteria["order"]) == count($criteria["orderDesc"]) ) ? $criteria["orderDesc"] : false; 
     253                 
     254                    $query .= ' ORDER BY '.self::parseOrder( $criteria["order"], $map, $orderDesc ).' '; 
     255             
     256            } 
     257 
    251258            if( isset($criteria["limit"]) ) 
    252259            { 
     
    339346    } 
    340347 
    341    private static function parseOrder($order , &$map) 
     348    private static function parseOrder($order , &$map, $orderDesc=false) 
    342349    { 
    343                    
     350 
    344351        if($notArray = !is_array($order)) //Caso seja um full select pegar todas as keys 
    345352            $order = array( $order ); 
     353 
     354        //Caso seja feita ordenacao em ordem descrescente 
     355        //concatenar DESC em cada atributo 
     356        if($orderDesc !== false){ 
     357                if(!is_array($orderDesc)){ 
     358                        $orderDesc = array( $orderDesc ); 
     359                } 
     360 
     361                for($i=0; $i<count($order); $i++){ 
     362                        $order[$i] .= ($orderDesc[$i] === true) ? ' DESC' : ''; 
     363                } 
     364        } 
    346365 
    347366        $return = array(); 
     
    356375        return ( $notArray ?  $order[0] : implode(', ', $order) ); 
    357376    } 
     377 
    358378} 
    359379 
  • branches/2.4/prototype/services/iCal.php

    r6346 r6754  
    44require_once ROOTPATH . '/plugins/icalcreator/iCalcreator.class.php'; 
    55require_once ROOTPATH . '/modules/calendar/constants.php'; 
     6 
     7use prototype\api\Config as Config; 
    68 
    79//TODO:Timeout request 
  • branches/2.4/reports/setup/setup.inc.php

    r5298 r6754  
    1313        $setup_info['reports']['title']         = 'Expresso Reports'; 
    1414        /* Ao incrementar versão, não esquecer de declarar função do tables_update.inc.php*/ 
    15         $setup_info['reports']['version']       = '2.4.0'; 
     15        $setup_info['reports']['version']       = '2.4.1'; 
    1616        $setup_info['reports']['app_order']     = 17; 
    1717        $setup_info['reports']['tables']    = ''; 
     
    4141        $setup_info['reports']['depends'][] = array( 
    4242                'appname' => 'phpgwapi', 
    43                 'versions' => Array('2.4') 
     43                'versions' => Array('2.4.1') 
    4444        ); 
    4545?> 
  • branches/2.4/services/class.db.php

    r5842 r6754  
    263263                $query = 'select' 
    264264                                                . ' G.oid,' 
     265                                                . ' G.id_group,' 
    265266                                                . ' G.title,' 
    266267                                                . ' G.short_name'; 
     
    288289                                $all_contacts[ $object[ 'oid' ] ]['title'] = $object['title']; 
    289290                                $all_contacts[ $object[ 'oid' ] ]['short_name'] = $object['short_name']; 
     291                                $all_contacts[ $object[ 'oid' ] ]['id'] = $object[ 'id_group' ]; 
    290292                } 
    291293                return array_values($all_contacts); 
  • branches/2.4/setup/applications.php

    r3620 r6754  
    402402                function allow_remove( $app ) 
    403403                { 
    404                         $never_remove = array( 'phpgwapi', 'preferences' ); 
     404                        $never_remove = array( 'phpgwapi', 'preferences' , 'rest' ); 
    405405 
    406406                        return ( in_array( $app, $never_remove ) ) ? '&nbsp;' : '<input type="checkbox" name="remove[' . $app . ']">'; 
Note: See TracChangeset for help on using the changeset viewer.