- Timestamp:
- 07/11/12 11:45:10 (12 years ago)
- Location:
- branches/2.4
- Files:
-
- 120 edited
- 263 copied
Legend:
- Unmodified
- Added
- Removed
-
branches/2.4
-
Property
svn:mergeinfo
set to
(toggle deleted branches)
/trunk merged eligible /sandbox/2.4.1-3 6237-6527
-
Property
svn:mergeinfo
set to
(toggle deleted branches)
-
branches/2.4/.htaccess
r6625 r6754 126 126 RewriteCond %{REQUEST_METHOD} ^(TRACE|TRACK|OPTIONS|HEAD)$ [NC] 127 127 RewriteRule ^.*$ - [F] 128 RewriteRule ^rest(.*)$ prototype/rest/$1 [QSA,L] 129 128 130 129 131 # -
branches/2.4/INSTALL/debian/squeeze/etc/apache2/sites-available/expresso
r6623 r6754 5 5 DocumentRoot /var/www/expresso/ 6 6 7 7 <Directory /var/www/expresso/> 8 8 Options FollowSymLinks MultiViews 9 9 AllowOverride All … … 12 12 </Directory> 13 13 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> 20 20 21 21 ErrorLog /var/log/apache2/error.log … … 64 64 </Directory> 65 65 66 #<Directory /var/www/expresso/setup> 67 # Options None 68 # AllowOverride All 69 # Order deny,allow 70 # allow from ##ip rede interna## 71 66 #<Directory /var/www/expresso/setup> 67 # Options None 68 # AllowOverride All 69 # Order deny,allow 70 # allow from ##ip rede interna## 71 #</Directory> 72 72 73 73 ErrorLog /var/log/apache2/error.log -
branches/2.4/INSTALL/debian/squeeze/etc/ldap/slapd.conf
r6730 r6754 14 14 include /etc/ldap/schema/inetorgperson.schema 15 15 # Necessario para o Expresso Livre 16 include /etc/ldap/schema/expressolivre.schema 16 include /etc/ldap/schema/expressolivre.schema 17 17 include /etc/ldap/schema/qmailuser.schema 18 18 include /etc/ldap/schema/phpgwaccount.schema 19 19 include /etc/ldap/schema/samba.schema 20 20 include /etc/ldap/schema/phpgwcontact.schema 21 include /etc/ldap/schema/phpgwquotacontrolled.schema 21 include /etc/ldap/schema/phpgwquotacontrolled.schema 22 22 23 23 # Where the pid file is put. The init.d script -
branches/2.4/INSTALL/expressoInstall.sh
r6595 r6754 4 4 # 5 5 # 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: 8 8 # "William Fernando Merlotto" <william@prognus.com.br>, para Debian, Ubuntu, Red Hat e CentOS 9 9 # "Gustavo Nakahara" <gustavonk@prognus.com.br>, para Debian, Ubuntu, Red Hat e CentOS 10 10 # "Rafael Cristaldo" <rafael@prognus.com.br>, para Debian, Ubuntu, Red Hat e CentOS 11 11 # "Alexandre Felipe Muller de Souza" <amuller@celepar.pr.gov.br>, para Debian 12 # "C ássio Luiz" <cassiolp@cnpq.br>, para Red Hat e CentOS12 # "Cássio Luiz" <cassiolp@cnpq.br>, para Red Hat e CentOS 13 13 # "M. Rodrigo Monteiro" <mrodrigom@gmail.com>, para Red Hat e CentOS 14 14 # 15 15 # 16 # Vers ões:16 # Versões: 17 17 # 27/03/2012 - v1.0 18 18 # Termino do instalador basico, para Debian Squeeze, CentOS 6 e Ubuntu Server 11.10 … … 24 24 ################################################################################################# 25 25 26 # TODO: Internacionalizar o script de instala ção:26 # TODO: Internacionalizar o script de instalação: 27 27 # http://www.linuxquestions.org/questions/programming-9/bash-script-how-to-get-locale-translations-802726/ 28 28 # http://tldp.org/LDP/abs/html/localization.html … … 44 44 45 45 # 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. 47 47 [ $UID != 0 ] && { echo "Este script deve ser executado como superusuario (root) ou com sudo"; exit 1; } 48 48 … … 62 62 echo "Sistema operacional desconhecido ou incompativel com o instalador do Expresso Livre!" 63 63 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" 65 65 exit 1 66 66 fi 67 67 68 # Telas da instalacao 69 BACKTITLE="Instala ção do ExpressoLivre versão $VERSAO"68 # Telas da instalacao 69 BACKTITLE="Instalação do ExpressoLivre versão $VERSAO" 70 70 71 71 BACKTITLE="$BACKTITLE, para $INSTALL" 72 72 73 # Inicializacao basica de instalacao, como atualiza ção de repositório e criação de variáveis de ambiente73 # Inicializacao basica de instalacao, como atualização de repositório e criação de variáveis de ambiente 74 74 ini_$INSTALL 75 75 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 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á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 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 88 88 89 89 # Inicia a escolha/instalacao e configuracao dos servicos nessarios ao ExpressoLivre 90 90 SERVICOS=$( 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 \ 93 93 ldap 'Servidor ldap (openldap)' on \ 94 94 bd 'Servidor de banco de dados (postgresql)' on \ … … 102 102 done 103 103 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 75104 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 -
branches/2.4/INSTALL/rhel/6/etc/openldap/slapd.conf
r6730 r6754 16 16 include /etc/openldap/schema/nis.schema 17 17 # 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 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 23 23 include /etc/ldap/schema/phpgwquotacontrolled.schema 24 24 -
branches/2.4/admin/inc/class.uiconfig.inc.php
r5988 r6754 11 11 \**************************************************************************/ 12 12 13 require_once('prototype/api/config.php'); 14 use prototype\api\Config as Config; 13 15 14 16 class uiconfig … … 337 339 /* Seta o valor padrão para a configuração de número máximo de marcadores */ 338 340 $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 } 339 360 /* Recupera o número mínimo de marcadores que pode ser definido */ 340 361 $db = ''; … … 420 441 $t->set_var('min_labels',$cont_labels); 421 442 443 $t->set_var('rows_ldap_identifier',$options); 422 444 $t->pfp('out','body'); 423 445 -
branches/2.4/admin/setup/phpgw_pt-br.lang
r5988 r6754 565 565 There 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. 566 566 Minimum number of labels allowed admin pt-br Número mínimo de marcadores permitido 567 Identifier of the recipient of a message admin pt-br Identificador do destinatário de uma mensagem 568 LDAP attribute used to replacement admin pt-br Atributo LDAP utilizado para substituição 569 None admin pt-br Nenhum -
branches/2.4/admin/setup/setup.inc.php
r5298 r6754 13 13 $setup_info['admin']['name'] = 'admin'; 14 14 $setup_info['admin']['title'] = 'Admin'; 15 $setup_info['admin']['version'] = '2.4. 0';15 $setup_info['admin']['version'] = '2.4.1'; 16 16 $setup_info['admin']['app_order'] = 1; 17 17 $setup_info['admin']['tables'] = ''; … … 48 48 $setup_info['admin']['depends'][] = array( 49 49 'appname' => 'phpgwapi', 50 'versions' => Array('2.4 ')50 'versions' => Array('2.4.1') 51 51 ); 52 52 ?> -
branches/2.4/calendar/setup/setup.inc.php
r5298 r6754 12 12 13 13 $setup_info['calendar']['name'] = 'calendar'; 14 $setup_info['calendar']['version'] = '2.4. 0';14 $setup_info['calendar']['version'] = '2.4.1'; 15 15 $setup_info['calendar']['app_order'] = 3; 16 16 $setup_info['calendar']['enable'] = 1; … … 52 52 $setup_info['calendar']['depends'][] = array( 53 53 'appname' => 'phpgwapi', 54 'versions' => Array('2.4 ')54 'versions' => Array('2.4.1') 55 55 ); -
branches/2.4/calendar/setup/tables_update.inc.php
r5314 r6754 134 134 return $GLOBALS['setup_info']['calendar']['currentver']; 135 135 } 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 } 136 143 ?> -
branches/2.4/emailadmin/setup/setup.inc.php
r5298 r6754 14 14 $setup_info['emailadmin']['name'] = 'emailadmin'; 15 15 $setup_info['emailadmin']['title'] = 'EMailAdmin'; 16 $setup_info['emailadmin']['version'] = '2.4. 0';16 $setup_info['emailadmin']['version'] = '2.4.1'; 17 17 $setup_info['emailadmin']['app_order'] = 10; 18 18 $setup_info['emailadmin']['enable'] = 2; … … 40 40 $setup_info['emailadmin']['depends'][] = array( 41 41 'appname' => 'phpgwapi', 42 'versions' => Array('2.4 ')42 'versions' => Array('2.4.1') 43 43 ); 44 44 -
branches/2.4/emailadmin/setup/tables_update.inc.php
r5352 r6754 128 128 return $GLOBALS['setup_info']['emailadmin']['currentver']; 129 129 } 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 } 130 137 ?> -
branches/2.4/expressoAdmin1_2/inc/class.bosectors.inc.php
r6713 r6754 45 45 $sector_info = array(); 46 46 $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; 56 55 57 56 $systemName = $GLOBALS['phpgw_info']['server']['system_name']; … … 111 110 $this->so->remove_attribute($sector_info[0]['dn'], $ldap_mod_del); 112 111 } 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); 121 121 } 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 } 134 134 // Volta para o ListSectors 135 135 ExecMethod('expressoAdmin1_2.uisectors.list_sectors'); -
branches/2.4/expressoAdmin1_2/inc/class.db_functions.inc.php
r6660 r6754 66 66 } 67 67 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 77 77 /* 78 78 * Reativa os usuários desabilitados por tempo inativo modificando o seu ultimo acesso para o dia atual. … … 779 779 780 780 //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'])); 782 782 783 783 //Insere novas regras -
branches/2.4/expressoAdmin1_2/inc/class.functions.inc.php
r6713 r6754 467 467 468 468 /* 469 Funciona de maneira similar ao get_sectors_list, por ém retorna a propria OU do contexto470 e monta o array de retorno de forma diferente, necess ário para algumas mudanças implementadas471 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. 472 472 */ 473 473 function get_organizations2($contexts, $selected='', $referral=false, $show_invisible_ou=true) { … … 495 495 ldap_close($ldap_conn); 496 496 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. 498 498 for ($i=0; $i<$info["count"]; $i++) 499 499 { 500 500 $dn = $info[$i]["dn"]; 501 501 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. 503 503 //if (strtolower($dn) == $context) 504 504 //continue; … … 514 514 } 515 515 } 516 // Ordena ção por chave516 // Ordenação por chave 517 517 ksort($inverted_dn); 518 518 519 // Constru ção do select519 // Construção do select 520 520 $level = 0; 521 521 $options = array(); … … 538 538 539 539 reset ( $array_dn ); 540 $display .= ' ' . urldecode( str_replace('\\', '%', current ( $array_dn ))); 540 $display .= ' ' . urldecode( str_replace('\\', '%', current ( $array_dn ))); 541 541 542 542 $info_retorno['display'] = $display; … … 598 598 } 599 599 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. 601 601 function existe_quota_usuario($setor) { 602 602 $num_users = $this->get_num_users($setor['dn']); … … 608 608 } 609 609 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. 611 611 function existe_quota_disco($setor,$quota_novo_usuario) { 612 612 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. 614 614 615 615 $nova_quota = $this->get_actual_disk_usage($setor['dn']) + $quota_novo_usuario; … … 620 620 } 621 621 622 // Soma as quotas de todos os usu ï¿Årios daquele contexto.622 // Soma as quotas de todos os usuï¿œrios daquele contexto. 623 623 function get_actual_disk_usage($context) { 624 624 $quota_usada=0; … … 629 629 foreach($usuarios as $usuario) { 630 630 $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... 632 632 $quota_usada += ($temp['mailquota'] / 1024); 633 633 } -
branches/2.4/expressoAdmin1_2/inc/class.uimanagers.inc.php
r6585 r6754 88 88 89 89 // 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 '; 91 91 $GLOBALS['phpgw']->db->query($query); 92 92 while($GLOBALS['phpgw']->db->next_record()) … … 236 236 function edit_managers() 237 237 { 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 240 240 // Caso nao seja admin, sai. 241 241 if (!$GLOBALS['phpgw']->acl->check('run',1,'admin')) -
branches/2.4/expressoAdmin1_2/inc/class.uisectors.inc.php
r6713 r6754 233 233 234 234 $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 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])); 238 238 239 239 // Verifica se tem acesso a este modulo … … 255 255 if (!$_POST) 256 256 { 257 $sector_info = $this->so->get_info($_GET['context']); 257 $sector_info = $this->so->get_info($_GET['context']); 258 258 $sector_disk_quota = $sector_info[0]['diskquota'][0]; 259 259 $sector_users_quota = $sector_info[0]['usersquota'][0]; … … 299 299 function view_cota() 300 300 { 301 $context = utf8_decode($_GET['context']); 302 301 $context = utf8_decode($_GET['context']); 302 $a_tmp = explode(",", $context); 303 303 304 304 $sector_name = str_replace('ou=' , '' ,$a_tmp[0]); -
branches/2.4/expressoAdmin1_2/inc/class.user.inc.php
r6660 r6754 37 37 38 38 if($this->db_functions->use_cota_control()) { 39 //Verifica quota de usu ários e disco39 //Verifica quota de usuários e disco 40 40 $setor = $this->functions->get_info($params['context']); 41 41 if (!$this->functions->existe_quota_usuario($setor[0])) { 42 42 $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. 44 44 return $return; 45 45 } 46 46 if (!$this->functions->existe_quota_disco($setor[0],$params['mailquota'])) { 47 47 $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. 49 49 return $return; 50 50 } … … 318 318 */ 319 319 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. 321 321 if($this->db_functions->use_cota_control()) { 322 322 $setor = $this->functions->get_info($new_values['context']); 323 323 if (!$this->functions->existe_quota_disco($setor[0],$new_values['mailquota'])) { 324 324 $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. 326 326 return $return; 327 327 } -
branches/2.4/expressoAdmin1_2/js/jscode/managers.js
r6585 r6754 82 82 else 83 83 { 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 91 91 if (type == 'add') 92 92 cExecuteForm ("$this.manager.create", document.forms[0], handler_createsave_manager); -
branches/2.4/expressoAdmin1_2/setup/phpgw_pt-br.lang
r6662 r6754 460 460 last login expressoAdmin1_2 pt-br Último acesso 461 461 user 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 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 467 467 disk quota expressoAdmin1_2 pt-br Cota em Disco 468 468 shared accounts expressoAdmin1_2 pt-br Contas compartilhadas -
branches/2.4/expressoAdmin1_2/setup/setup.inc.php
r5298 r6754 13 13 $setup_info['expressoAdmin1_2']['title'] = 'Expresso Admin'; 14 14 /* 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'; 16 16 $setup_info['expressoAdmin1_2']['app_order'] = 1; 17 17 $setup_info['expressoAdmin1_2']['tables'][] = 'phpgw_expressoadmin'; … … 37 37 $setup_info['expressoAdmin1_2']['depends'][] = array( 38 38 'appname' => 'phpgwapi', 39 'versions' => Array('2.4 ')39 'versions' => Array('2.4.1') 40 40 ); 41 41 ?> -
branches/2.4/expressoAdmin1_2/setup/tables_update.inc.php
r5314 r6754 323 323 $GLOBALS['setup_info']['expressoAdmin1_2']['currentver'] = '2.4.0'; 324 324 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 } 326 333 ?> -
branches/2.4/expressoCalendar/docs/caldav-DELETE.php.diff
r6440 r6754 15 15 + $dav_name = explode('/', $dav_resource->GetProperty('dav_name')); 16 16 + 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) ]); 18 18 + } 19 19 +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -
branches/2.4/expressoCalendar/docs/caldav-PUT-vcalendar.php.diff
r6440 r6754 14 14 + $params = array(); 15 15 + $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) ]; 17 17 + $params['owner'] = $session->username; 18 18 + $params['action'] = $put_action_type; -
branches/2.4/expressoMail1_2/inc/class.db_functions.inc.php
r6331 r6754 24 24 include_once(PHPGW_API_INC.'/class.db.inc.php'); 25 25 } 26 include_once('class.dynamic_contacts.inc.php');27 26 28 27 class db_functions … … 248 247 } 249 248 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 requests270 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 }278 249 function getUserByEmail($params){ 279 250 // Follow the referral … … 309 280 } 310 281 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 email331 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 }367 282 function update_preferences($params){ 368 283 $string_serial = urldecode($params['prefe_string']); … … 375 290 else 376 291 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);397 292 } 398 293 -
branches/2.4/expressoMail1_2/inc/class.functions.inc.php
r6733 r6754 15 15 function CalculateDateOffset() 16 16 { 17 18 17 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 18 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 22 22 $timezone_index = $_SESSION['phpgw_info']['user']['preferences']['expressoMail']['timezone']; 23 23 $user_timezone = $zones[$timezone_index]; -
branches/2.4/expressoMail1_2/inc/class.imap_functions.inc.php
r6735 r6754 1095 1095 function get_info_msg($params) 1096 1096 { 1097 1098 1097 if(isset($params['alarm'])){ 1099 1098 $alarm = $params['alarm']; … … 1140 1139 //$return['signature'] = $return_get_body['signature']; 1141 1140 } 1142 1141 1143 1142 $pattern = '/^[ \t]*Disposition-Notification-To:.*/mi'; 1144 1143 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]))); 1146 1145 1147 1146 $return['Recent'] = $header->Recent; … … 1400 1399 $return['login'] = $_SESSION['phpgw_info']['expressomail']['user']['account_id'];//$GLOBALS['phpgw_info']['user']['account_id']; 1401 1400 $return['reply_toaddress'] = $header->reply_toaddress; 1402 1401 1403 1402 if(($return['from']['email'] == '@unspecified-domain' || $return['sender']['email'] == null) && $return['msg_folder'] == 'INBOX/Drafts'){ 1404 1403 $return['from']['email'] = "Rascunho"; 1405 1404 } 1406 1405 1407 1406 if(strpos($return['toaddress2'], 'undisclosed-recipients') !== false){ 1408 1407 $return['toaddress2'] = $this->functions->getLang('without destination'); … … 1677 1676 break; 1678 1677 1679 1678 case 'CANCEL': 1680 1679 1681 1680 $ical = $icalService->getComponent('vevent'); … … 2811 2810 $header = $this->get_header($msg_numb); 2812 2811 $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]))); 2816 2815 2817 2816 $message_id = $header->message_id; … … 2918 2917 if($att['disposition'] == 'embedded' && $isHTML) //Caso mensagem em texto simples converter os embedded para attachments 2919 2918 { 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')); 2922 2921 } 2923 2922 else 2924 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' ); 2925 2924 2926 2925 $message_size_total += $att['size']; … … 2937 2936 { 2938 2937 $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') ); 2940 2939 } 2941 2940 else … … 2948 2947 $mbox_stream = $this->open_mbox(mb_convert_encoding($value['folder'] , 'ISO-8859-1' , 'UTF7-IMAP')); 2949 2948 $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' ); 2952 2951 $message_size_total += mb_strlen($rawmsg); //Adiciona o tamanho do anexo a variavel que controlao tamanho da msg. 2953 2952 unset($rawmsg); … … 3029 3028 */ 3030 3029 //////////////////////////////////////////////////////////////////////////////////////////////////// 3031 3032 3030 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>'; 3043 3042 $mailService->setBodyHtml($body); 3044 } 3043 } 3045 3044 else 3046 3045 $mailService->setBodyText($body); … … 3074 3073 error_log("$now - $userip - $sent [$subject] - $userid => $addrs\r\n", 3, "/home/expressolivre/mail_senders.log"); 3075 3074 } 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'])); 3084 3077 3085 3086 3078 //return array("success" => true, "folder" => $folder_list); 3087 3079 return array("success" => true, "load" => $has_new_folder); … … 3839 3831 } 3840 3832 3841 function send_notification($params) 3842 { 3843 $mailService = ServiceLocator::getService('mail'); 3833 function send_notification($params) 3834 { 3835 $mailService = ServiceLocator::getService('mail'); 3844 3836 $body = lang("Your message: %1",$params['subject']) . '<br>'; 3845 3837 $body .= lang("Received in: %1",date("d/m/Y H:i",$params['date'])) . '<br>'; 3846 3838 $body .= lang("Has been read by: %1 < %2 > 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); 3851 3843 3852 3844 } … … 4907 4899 $return['msgs'][$i]['flag'] .= $msg->Deleted ? $msg->Deleted : ''; 4908 4900 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. 4910 4902 $importante = array(); 4911 4903 … … 5188 5180 * @param <Array> <$proc> <ações do filtro> 5189 5181 * @return <Regras do usuário em Array> 5190 * @access <public>5182 * @access public 5191 5183 */ 5192 5184 function apliSieveFilter($msgs , $proc) … … 5229 5221 return $ret; 5230 5222 } 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 5231 5398 } 5232 5399 ?> -
branches/2.4/expressoMail1_2/inc/class.ldap_functions.inc.php
r6139 r6754 436 436 $ldapService->connection = $this->ds; 437 437 $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"); 439 439 foreach($searchable_fields as $fields_ldap => $value_field) 440 440 { … … 473 473 $this->ldapConnect(true,$i); 474 474 $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"); 476 476 $sr=@ldap_search($this->ds, $this->ldap_context, $filter, $justthese, 0, $this->max_result+1); 477 477 if(!$sr) … … 496 496 497 497 $info_return['search_for'] = $params['search_for']; 498 return $ info_return;498 return $this->toISO8859($info_return); 499 499 } 500 500 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 501 512 function make_quicksearch_card($info, $cn) 502 513 { … … 553 564 '<tr class="quicksearchcontacts_unselected">' . 554 565 '<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"].'\')">' . 556 567 $photo_link . 557 568 '</a>' . … … 559 570 '<td class="cc">' . 560 571 '<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"].'\')">' . 562 573 '<font color=blue>' . 563 574 '<span name="mail">' . $contacts_result['mail'] . '</span></a></font>'. -
branches/2.4/expressoMail1_2/index.php
r6669 r6754 38 38 <script src="../prototype/plugins/farbtastic/farbtastic.js" language="javascript"></script> 39 39 <script src="../prototype/api/datalayer.js" language="javascript"></script> 40 <script src="../prototype/api/rest.js" language="javascript"></script> 40 41 <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> 42 47 <script src="../library/ckeditor/ckeditor.js" language="javascript" charset="utf-8"></script> 43 48 <script src="../library/ckeditor/adapters/jquery.js" language="javascript"></script> … … 56 61 <script type="text/javascript" src="../prototype/plugins/datejs/sugarpak.js"></script> 57 62 <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> 58 64 59 65 <script type="text/javascript" src="../prototype/plugins/watermark/jquery.watermarkinput.js"></script> … … 71 77 <script type="text/javascript" src="../prototype/modules/calendar/js/calendar.date.js"></script> 72 78 <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 74 83 75 84 <script src="js/rich_text_editor.js" type="text/javascript"></script> … … 194 203 $_SESSION['phpgw_info']['user']['preferences']['expressoMail']['telephone_number'] = $GLOBALS['phpgw_info']['user']['telephonenumber']; 195 204 $_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']; 196 206 $_SESSION['phpgw_info']['user']['preferences']['expressoMail']['use_x_origin'] = $current_config['expressoMail_use_x_origin']; 197 207 $_SESSION['phpgw_info']['user']['preferences']['expressoMail']['number_of_contacts'] = $current_config['expressoMail_Number_of_dynamic_contacts'] ? $current_config['expressoMail_Number_of_dynamic_contacts'] : "0"; … … 215 225 $_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"; 216 226 $_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 218 227 $_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; 219 228 // ACL for block edit Personal Data. … … 274 283 $_SESSION['phpgw_info']['server']['expressomail']['expressoMail_use_spam_filter'] = $current_config['expressoMail_use_spam_filter']; 275 284 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>'; 277 287 // End Set Anti-Spam options. 278 288 … … 352 362 "js/main.js," . 353 363 "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 361 371 if($_SESSION['phpgw_info']['user']['preferences']['expressoMail']['use_local_messages']) 362 372 $scripts .= "js/local_messages.js,"; … … 364 374 "js/DropDownContacts.js," . 365 375 "js/doiMenuData.js," . 366 "js/connector.js"; 376 "js/connector.js"; 367 377 echo $obj -> getFilesJs($scripts, $update_version); 368 378 echo ' -
branches/2.4/expressoMail1_2/js/QuickCatalogSearch.js
r6631 r6754 14 14 }); 15 15 }); 16 16 17 17 /* showlist */ 18 18 emQuickCatalogSearch.prototype.showList = function(data, begin, end, ID, field) … … 125 125 switch(data_['type_catalog']) { 126 126 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("#"); 130 130 else 131 131 var extra_fields = []; … … 149 149 } 150 150 } 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 } 151 163 break; 152 164 case 'P': … … 157 169 if(data_[id_contact].telephonenumber != null) 158 170 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 } 159 183 break; 160 184 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("#"); 164 188 else 165 189 var extra_fields = []; … … 190 214 } 191 215 } 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 } 192 228 break; 193 229 } … … 255 291 var signal = "+"; 256 292 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(","); 259 300 for(aux=0; aux<emails_adicionados.length -1; aux++) { 260 301 if(emails_adicionados[aux].match(/<([^<]*)>[\s]*$/)){ … … 279 320 else if(contact_name.toLowerCase().indexOf(data.search_for.toLowerCase()) != -1 && data.search_for.indexOf(" ") == -1 && data.search_for.indexOf("@") == -1) 280 321 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>'; 282 326 Op.innerHTML = line; 283 327 $(Op).val(i - 1); … … 317 361 } 318 362 } 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 } 320 376 break; 321 377 case 'P': … … 326 382 if(data[first_contact].telephonenumber != null) 327 383 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 } 328 396 break; 329 397 default: … … 358 426 } 359 427 } 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 } 360 440 break; 361 441 } 362 var string_results = sliderValue + " " + get_lang("of") + " " + paginas + " (" + data.length + " " + get_lang("Results") + ")"; 363 442 var string_results = sliderValue + " " + get_lang("of") + " " + paginas + " (" + data.length + " " + get_lang("Results") + ")"; 443 $( "#amount-text" ).val( string_results ).attr('readonly', true); 364 444 $("button").button(); 365 445 //$("button.remove").button({icons:{primary:"ui-icon-close"}, text: false}); … … 389 469 }else 390 470 var extra_fields = []; 391 if(preferences.default_fields_quick_search != 0 && data[this.value] ) { 392 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 ) 394 474 details.append('<p><label class="attribute">Telefone</label>' + '<span class="value">' + (data[this.value].telephonenumber ? data[this.value].telephonenumber[0] : "")+ "</span></p>"); 395 475 } … … 405 485 } 406 486 } 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 } 407 499 break; 408 500 case 'P': … … 413 505 if(data[this.value].telephonenumber != null) 414 506 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 } 415 519 break; 416 520 default: 417 if(this.value == undefined) 418 break; 419 521 if(this.value == undefined) 522 break; 523 420 524 if(data['extra_ldap_fields'].length != 0) 421 525 var extra_fields = (data['extra_ldap_fields']).split("#"); … … 447 551 } 448 552 } 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 } 449 565 break; 450 566 } … … 587 703 var nome = $(contact).clone().find('.name').text(); 588 704 var email = $(contact).clone().find('.email').text(); 589 590 705 if(email == get_lang("No mail")){ 591 706 alert(get_lang("It is not possible to add this contact as a recipient because it does not have email")); … … 594 709 return; 595 710 } 596 597 711 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")); 613 728 } 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 622 729 content.find(field_).filter("input").val(""); 623 730 button.onclick = function(){ … … 625 732 }; 626 733 var div = document.getElementById(divs); 627 628 734 div.ondblclick = function(){ 629 735 remove_contact_field(div.innerHTML, button, divs); 630 736 }; 631 632 737 button.innerHTML = '<span class="ui-button-text" style="">x</span>'; 633 738 } … … 639 744 function remove_contact_field(contact, button, divs) { 640 745 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 669 756 button.onclick = function(){ 670 757 add_contact_field(document.getElementById(divs).innerHTML, button, divs); 671 758 }; 672 673 759 var div = document.getElementById(divs); 674 675 760 div.ondblclick = function(){ 676 761 add_contact_field(div.innerHTML, button, divs); 677 762 }; 678 679 content.find(field_).trigger("update");680 763 button.innerHTML = '<span class="ui-button-text" style="">+</span>'; 681 764 } -
branches/2.4/expressoMail1_2/js/QuickSearchUser.js
r5477 r6754 53 53 } 54 54 55 emQuickSearchUser.prototype.create_new_message = function (cn, mail )55 emQuickSearchUser.prototype.create_new_message = function (cn, mail, uid) 56 56 { 57 57 QuickSearchUser.closeWindow(); 58 var ldap_id = preferences.expressoMail_ldap_identifier_recipient; 58 59 59 if (openTab.type[currentTab] != 4) 60 { 61 Element("msg_number").value = "\""+cn+"\" <"+mail+">"; 60 if (openTab.type[currentTab] != 4){ 62 61 new_message("new","null"); 63 62 } 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")); 68 68 } 69 69 } -
branches/2.4/expressoMail1_2/js/TreeShow.js
r6607 r6754 88 88 var aux = ttree.getFolder().split(cyrus_delimiter); 89 89 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 96 96 if( ttree.getFolder() != "" ) 97 97 { -
branches/2.4/expressoMail1_2/js/abas.js
r6691 r6754 270 270 parent_bb.insertBefore(td, bb); 271 271 272 if((typeof(id_value) == 'string') && id_value.match(/_r/)){ 272 if((typeof(id_value) == 'string') && id_value.match(/_r/)){ 273 273 $(td).draggable({ 274 274 start : function(){ … … 306 306 var border_id = ui.draggable.find("input[type=hidden]").attr("name"); 307 307 if(folder_to_move == "border_tr"){ 308 var id_msg = border_id.split("_")[0]; 308 var id_msg = border_id.split("_")[0]; 309 309 folder = $("#input_folder_"+border_id+"_r")[0] ? $("#input_folder_"+border_id+"_r").val() : (openTab.imapBox[border_id] ? openTab.imapBox[border_id]:get_current_folder()); 310 310 move_msgs2(folder, id_msg, border_id, folder_to, to_folder_title,true); … … 400 400 } 401 401 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 } 406 406 return(title); 407 407 } … … 435 435 'width' : width, 436 436 'onClose': function(clicked) { 437 if(clicked == 'Cancelar'){ 438 if (RichTextEditor.plain[id] != true)439 setTimeout("RichTextEditor.focus("+ID+")",100);440 else441 $('#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 } 443 443 if(clicked == 'Descartar alterações' || clicked == 'Descartar alterações e anexos' ) { 444 444 if (openTab.imapBox[ID] && !openTab.toPreserve[ID]) … … 502 502 function delete_border(ID, msg_sent) 503 503 { 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); 520 520 } 521 521 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 */ 2 var ccQuickAddOne = { 3 send : function(data){ 4 var email = data[4]; 5 5 var handler = function (responseText) 6 6 { … … 9 9 write_msg("Problema ao contactar servidor"); 10 10 return; 11 }else if (data['status'] == 'alreadyExists'){ 11 }else if (data['status'] == 'alreadyExists'){ 12 12 alert(data['msg']); 13 13 return; … … 16 16 } 17 17 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 } 19 31 }; 20 32 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)); 26 38 var CC_url = '../index.php?menuaction=contactcenter.ui_data.data_manager&method='; 27 39 connector.newRequest('cQuickAdd.Send', CC_url+'quick_add', 'POST', handler, sdata); 40 updateDynamicPersonalContacts(); 41 cache = new Array(); 28 42 return true; 29 43 }, 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 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 } 81 95 }; -
branches/2.4/expressoMail1_2/js/common_functions.js
r6727 r6754 775 775 } 776 776 777 function search_emails(value ){777 function search_emails(value, data){ 778 778 var resize = false; 779 779 resize = resize_borders(); … … 815 815 connector.loadScript("search"); 816 816 if (typeof(EsearchE) == 'undefined' || typeof(ttree) == 'undefined'){ 817 setTimeout("search_emails('"+value+"' )",500);817 setTimeout("search_emails('"+value+"', '"+data+"')",500); 818 818 return false; 819 819 } 820 EsearchE.showForms(value );820 EsearchE.showForms(value, data); 821 821 $("#em_message_search").val(""); 822 822 } … … 1127 1127 Element("check_box_message_"+main_list[i].id).checked = true; 1128 1128 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 } 1137 1137 } 1138 1138 } … … 1144 1144 remove_className(Element(main_list[i].id), 'selected_msg selected_shortcut_msg'); 1145 1145 $("#"+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 1149 1150 } 1150 1151 -
branches/2.4/expressoMail1_2/js/doiMenuData.js
r5866 r6754 195 195 items: menuToolsItems 196 196 }); 197 197 var 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 }); 198 209 199 210 function updateLabelsColumn(messageInfo) { … … 294 305 } 295 306 296 297 298 299 300 301 307 function 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 330 function 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 8 8 * formatação, etc.) 9 9 */ 10 11 focusIn = ""; 12 canMakeBox = true; 13 fastSearch = false; 14 10 15 onceOpenedHeadersMessages = {}; 11 16 var cache = new Array(); 12 17 var openTab = { 13 18 'type' : [], // 8 types of tabs, further info. see expressolivre.org/dev/wiki/mail/Documentacao … … 891 896 var _mouse_out; 892 897 var _cell; 893 var colGroupMain = document.getElementById("colgroup_main_"+numBox); 894 898 var colGroupMain = document.getElementById("colgroup_main_"+numBox); 899 var colGroupHead = document.getElementById("colgroup_head_"+numBox); 895 900 for (var r=0;r<trM.length;r++) { 896 901 for (var c=0;c<trM[r].cells.length;c++) { … … 899 904 if (is_mozilla && !is_webkit) { 900 905 if (!emptyBody) { 901 colGroupMain.childNodes[c].setAttribute("width",colSizes[tbl][c]); 906 colGroupMain.childNodes[c].setAttribute("width",colSizes[tbl][c]); 902 907 } 903 colGroupHead.childNodes[c].setAttribute("width",colSizes[tbl][c]); 908 colGroupHead.childNodes[c].setAttribute("width",colSizes[tbl][c]); 904 909 if (tbH.rows[0].cells[c].className=="th_resizable") { 905 910 // lots of stupid fixes for FF to redraw cell content … … 929 934 document.getElementById("colgroup_main_"+numBox).childNodes[c].setAttribute("width",colSizes[tbl][c]); 930 935 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++){ 936 941 if(arrBody[i] !== undefined && arrBody[i].width !== undefined) 937 arrHeader[i].width = arrBody[i].width; 938 } 942 arrHeader[i].width = arrBody[i].width; 943 } 939 944 } 940 945 } … … 1506 1511 if ((headers_msgs.Forwarded == 'F') || (headers_msgs.Draft == 'X' && headers_msgs.Answered == 'A')){ 1507 1512 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')+"'>"; 1509 1514 headers_msgs.Draft = '' 1510 1515 headers_msgs.Answered = ''; … … 1512 1517 } 1513 1518 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')+"'>"; 1515 1520 else if (headers_msgs.Answered == 'A'){ 1516 1521 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')+"'>"; 1518 1523 }else 1519 1524 td_element21.innerHTML = " "; … … 1764 1769 .html('<img src="../prototype/modules/mail/img/flagEditor.png">'); 1765 1770 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 } 1775 1781 }); 1776 1782 … … 1982 1988 var msg_selected; 1983 1989 function 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 } 1984 1999 var content = document.getElementById('content_id_' + ID); 1985 2000 … … 3033 3048 var newAttendeeName = ""; 3034 3049 3035 var name = decoded.match(/"([^"]*)"/) ? decoded.match(/"([^"]*)"/)[1] : ''; 3036 var mail = decoded.match(/<([^<]*)>[\s]*$/) ? decoded.match(/<([^<]*)>[\s]*$/)[1].toLowerCase() : decoded;3037 3038 3039 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); 3040 3055 3041 3056 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.isExternal3057 }, !!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 }else3081 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); 3082 3097 }) 3083 3098 … … 3508 3523 resizeWindow(); 3509 3524 3510 $("#div_message_scroll_"+ID).scrollTo( 0, 400, {queue:true} ); 3525 $("#div_message_scroll_"+ID).scrollTo( 0, 400, {queue:true} ); 3511 3526 } 3512 3527 … … 3559 3574 } 3560 3575 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 3577 function 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 3593 function 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 3644 function 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; 3576 3679 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 } 3823 var input_search = ""; 3824 var click = false; 3825 //EVENTOS DA CAIXA 3826 function 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" ); 3586 3906 }, 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 3914 function 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 3998 function 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 } 3602 4165 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); 3611 4175 }); 3612 4176 } … … 3615 4179 connector.loadScript("color_palette"); 3616 4180 connector.loadScript('wfolders'); 4181 connector.loadScript("ccQuickAdd"); 3617 4182 3618 4183 if(typeof(RichTextEditor) == 'undefined' || typeof(ColorPalette) == 'undefined' || typeof(wfolders) == 'undefined') … … 3662 4227 button.toggleClass("expressomail-button-icon-ative"); 3663 4228 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); 3668 4234 } 3669 4235 } 3670 4236 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); 3672 4238 3673 4239 //Botão TextoRico/TextoSimples 3674 4240 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 } 3695 4261 }) 3696 4262 … … 3934 4500 3935 4501 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 } 3936 4510 // The element was loaded and populated...so return. 3937 4511 if(el_shared_users){ … … 3944 4518 _option.text = el_shared_users.options[x].text; 3945 4519 _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 } 3946 4528 sel_from.options[sel_from.options.length] = _option ; 3947 4529 } … … 3969 4551 if(data.length > 0) { 3970 4552 tr1_1.style.display = ''; 3971 4553 var mycn = typeof(data.myname != 'undefined') ? data.myname : ''; 3972 4554 var _option = document.createElement("OPTION"); 3973 4555 _option.text = '"'+mycn+'" <'+Element("user_email").value+'>'; 3974 4556 _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'; 3975 4560 sel_from.options[sel_from.options.length] = _option; 3976 4561 3977 4562 var options = ''; 3978 var cn = ''; 3979 4563 var cn = ''; 3980 4564 for (var x = 0; x < data.length; x++) { 3981 4565 cn = typeof(data[x].cn[0] != 'undefined') ? data[x].cn[0] : ''; … … 3983 4567 _option.text = '"'+cn+'" <'+data[x].mail[0]+'>'; 3984 4568 _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 } 3985 4577 sel_from.options[sel_from.options.length] = _option ; 3986 4578 } … … 4335 4927 cc_data[3] = array_addrs[0]; 4336 4928 4929 var onclick = ''; 4930 $.each(cc_data, function(index, value){ 4931 onclick += "'"+value+"',"; 4932 }); 4933 onclick = onclick.substr(0, onclick.length-1); 4337 4934 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">'; 4339 4936 var to_addybook_add = "<SPAN id='insert_plugin_"+idx_cc+"_"+ID+"'>"; 4340 4937 to_addybook_add += addrs; -
branches/2.4/expressoMail1_2/js/main.js
r6736 r6754 6 6 var results_search_messages = ""; 7 7 var cabecalho = '<h4>ExpressoLivre - ExpressoMail</h4>'; 8 // Variavel para controle de atualização das mensagens listadas na modal de alerta de filtro por remetente 9 var checkAlarmsFilter = false; 10 11 var dynamicPersonalContacts = new Array(); 12 var dynamicContacts = new Array(); 13 var topContact = 0; 14 DataLayer.get("folder", true); 8 15 9 16 //Os IE's < 9 não possui suporte a trim() introduzida no JavaScript 1.8.1 10 17 if(!String.prototype.trim){ 11 18 String.prototype.trim = function(){ 12 13 19 return this.replace(/^\s+|\s+$/g,''); 20 } 14 21 } 15 22 … … 19 26 return folders.join(cyrus_delimiter); 20 27 } 28 29 function 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 51 function 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 21 68 function init(){ 22 69 if (!is_ie) 23 70 Element('tableDivAppbox').width = '100%'; 24 71 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 }32 72 var save_preferences = function(data){ 33 73 … … 69 109 //Substituido por padrão Jquery 70 110 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. 72 112 if(preferences.hide_folders == "1") 73 113 Element('divAppboxHeader').innerHTML = title_app_menu; … … 116 156 117 157 $(".collapse_folders").removeClass("ui-icon-triangle-1-w"); 118 $(".collapse_folders").addClass("ui-icon-triangle-1-e"); 119 158 $(".collapse_folders").addClass("ui-icon-triangle-1-e"); 159 $(".collapse_folders").parent().attr('title', "Expandir"); 120 160 $.cookie('collapse_folders', "true"); 121 161 refresh(); … … 127 167 $("#folderscol").show(); 128 168 $(".collapse_folders").removeClass("ui-icon-triangle-1-e"); 129 $(".collapse_folders").addClass("ui-icon-triangle-1-w"); 130 169 $(".collapse_folders").addClass("ui-icon-triangle-1-w"); 170 $(".collapse_folders").parent().attr('title', "Ocultar"); 131 171 $.cookie('collapse_folders', "false"); 132 172 refresh(); … … 143 183 } 144 184 ); 185 186 if(parseInt(preferences.use_dynamic_contacts)){ 187 var load_dynamics = function(){ 188 updateDynamicContact(); 189 updateDynamicPersonalContacts(); 190 }; 191 load_dynamics(); 192 } 145 193 } 146 194 var handler_automatic_trash_cleanness = function(data){ … … 160 208 mobile_device = ( ( data.constructor == Boolean ) ? data : ( data === 'true' ) ); 161 209 }); 210 211 DataLayer.get("folder", true); 212 cExecute("$this.imap_functions.get_folders_list&onload=true", update_menu); 213 162 214 setTimeout('auto_refresh()', time_refresh); 163 215 … … 192 244 cyrus_delimiter = Element('cyrus_delimiter').value; 193 245 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;}); 195 247 //cExecute ("$this.functions.get_preferences", save_preferences); 196 248 } … … 279 331 msg_to_delete.childNodes[1].innerHTML = ""; 280 332 write_msg(get_lang("Attachments removed")); 281 folderName = Base64.encode(folder); 282 folderName = folderName.replace(/=/gi, ''); 283 333 folderName = Base64.encode(folder); 334 folderName = folderName.replace(/=/gi, ''); 335 delete_border(msg_num+'_r_'+folderName,'false'); //close email tab 284 336 } 285 337 }; … … 386 438 // se existir prepara os dados para serem enviados e chama a 387 439 // operação na applet 388 389 440 390 441 // if ((msg_info.DispositionNotificationTo) && ((msg_info.Unseen == 'U') || (msg_info.Recent == 'N'))){ … … 510 561 511 562 function refresh(alert_new_msg){ 563 getFromAlertRules(); 512 564 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; 513 573 if(data['msg_range_end']) 514 574 if(data['msg_range_end'] > 0) … … 523 583 524 584 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 } 530 590 Element("table_message_header_box_"+numBox).emptyBody = false; 531 591 table_element = Element("table_box"); … … 708 768 }, 709 769 beforeSend: function( jqXHR, settings ){ 710 770 connector.showProgressBar(); 711 771 }, 712 713 connector.hideProgressBar();772 complete: function( jqXHR, settings ){ 773 connector.hideProgressBar(); 714 774 } 715 775 … … 1051 1111 if( data ) 1052 1112 show_msg( data ); 1053 }, 1054 beforeSend: function( jqXHR, settings ){ 1055 connector.showProgressBar(); 1056 }, 1057 complete: function( jqXHR, settings ){ 1058 1113 }, 1114 beforeSend: function( jqXHR, settings ){ 1115 connector.showProgressBar(); 1116 }, 1117 complete: function( jqXHR, settings ){ 1118 connector.hideProgressBar(); 1059 1119 } 1060 1120 }); … … 1143 1203 Element('tot_m').innerHTML = n_total_msg; 1144 1204 } 1145 1146 1205 refresh(); 1147 1206 } … … 1168 1227 1169 1228 // 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) 1171 1230 { 1172 1231 //se a aba for aberta atraves de uma pesquisa … … 1178 1237 refresh(); 1179 1238 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({ 1181 1242 url: 'controller.php?' + $.param( {action: '$this.imap_functions.move_messages', 1182 1243 folder: folder, … … 1197 1258 if( data ) 1198 1259 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 1208 1282 }else 1209 1283 write_msg(get_lang('No selected message.')); … … 1592 1666 { 1593 1667 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 else1600 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 } 1603 1677 if (selected_messages == '') 1604 1678 return false; … … 1754 1828 case "reply_without_history": 1755 1829 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 1757 1834 title = "Re: " + html_entities(data.subject); 1758 1835 content.find(".subject").val("Re: " + data.subject); … … 1771 1848 content.find(".subject").val("Re: " + data.subject); 1772 1849 content.find('[name="input_to"]').val(data.to); 1850 1851 draw_reply_boxes_by_field("to", data.to, content); 1852 1773 1853 content.find('[name="msg_reply_from"]').val($("#msg_number_" + border_ID).val()); 1774 1854 … … 1797 1877 content.find(".subject").val("Re: " + data.subject); 1798 1878 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); 1800 1881 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); 1802 1884 content.find('[name="input_to"]').val(data.to + ',' + data.to_all); 1803 1885 } 1886 1804 1887 if (data.cc){ 1805 1888 data.cc = new Array(); … … 1812 1895 if(data.cc != ""){ 1813 1896 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); 1815 1898 content.find(".cc-tr").show();//cc-button 1816 1899 //document.getElementById("a_cc_link" + new_border_ID).value = data.cc; 1817 1900 content.find(".cc-button").toggleClass("expressomail-button-icon-ative"); 1818 1901 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); 1821 1903 } 1822 1904 } … … 1840 1922 else 1841 1923 data.to_all = ""; 1924 1842 1925 title = "Re: " + html_entities(data.subject); 1843 1926 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); 1845 1929 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); 1847 1932 content.find('[name="input_to"]').val(data.to + ',' + data.to_all); 1933 } 1934 1848 1935 if (data.cc){ 1849 1936 data.cc = new Array(); … … 1856 1943 if(data.cc != ""){ 1857 1944 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); 1859 1946 content.find(".cc-tr").show(); 1860 1947 content.find(".cc-button").toggleClass("expressomail-button-icon-ative"); 1861 1948 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); 1864 1951 } 1865 1952 } … … 1916 2003 } 1917 2004 content.find('[name="input_to"]').val(_to +','); 2005 draw_email_box(_to, content.find(".to").filter("input")); 1918 2006 Element('msg_number').value = ''; 1919 2007 } … … 1941 2029 } 1942 2030 2031 draw_reply_boxes_by_field("to", data.to, content); 2032 1943 2033 content.find('[name="input_to"]').val(data.to); 1944 2034 if (data.cc){ … … 1946 2036 data.cc = data.cc.replace(/>/gi,">"); 1947 2037 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); 1949 2039 content.find(".cc-tr").show(); 1950 2040 content.find(".cc-button").toggleClass("expressomail-button-icon-ative"); 1951 2041 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); 1954 2043 } 1955 2044 if (data.cco){ … … 1959 2048 content.find(".cco-button").toggleClass("expressomail-button-icon-ative"); 1960 2049 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); 1963 2052 } 1964 2053 } … … 2000 2089 resizeWindow(); 2001 2090 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 2094 function 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 }); 2002 2099 } 2003 2100 … … 2235 2332 watch_changes_in_msg(ID); 2236 2333 2334 var content = $("#content_id_"+ID); 2237 2335 var sign = false; 2238 2336 var crypt = false; 2337 var reComplexEmail = /<([^<]*)>[\s]*$/; 2239 2338 if ((preferences.use_assinar_criptografar != '0') && (preferences.use_signature_digital_cripto != '0')){ 2240 2339 var checkSign = document.getElementById('return_digital_'+ID) … … 2275 2374 if(data && data.success == true ){ 2276 2375 // 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"]'); 2279 2378 2280 2379 if (msg_number_replied.val()){ … … 2297 2396 } 2298 2397 } 2398 2399 $ 2400 //REFAZER ISTO COM UMA CHAMADA ASSINCRONA PARA REGISTRAR E ATUALIZAR A LISTA DOS NOVOS CONTATOS DINAMICOS 2299 2401 // If new dynamic contacts were added, update the autocomplete .... 2300 if(data.new_contacts){2402 /*if(data.new_contacts){ 2301 2403 var ar_contacts = data.new_contacts.split(',;'); 2302 2404 for(var j in ar_contacts){ … … 2306 2408 } 2307 2409 } 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(); 2309 2424 } 2310 2425 else{ 2311 2426 if(data == 'Post-Content-Length') 2312 2427 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 } 2314 2453 write_msg(data); 2315 else2454 }else 2316 2455 write_msg(get_lang("Connection failed with %1 Server. Try later.", "Web")); 2317 2456 … … 2323 2462 if(!expresso_offline) 2324 2463 connector.hideProgressBar(); 2464 } 2465 2466 /*Função que grava o destinatário nos contatos dinâmicos*/ 2467 function 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 } 2325 2495 } 2326 2496 … … 2518 2688 return; 2519 2689 } 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 } 2525 2706 2526 2707 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 } 2528 2715 2529 2716 if (expresso_offline) { … … 2601 2788 if( data ) 2602 2789 show_msg( data ); 2603 }, 2604 beforeSend: function( jqXHR, settings ){2605 connector.showProgressBar();2606 },2607 complete: function( jqXHR, settings ){2608 2790 }, 2791 beforeSend: function( jqXHR, settings ){ 2792 connector.showProgressBar(); 2793 }, 2794 complete: function( jqXHR, settings ){ 2795 connector.hideProgressBar(); 2609 2796 } 2610 2797 … … 2631 2818 autoSaveControl.status[border_id] = true; 2632 2819 /////////////////////////////////////////// 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 2634 2849 var idJavascript = saveBorderError[border_id]; 2635 2850 … … 2809 3024 set_msg_as_read(results_search_messages, false, true); 2810 3025 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 2811 3035 break; 2812 3036 case "flagged": … … 2833 3057 else 2834 3058 folder = Element("input_folder_"+msgs_to_set+"_r").value; 2835 3059 2836 3060 if (msgs_to_set) 2837 3061 $.ajax({ … … 2846 3070 if( data ) 2847 3071 handler_set_messages_flag( data ); 2848 }, 2849 beforeSend: function( jqXHR, settings ){ 2850 connector.showProgressBar(); 2851 }, 2852 complete: function( jqXHR, settings ){ 2853 3072 }, 3073 beforeSend: function( jqXHR, settings ){ 3074 connector.showProgressBar(); 3075 }, 3076 complete: function( jqXHR, settings ){ 3077 connector.hideProgressBar(); 2854 3078 } 2855 3079 … … 2912 3136 if( data ) 2913 3137 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 } 2921 3145 2922 3146 }); … … 3008 3232 seekDot = (is_ie ? /width=24/gi : /width="24"/gi); 3009 3233 //thead = thead.replace(seekDot, "style='display:none'"); 3010 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>"; 3011 3235 tbody = tbody.replace(seekDot, "style='display:none'"); 3012 3236 seekDot = (is_ie ? /width=16/gi : /width="16"/gi); … … 3812 4036 createDialog(data, true); 3813 4037 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 } 3821 4045 }); 3822 4046 3823 4047 } 3824 4048 else … … 3919 4143 } 3920 4144 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 4145 }, 4146 beforeSend: function( jqXHR, settings ){ 4147 connector.showProgressBar(); 4148 }, 4149 complete: function( jqXHR, settings ){ 4150 connector.hideProgressBar(); 3927 4151 } 3928 4152 }); … … 4043 4267 }; 4044 4268 4269 function truncate(text, size){ 4270 var result = text; 4271 if(text.length > size){ 4272 result = text.substring(0,size) + '...'; 4273 } 4274 return result; 4275 } 4276 4045 4277 DataLayer.links('message'); 4046 4278 DataLayer.poll('message',30); -
branches/2.4/expressoMail1_2/js/messages_controller.js
r6472 r6754 88 88 if (msgs_number == 'selected') 89 89 msgs_number = get_selected_messages(); 90 90 91 if(currentTab != 0 && currentTab.indexOf("search_") >= 0){ 91 92 var content_search = document.getElementById('content_id_'+currentTab); -
branches/2.4/expressoMail1_2/js/rich_text_editor.js
r6716 r6754 200 200 201 201 $(".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 } 210 210 } 211 211 … … 220 220 height -= 330; 221 221 $('#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*/ 226 226 $('#body_'+id).val(div.text()); 227 227 228 228 $('#body_'+id).keydown(function(event) { 229 229 away = false; … … 237 237 else{ 238 238 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()); 242 242 } 243 243 } … … 253 253 cRichTextEditor.prototype.setData = function (id,data){ 254 254 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); 259 259 } 260 260 cRichTextEditor.prototype.setInitData = function (id,data,reply,recursion, callback){ -
branches/2.4/expressoMail1_2/js/search.js
r6653 r6754 20 20 21 21 //Monta os forms dentro da janela; 22 searchE.prototype.showForms = function(value )22 searchE.prototype.showForms = function(value, data) 23 23 { 24 24 if( trim(value) != "" ) … … 39 39 var div = document.createElement("div"); 40 40 var args = null; 41 41 42 42 args = 43 43 { … … 63 63 "Old" : get_lang('Old'), 64 64 "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 68 69 $(div).html(DataLayer.render("./templates/default/searchMails.ejs", args )); 69 70 div.setAttribute( "style","overflow:hidden"); … … 515 516 td.id = "td_message_answered_"+uid_msg; 516 517 if (aux.flag.match('X')) 517 td1 = '<img src=templates/'+template+'/images/forwarded. giftitle="'+get_lang('Forwarded')+'">';518 td1 = '<img src=templates/'+template+'/images/forwarded.png title="'+get_lang('Forwarded')+'">'; 518 519 else 519 520 if (aux.flag.match('A')) 520 td1 = '<img src=templates/'+template+'/images/answered. giftitle="'+get_lang('Answered')+'">';521 td1 = '<img src=templates/'+template+'/images/answered.png title="'+get_lang('Answered')+'">'; 521 522 else 522 523 td1 = ''; … … 585 586 586 587 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; 591 593 } 592 594 … … 846 848 scrollSpeed: 100, 847 849 containment: "#divAppbox" 848 }).bind("contextmenu", function(event){ 850 }).bind("contextmenu", function(event){ 849 851 if(event.button == 2) 850 852 if($(this).find("input:checkbox").attr("checked") != "checked"){ … … 1741 1743 if( url.length ){ 1742 1744 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 }); 1755 1757 }else{ 1756 1758 xhr = false; … … 1763 1765 url: 'controller.php?action='+url.shift(), 1764 1766 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 } 1772 1774 }); 1773 1775 } -
branches/2.4/expressoMail1_2/js/sharemailbox.js
r6600 r6754 217 217 Element('em_input_sendAcl').disabled = true; 218 218 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"); 222 222 223 223 write_msg(get_lang('Shared options saved with success')); -
branches/2.4/expressoMail1_2/js/shortcut.js
r6727 r6754 327 327 shortcut.add('up', function(e) 328 328 { 329 329 330 var search_in_focus = false; 330 331 var search_win = document.getElementById( 'window_QuickCatalogSearch' ); … … 334 335 if ( !search_in_focus && currentTab == 0 ) 335 336 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'); 339 340 e.stopPropagation(); 340 341 e.preventDefault(); … … 351 352 if ( !search_in_focus && currentTab == 0 ) 352 353 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{} 355 356 // shortcut.remove('down'); 356 357 e.stopPropagation(); … … 519 520 520 521 if (msg_number != 'null') { 521 522 522 523 if(Element(msg_number)){ 523 524 unselect_all_msgs(); 524 525 add_className(Element(msg_number), 'selected_shortcut_msg'); 525 526 } 526 527 } else{527 528 } else { 528 529 var scrollMain = Element('divScrollMain_0'); 529 530 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 }); 561 563 } 562 564 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 595 597 } 598 599 } 596 600 return true; 597 601 } -
branches/2.4/expressoMail1_2/setup/default_records.inc.php
r6672 r6754 1 1 <?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 2 12 $oProc->query("ALTER TABLE expressomail_message_followupflag ADD CONSTRAINT expressomail_message_followupflag_followupflag_id_fkey FOREIGN KEY (followupflag_id) REFERENCES expressomail_followupflag (id);"); 3 13 … … 11 21 /* Seta o valor padrão para a configuração de número máximo de marcadores */ 12 22 $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 15 25 /* Registra o hook de validação do administrador*/ 16 26 $oProc->query("INSERT INTO phpgw_hooks( \"hook_appname\", \"hook_location\", \"hook_filename\") VALUES ('expressoMail1_2', 'config_validate', 'hook_config_validate.inc.php')"); 17 27 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)"); 19 30 ?> -
branches/2.4/expressoMail1_2/setup/phpgw_pt-br.lang
r6715 r6754 16 16 Add user into my IM expressoMail1_2 pt-br Adicionar no meu IM 17 17 After 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 18 Alert message filter by sender expressoMail1_2 pt-br Alertar ao receber mensagens filtradas por remetente 18 19 all expressoMail1_2 pt-br Todas 19 20 All messages are successfully unarchived expressoMail1_2 pt-br Mensagens desarquivadas com sucesso … … 94 95 Contact added successfully. expressoMail1_2 pt-br Contato adicionado com sucesso. 95 96 Connection 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? 97 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? 97 98 Couldn't verify if certificate was revoked.(CD-01) expressoMail1_2 pt-br A lista de certificados revogados não foi encontrada.(CD-01) 98 99 Couldn'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) … … 562 563 There 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. 563 564 There'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? 565 The filter is active for alerts expressoMail1_2 pt-br O filtro está ativo para alertas 564 566 The results were found in the Global Catalog expressoMail1_2 pt-br Ocorrências encontradas no Catálogo Geral 565 567 The selected folder is empty. expressoMail1_2 pt-br A pasta selecionada está vazia. … … 901 903 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? 902 904 Message size greateruler than allowed (Default rule) expressoMail1_2 pt-br Tamanho da mensagem excede o limite de tamanho configurado pelo administrador 905 You have an archived message: expressoMail1_2 pt-br Você tem uma mensagem arquivada: 906 You have %1 messages archived: expressoMail1_2 pt-br Você tem %1 mensagens arquivadas: 907 Filter by sender expressoMail1_2 pt-br Filtro por Remetente 908 Follow ups expressoMail1_2 pt-br Sinalizadas 909 Done expressoMail1_2 pt-br Concluídas 910 If 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 911 The 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" 912 Filter with alert expressoMail1_2 pt-br Filtro com alerta 913 Group contacts expressoMail1_2 pt-br Contatos do grupo 914 Remove recipient expressoMail1_2 pt-br Remover destinatário 915 Quick search of messages expressoMail1_2 pt-br Busca rápida de mensagens 916 Search messages of ... expressoMail1_2 pt-br Busca mensagens de ... 917 Telephone expressoMail1_2 pt-br Telefone 918 And more %1 contact expressoMail1_2 pt-br E mais %1 contato 919 Impossible editing this contact, but it's possible to remove it expressoMail1_2 pt-br Impossível editar este contato, mas é possível removê-lo 920 The 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 13 13 $setup_info['expressoMail1_2']['name'] = 'expressoMail1_2'; 14 14 $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'; 16 16 $setup_info['expressoMail1_2']['app_order'] = 2; 17 $setup_info['expressoMail1_2']['tables'][] = 'phpgw_expressomail_contacts';18 17 $setup_info['expressoMail1_2']['tables'][] = 'phpgw_certificados'; 19 18 … … 22 21 $setup_info['expressoMail1_2']['tables'][] = 'expressomail_message_followupflag'; 23 22 $setup_info['expressoMail1_2']['tables'][] = 'expressomail_followupflag'; 23 $setup_info['expressoMail1_2']['tables'][] = 'expressomail_dynamic_contact'; 24 24 25 25 … … 48 48 'versions' => Array('2.4') 49 49 ); 50 51 $setup_info['expressoMail1_2']['depends'][] = array( 52 'appname' => 'rest', 53 'versions' => Array('1.0') 54 ); 55 50 56 ?> -
branches/2.4/expressoMail1_2/setup/tables_current.inc.php
r5981 r6754 10 10 \**************************************************************************/ 11 11 $phpgw_baseline = array( 12 ' phpgw_expressomail_contacts' => array(12 'expressomail_dynamic_contact' => array( 13 13 '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), 16 20 ), 17 'pk' => array('id _owner'),21 'pk' => array('id'), 18 22 'fk' => array(), 19 23 'ix' => array(), 20 24 'uc' => array() 21 25 ), 26 22 27 'phpgw_certificados' => array( 23 28 'fd' => array( -
branches/2.4/expressoMail1_2/setup/tables_update.inc.php
r6255 r6754 267 267 return $GLOBALS['setup_info']['expressoMail1_2']['currentver']; 268 268 } 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 } 270 314 ?> -
branches/2.4/expressoMail1_2/templates/default/config.tpl
r5988 r6754 104 104 </td> 105 105 </tr> 106 <tr bgcolor="{row_o ff}">106 <tr bgcolor="{row_on}"> 107 107 <td>{lang_imap_max_folders}:</td> 108 108 <td> … … 110 110 </td> 111 111 </tr> 112 <tr bgcolor="{row_o n}">112 <tr bgcolor="{row_off}"> 113 113 <td>{lang_Max_attachment_size}</td> 114 114 <td> … … 118 118 </td> 119 119 </tr> 120 <tr bgcolor="{row_o ff}">120 <tr bgcolor="{row_on}"> 121 121 <td>{lang_allow_hidden_copy}</td> 122 122 <td> … … 133 133 </td> 134 134 </tr> 135 <tr bgcolor="{row_o ff}">135 <tr bgcolor="{row_on}"> 136 136 <td>{lang_gears_firefox_windows_url}</td> 137 137 <td> … … 139 139 </td> 140 140 </tr> 141 <tr bgcolor="{row_o n}">141 <tr bgcolor="{row_off}"> 142 142 <td>{lang_gears_firefox_linux_url}</td> 143 143 <td> … … 145 145 </td> 146 146 </tr> 147 <tr bgcolor="{row_o ff}">147 <tr bgcolor="{row_on}"> 148 148 <td>{lang_gears_ie_url}</td> 149 149 <td> … … 151 151 </td> 152 152 </tr> 153 <tr bgcolor="{row_o n}">153 <tr bgcolor="{row_off}"> 154 154 <td>{lang_Do_you_want_to_use_x_origin_in_source_menssage?}</td> 155 155 <td> … … 160 160 </td> 161 161 </tr> 162 <tr bgcolor="{row_o ff}">162 <tr bgcolor="{row_on}"> 163 163 <td>{lang_Number_max_of_labels}</td> 164 164 <td> … … 244 244 </td> 245 245 </tr> 246 247 <tr bgcolor="{th_bg}"> 248 <td colspan="2"> 249 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> --> 246 272 <!--tr bgcolor="{row_on}"> 247 273 <td>{lang_Days_interval_to_show_balloon_for_user}</td> -
branches/2.4/expressoMail1_2/templates/default/index.tpl
r5878 r6754 211 211 <div id="sendFileMessages" style="display:none;"></div> 212 212 <div id="quickAddContact" style="display:none;"></div> 213 <div id="freeow" class="freeow freeow-bottom-right"></div> 213 214 <!-- END list --> -
branches/2.4/expressoMail1_2/templates/default/main.css
r6734 r6754 127 127 .context-menu-item.icon-normal { background-image: url(images/door.png); } 128 128 .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); } 129 132 130 133 … … 700 703 } 701 704 .message_options_trash { 702 background-image: url( ../../../phpgwapi/templates/default/images/foldertree_trash.png);705 background-image: url(images/page_white_delete.png); 703 706 background-repeat: no-repeat; 704 707 background-position:left center; … … 1009 1012 } 1010 1013 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 } 1028 1022 1029 1023 .new-event-win.active .fc-event-skin { … … 1064 1058 } 1065 1059 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 1060 div.new-event-win.active div.button-files-upload{ 1061 margin: 15px 0 0 0; 1062 } 1063 1064 div.new-event-win.active div.files-list{ 1065 margin: 45px 0 0 0; 1066 } 1067 1074 1068 /*#divAppbox 1075 1069 { background: #fff url( ../images/bgBlockContent.jpg ) repeat-x; border-color: #9c9c9c; } … … 1282 1276 1283 1277 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 1398 input.required-fail{ 1399 border-color : red; 1400 } -
branches/2.4/expressoMail1_2/templates/default/searchMails.ejs
r5751 r6754 3 3 4 4 <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%>"/> 6 6 <br style="margin-bottom:15px" /> 7 7 -
branches/2.4/filemanager/setup/setup.inc.php
r5298 r6754 14 14 $setup_info['filemanager']['name'] = 'filemanager'; 15 15 $setup_info['filemanager']['title'] = 'Filemanager'; 16 $setup_info['filemanager']['version'] = '2.4. 0';16 $setup_info['filemanager']['version'] = '2.4.1'; 17 17 $setup_info['filemanager']['app_order'] = 6; 18 18 $setup_info['filemanager']['enable'] = 1; … … 48 48 ( 49 49 'appname' => 'phpgwapi', 50 'versions' => array('2.4 ')50 'versions' => array('2.4.1') 51 51 ); 52 52 ?> -
branches/2.4/help/setup/setup.inc.php
r5298 r6754 13 13 $setup_info['help']['name'] = 'help'; 14 14 $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'; 16 16 $setup_info['help']['app_order'] = 5; 17 17 $setup_info['help']['enable'] = 2; // Invisible on top (navigation bar) … … 26 26 $setup_info['help']['depends'][] = array( 27 27 'appname' => 'phpgwapi', 28 'versions' => Array('2.4 ')28 'versions' => Array('2.4.1') 29 29 ); 30 30 ?> -
branches/2.4/home.php
r5042 r6754 98 98 echo parse_navbar(); 99 99 } 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 120 121 $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 = ''; 143 136 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 { 160 139 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 184 186 $GLOBALS['phpgw']->common->phpgw_footer(); 185 187 ?> -
branches/2.4/jabberit_messenger/setup/setup.inc.php
r5298 r6754 8 8 $setup_info['jabberit_messenger']['name'] = 'jabberit_messenger'; 9 9 $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'; 11 11 $setup_info['jabberit_messenger']['app_order'] = 9; 12 12 $setup_info['jabberit_messenger']['enable'] = 1; … … 27 27 $setup_info['jabberit_messenger']['depends'][] = array( 28 28 'appname' => 'phpgwapi', 29 'versions' => Array('2.4 ')29 'versions' => Array('2.4.1') 30 30 ); 31 31 ?> -
branches/2.4/library/ckeditor/ckeditor.js
r6505 r6754 36 36 v=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(); 37 37 if(!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; 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; 39 39 var 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; 40 40 while(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 23 23 config.extraPlugins = 'richcombo,expresso,keystrokes,aspell'; 24 24 config.tabSpaces = 4; 25 config.disableNativeSpellChecker = false;25 config.disableNativeSpellChecker = false; 26 26 config.removePlugins = 'elementspath,scayt,menubutton'; 27 config.resize_enabled = true;27 config.resize_enabled = true; 28 28 config.toolbarCanCollapse = false; 29 29 config.toolbar_mail = -
branches/2.4/listAdmin/setup/setup.inc.php
r5298 r6754 9 9 $setup_info['listAdmin']['name'] = 'listAdmin'; 10 10 $setup_info['listAdmin']['title'] = 'Mailman Admin'; 11 $setup_info['listAdmin']['version'] = '2.4. 0';11 $setup_info['listAdmin']['version'] = '2.4.1'; 12 12 $setup_info['listAdmin']['app_order'] = 10; 13 13 $setup_info['listAdmin']['enable'] = 1; … … 30 30 $setup_info['listAdmin']['depends'][] = array( 31 31 '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') 33 33 ); 34 34 ?> -
branches/2.4/login.php
r6731 r6754 87 87 case browser::PLATFORM_NOKIA: 88 88 case browser::PLATFORM_ANDROID: 89 case browser::PLATFORM_WINMOBILE: 89 case browser::PLATFORM_WINMOBILE: 90 90 $ifMobile = true; 91 91 break; -
branches/2.4/mobile/inc/class.ui_mobilemail.inc.php
r6731 r6754 907 907 } 908 908 909 if(!$this->imap_functions->add_recipients("cc", $ccaddress, &$mail, true)) 909 if(!$this->imap_functions->add_recipients("cc", $ccaddress, &$mail, true)) 910 910 { 911 911 $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 14 14 $setup_info['mobile']['name'] = 'mobile'; 15 15 $setup_info['mobile']['title'] = 'Expresso Mini'; 16 $setup_info['mobile']['version'] = '2.4. 0';16 $setup_info['mobile']['version'] = '2.4.1'; 17 17 $setup_info['mobile']['app_order'] = 4; 18 18 $setup_info['mobile']['enable'] = 2; … … 39 39 $setup_info['mobile']['depends'][] = array( 40 40 'appname' => 'phpgwapi', 41 'versions' => Array('2.4 ')41 'versions' => Array('2.4.1') 42 42 ); 43 43 ?> -
branches/2.4/news_admin/setup/setup.inc.php
r5298 r6754 14 14 $setup_info['news_admin']['name'] = 'news_admin'; 15 15 $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'; 17 17 $setup_info['news_admin']['app_order'] = 16; 18 18 $setup_info['news_admin']['enable'] = 1; … … 31 31 $setup_info['news_admin']['depends'][] = array( 32 32 'appname' => 'phpgwapi', 33 'versions' => Array('2.4 ')33 'versions' => Array('2.4.1') 34 34 ); 35 35 -
branches/2.4/news_admin/setup/tables_update.inc.php
r5311 r6754 73 73 return $GLOBALS['setup_info']['news_admin']['currentver']; 74 74 } 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 } 75 81 ?> -
branches/2.4/phpgwapi/inc/class.browser.inc.php
r6731 r6754 44 44 const PLATFORM_ANDROID = 'Android'; 45 45 const PLATFORM_UNIX = 'Unix'; 46 const PLATFORM_WINMOBILE = 'WinMobile'; 46 const PLATFORM_WINMOBILE = 'WinMobile'; 47 47 48 48 function browser() … … 118 118 $this->BROWSER_PLATFORM = self::PLATFORM_MAC; 119 119 } 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 } 124 124 elseif(strstr($HTTP_USER_AGENT,'Win')) 125 125 { 126 126 $this->BROWSER_PLATFORM = self::PLATFORM_WINDOWS; 127 } 127 } 128 128 elseif(strstr($HTTP_USER_AGENT,'Linux')) 129 129 { -
branches/2.4/phpgwapi/inc/class.setup_process.inc.php
r6741 r6754 737 737 } 738 738 } 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(); 744 744 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 // } 756 756 else 757 757 { -
branches/2.4/phpgwapi/setup/setup.inc.php
r5141 r6754 14 14 $setup_info['phpgwapi']['name'] = 'phpgwapi'; 15 15 $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'; 18 18 $setup_info['phpgwapi']['enable'] = 3; 19 19 $setup_info['phpgwapi']['app_order'] = 1; -
branches/2.4/phpgwapi/setup/tables_update.inc.php
r5311 r6754 163 163 return $GLOBALS['setup_info']['phpgwapi']['currentver']; 164 164 } 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 } 165 171 ?> -
branches/2.4/phpgwapi/templates/default/login_default.php
r5281 r6754 177 177 else 178 178 $_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 179 222 } 180 223 if(getenv('REQUEST_METHOD') != 'POST' && $_SERVER['REQUEST_METHOD'] != 'POST' && … … 598 641 if(isset($ultima_revisao)) $tmpl->set_var('ultima_rev','<br>' . $ultima_revisao); 599 642 600 // Adiciona c ódigo personalizado de outro template643 // Adiciona cï¿œdigo personalizado de outro template 601 644 // que esteja utilizando o login_default.php 602 645 if(is_file('.'.$template_dir.'/login.inc.php')) { -
branches/2.4/preferences/setup/setup.inc.php
r5298 r6754 13 13 $setup_info['preferences']['name'] = 'preferences'; 14 14 $setup_info['preferences']['title'] = 'Preferences'; 15 $setup_info['preferences']['version'] = '2.4. 0';15 $setup_info['preferences']['version'] = '2.4.1'; 16 16 $setup_info['preferences']['app_order'] = 1; 17 17 $setup_info['preferences']['tables'] = ''; … … 28 28 $setup_info['preferences']['depends'][] = array( 29 29 'appname' => 'phpgwapi', 30 'versions' => Array('2.4 ')30 'versions' => Array('2.4.1') 31 31 ); 32 32 ?> -
branches/2.4/prototype/api/config.php
r5764 r6754 1 1 <?php 2 3 namespace prototype\api; 2 4 3 5 class Config 4 6 { 5 6 7 static $register; 8 static $sessionStarted; 7 9 8 9 10 11 12 10 static function module($config , $module = false) 11 { 12 //Todo: registrar na nova api o currentapp 13 if(!$module) 14 $module = $_SESSION['flags']['currentapp']; 13 15 14 15 16 if( !isset( $_SESSION['config'][$module] ) || !isset( $_SESSION['config'][$module][$config] )) 17 $_SESSION['config'][$module] = parse_ini_file( ROOTPATH."/config/$module.ini", true ); 16 18 17 19 return isset($_SESSION['config'][$module][$config]) ? $_SESSION['config'][$module][$config] : false; 18 20 19 21 } 20 22 21 22 23 static function me($config) 24 { 23 25 24 25 26 return isset($_SESSION['wallet']['user'][$config]) ? $_SESSION['wallet']['user'][$config] : false; 27 } 26 28 27 28 29 30 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 ); 31 33 32 33 34 return (isset($_SESSION['wallet'][$service][$config])) ? $_SESSION['wallet'][$service][$config] : false; 35 } 34 36 35 36 37 37 static function get( $concept , $config = false , $module = false ) 38 { 39 $load = parse_ini_file( ROOTPATH."/config/$concept.ini", true ); 38 40 39 41 if($config === false) return $load; 40 42 41 42 43 return (isset($load[$config])) ? $load[$config] : false; 44 } 43 45 44 45 46 47 48 49 50 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 } 52 54 53 static function init( ) 54 { 55 static function init( ) 56 { 57 58 if( !defined( 'ROOTPATH' ) ) 59 define( 'ROOTPATH', dirname(__FILE__).'/..' ); 55 60 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 } 64 66 65 67 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(); 93 69 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 } 95 108 96 109 } 97 110 98 111 Config::init(); 99 112 100 113 -
branches/2.4/prototype/api/controller.php
r6420 r6754 44 44 45 45 require_once(ROOTPATH.'/api/config.php'); 46 46 use prototype\api\Config as Config; 47 47 /** 48 48 TODO 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 1 5 internalUrl = /^([A-z0-9-_]+)(:[A-z0-9-_]+)?$/; 2 6 internalUri = /^([a-zA-Z0-9-_]+)\(([a-zA-Z0-9-_]+)\):\/\/(.*)|([a-zA-Z0-9-_]+):\/\/(.*)$/; … … 57 61 58 62 jqXHR.abort(); 63 64 if( typeof options.data === "string" ) 65 options.data = $.parseQuery( options.data ); 59 66 60 67 switch( options.type.toUpperCase() ) … … 624 631 625 632 rollback: function( concept, ids ){ 626 627 if(!DataLayer.storage.cache[':diff']) 628 return false; 633 if(!DataLayer.storage.cache[':diff']) 634 return false; 629 635 if(concept){ 630 636 if(ids){ … … 1394 1400 properties: criteria.properties || '' 1395 1401 1396 } );1402 }, false, true ); 1397 1403 }, 1398 1404 -
branches/2.4/prototype/api/newcontroller.php
r5715 r6754 5 5 6 6 require_once(ROOTPATH.'/api/config.php'); 7 use prototype\api\Config as Config; 7 8 8 9 /** -
branches/2.4/prototype/config/calendarSignatureAlarm.ini
r5592 r6754 15 15 16 16 [before.delete] 17 encodeURICalendarSignatureAlarm = modules/calendar/interceptors/DBMapping.php 17 decodeDeleteCalendarSignatureAlarm = modules/calendar/interceptors/DBMapping.php 18 18 19 19 [PostgreSQL.mapping] -
branches/2.4/prototype/config/filter.ini
r6021 r6754 10 10 11 11 [before.delete] 12 deleteVacationRule = modules/filters/interceptors/FilterMapping.php 12 13 deleteRule = modules/filters/interceptors/FilterMapping.php 13 14 … … 22 23 makeId = modules/filters/interceptors/FilterMapping.php 23 24 applySieveFilter = modules/filters/interceptors/FilterMapping.php 25 verifyVacationRule = modules/filters/interceptors/FilterMapping.php 24 26 25 27 26 28 [after.update] 27 29 makeId = modules/filters/interceptors/FilterMapping.php 30 verifyVacationRule = modules/filters/interceptors/FilterMapping.php 28 31 29 32 -
branches/2.4/prototype/config/labeled.ini
r6638 r6754 1 1 ;service = PostgreSQL 2 2 ;PostgreSQL.concept = expressomail_message_label 3 3 4 service = Imap 4 5 Imap.concept = labeled -
branches/2.4/prototype/config/user.ini
r6644 r6754 44 44 givenName = givenName 45 45 sn = sn 46 dn = dn 47 vacationInfo = vacationInfo 48 vacationActive = vacationActive 46 49 displayName = displayName 47 50 mailAlternateAddress = mailAlternateAddress … … 52 55 phpgwAccountVisible = phpgwAccountVisible 53 56 gidNumber = gidNumber 57 telephoneNumber=telephoneNumber -
branches/2.4/prototype/me.php
r5399 r6754 1 1 <?php 2 3 2 require_once (dirname(__FILE__).'/api/controller.php'); 3 use prototype\api\Config as Config; 4 4 5 5 $me = Controller::read(array('concept' => 'user', 'service' => 'OpenLDAP' , 'id' => Config::me('uidNumber'))); 6 6 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']; 7 49 echo json_encode( $me ); 8 50 -
branches/2.4/prototype/modules/calendar/alarms.php
r6378 r6754 7 7 require_once ROOTPATH.'/modules/calendar/constants.php'; 8 8 require_once ROOTPATH.'/api/parseTPL.php'; 9 10 use prototype\api\Config as Config; 9 11 10 12 $target = (gmdate('U') - 300 ).'000'; -
branches/2.4/prototype/modules/calendar/css/layout.css
r6501 r6754 227 227 .new-event-win ul.attendee-permissions-list, li.attendee-permissions-list{text-align: left;} 228 228 229 li.attendee-permissions-list input{width: 20px !important; margin: 3px 0 0 0 !important;} 229 li.attendee-permissions-list input{width: 20px !important; margin: 3px 0 0 0 !important;} 230 230 231 231 p.request-update{display: inline; position: relative; top: 2px;} … … 401 401 402 402 label.messagesHelpers{display: block; position: absolute; left: 60px; top: 21px;} 403 403 404 /* -- calendar list styles -- */ 404 405 -
branches/2.4/prototype/modules/calendar/interceptors/DAViCalAdapter.php
r6010 r6754 1 1 <?php 2 2 require_once ROOTPATH.'/modules/calendar/constants.php'; 3 use prototype\api\Config as Config; 3 4 4 5 class DAViCalAdapter { -
branches/2.4/prototype/modules/calendar/interceptors/DBMapping.php
r6588 r6754 5 5 6 6 require_once ROOTPATH . '/modules/calendar/interceptors/Helpers.php'; 7 8 use prototype\api\Config as Config; 7 9 8 10 class DBMapping extends Helpers { … … 147 149 .'(range_start >= \'' . $start[1] . '\' AND range_start <= \'' . $end[1] . '\') OR ' 148 150 .'(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 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))'; 153 155 154 156 $params = Controller::service('PostgreSQL')->execResultSql($sql.$where); … … 206 208 //Recurepa as execeções anteriores caso exista 207 209 if (isset($lastExceptions) && count($lastExceptions) && $lastExceptions) 208 foreach ($lastExceptions as $value) 209 210 foreach ($lastExceptions as $value) 211 array_push($exceptions, $value['occurrence']); 210 212 211 213 $params = array_diff(self::decodeRepeat($repeat, $ranges[0]['rangeStart'], $ranges[0]['rangeEnd']), $exceptions); … … 215 217 if (!empty($params)) 216 218 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 } 220 222 221 223 public function checkOccurrences($start, $end, $calendarIds) { … … 543 545 544 546 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 551 553 $attachmentRelation = Controller::find(array('concept' => 'schedulableToAttachment'), false, array('filter' => array('=', 'schedulable', $v['id']))); 552 554 if (is_array($attachmentRelation)) { … … 571 573 return $result; 572 574 } 573 575 574 576 575 577 //TODO: Remover apos suporte a deepness na api … … 698 700 ///////////////////////////////////////////////////////////////////////// 699 701 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 ) { 765 767 if(isset($criteria['filter'][1]) && $criteria['filter'][1] == 'date') 766 768 { … … 898 900 Controller::delete(array('concept' => 'attachment', 'id' => $original['URI']['id'])); 899 901 } 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 907 910 public function createDefaultSignature(&$uri, &$result, &$criteria, $original) { 908 911 … … 963 966 //Criaremos uma agenda padrão 964 967 $cal = array('name' => 'Calendario', 965 'description' => 'Calendario Padrão',968 'description' => 'Calendario Padrão', 966 969 'timezone' => (date_default_timezone_get()) ? date_default_timezone_get() : 'America/Sao_Paulo', 967 970 'dtstamp' => time() . '000' -
branches/2.4/prototype/modules/calendar/interceptors/Notifications.php
r6331 r6754 5 5 require_once ROOTPATH . '/plugins/icalcreator/iCalcreator.class.php'; 6 6 require_once ROOTPATH . '/api/parseTPL.php'; 7 8 use prototype\api\Config as Config; 7 9 8 10 class Notifications extends Helpers { -
branches/2.4/prototype/modules/calendar/js/calendar.codecs.js
r6588 r6754 349 349 return { 350 350 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'), 353 353 allDay: ( !!form.allDay ? 1 : 0 ), 354 354 schedulable: form.idEvent … … 499 499 500 500 var isShared = !objEvent.id ? false : (!!objEvent.calendar) && parseInt(Calendar.signatureOf[objEvent.calendar].isOwner) ? false : true; 501 var limitAttendee = false; 501 var limitAttendee = false; 502 502 503 503 return { … … 587 587 me: me, 588 588 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 591 591 }; 592 592 }); … … 641 641 patati['byday'] = day.join(','); 642 642 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 647 647 patati['startTime'] = date.toString(!!form.allDay ? 'yyyy-MM-dd 00:00:00' : 'yyyy-MM-dd HH:mm:00'); 648 648 649 649 if( !patati['byday'] ) 650 650 switch(form.frequency) { … … 657 657 break; 658 658 case 'yearly': 659 patati['byyearday'] = (1 + date.getDayOfYear()); 659 patati['byyearday'] = (1 + date.getDayOfYear()); 660 660 break; 661 661 default : … … 667 667 668 668 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(); 672 672 673 673 /** … … 722 722 return DataLayer.merge({ 723 723 "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) , 726 726 allDay: ( !!form.allDay ? 1 : 0 ), 727 727 id: form.idEvent, -
branches/2.4/prototype/modules/calendar/js/calendar.contentMenu.js
r6588 r6754 26 26 var schedulable = DataLayer.get('schedulable', idEvent); 27 27 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 32 32 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 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, 36 36 idRecurrence: idRecurrence 37 37 }); 38 38 39 39 $('#context-menu-event').html(template); 40 40 41 41 var method = function(value){ 42 42 switch (value){ -
branches/2.4/prototype/modules/calendar/js/calendar.date.js
r6453 r6754 143 143 return dateFormat( date, format.replace(/m/g, 'M') ); 144 144 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)); 153 153 } 154 154 -
branches/2.4/prototype/modules/calendar/js/calendar.shared.js
r6613 r6754 71 71 }); 72 72 }); 73 74 75 DataLayer.commit(); 76 UI.dialogs.sharedCalendar.dialog("close"); 73 74 DataLayer.commit(); 75 UI.dialogs.sharedCalendar.dialog("close"); 77 76 }; 78 77 -
branches/2.4/prototype/modules/calendar/js/helpers.js
r6734 r6754 13 13 14 14 function 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 }; 35 35 36 36 var start_date = $(".new-event-win.active .start-date").val(); … … 44 44 45 45 if(start_date == "") 46 return errors['emptyInitData'];46 return errors['emptyInitData']; 47 47 else if(end_date == "") 48 return errors['emptyEndData'];48 return errors['emptyEndData']; 49 49 else if(!isAllDay && start_time == "") 50 return errors['emptyInitHour'];50 return errors['emptyInitHour']; 51 51 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 ); 58 58 59 59 if(startDate == null || startDate.getTime() < 0 ) 60 return errors['invalidInitData'];60 return errors['invalidInitData']; 61 61 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 else79 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 } 82 82 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 } 93 93 94 94 if (!($('.new-event-win.active p.input-group.finish_event.repeat-in').hasClass('hidden'))){ 95 95 if (!eventInterval.length) 96 return errors['emptyInterval'];96 return errors['emptyInterval']; 97 97 else if (parseInt(eventInterval,10) < 1 || parseInt(eventInterval,10).toString() == "NaN") 98 return errors['invalidInterval'];98 return errors['invalidInterval']; 99 99 } 100 100 return false; … … 337 337 $('.qtip-active').find('input[name="'+acl_names[aclsParticipant.charAt(i)]+'"]').attr('checked', true); 338 338 } 339 340 $('.qtip .button').button(); 339 341 340 341 $('.qtip .button').button();342 342 }; 343 343 }else{ … … 402 402 position: 'center', 403 403 close: function(event, ui) { 404 404 /** 405 405 * Remove tooltip possivelmente existente 406 406 */ 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 = {}; 411 410 }, 412 411 beforeClose: function(event, ui) { … … 442 441 zebraDiscardEventDialog = false; 443 442 } 444 445 /**446 * Uma vez aberta uma janela de confirmação (Zebra_Dialog), ao fechá-la447 * 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 */ 451 450 if (!clicked) { 452 451 window.setTimeout(function() { … … 462 461 //DataLayer.rollback(); 463 462 return canDiscardEventDialog; 464 }, 465 dragStart: function(event, ui) { 466 if ($('.qtip.qtip-blue.qtip-active').length) 467 463 }, 464 dragStart: function(event, ui) { 465 if ($('.qtip.qtip-blue.qtip-active').length) 466 $('.qtip.qtip-blue.qtip-active').qtip('destroy'); 468 467 } 469 468 }); … … 473 472 } 474 473 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 474 var 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 }); 481 480 var calendar = DataLayer.get('calendar', objEvent.calendar); 482 481 … … 493 492 494 493 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 }); 498 497 499 498 if(objEvent.repeat) … … 675 674 } 676 675 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*/ 677 if(objEvent.id) 678 UI.dialogs.addEvent.find('option[value="'+objEvent.calendar+'"]').attr('selected','selected').trigger('change'); 679 681 680 /*Adicionar alarms padrões, quando alterado a agenda do usuário*/ 682 681 UI.dialogs.addEvent.find('select[name="calendar"]').change(function(){ … … 704 703 } 705 704 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]; 711 710 var organizer = DataLayer.get('calendarSignature', { 712 711 filter: ['AND', ['=','calendar',signature.calendar.id], ['=','isOwner','1']], … … 1554 1553 if(acls.remove) 1555 1554 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(); 1558 1557 } 1559 1558 … … 1561 1560 1562 1561 /*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 } 1562 if(!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 } 1567 1566 UI.dialogs.addEvent.find(':input').change(function(event){ 1568 1567 if (event.keyCode != '27' && event.keyCode != '13') … … 1697 1696 var signatures = []; 1698 1697 var previewActiveCalendarConf = 0; 1699 var calendarAlarms = []; 1700 1698 var calendarAlarms = []; 1699 1701 1700 for (var i=0; i<Calendar.signatures.length; i++) { 1702 1701 calendars[i] = Calendar.signatures[i].calendar; … … 1722 1721 var populateAccordionOnActive = function(event, ui) { 1723 1722 var nowActive = (typeof(event) == 'number') ? event : $(event.target).accordion( "option", "active" ); 1724 if (nowActive === false) 1725 1723 if (nowActive === false) 1724 return; 1726 1725 dataColorPicker.colorsDefined = { 1727 1726 border: '#'+signatures[nowActive].borderColor, … … 1746 1745 }); 1747 1746 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 }); 1752 1751 1753 1752 DataLayer.render( 'templates/timezone_list.ejs', {}, function( timezones_options ){ … … 1868 1867 var template_content = jQuery('#configure_tab').html( template ).find('.configure-calendars-win'); 1869 1868 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]}); 1872 1871 template_content.find('form').submit(); 1873 1872 $tabs.tabs( "remove", "#configure_tab"); … … 1877 1876 refresh_calendars(); 1878 1877 }); 1879 if(calendarAlarms.length) 1880 Calendar.load(); 1878 if(calendarAlarms.length) 1879 Calendar.load(); 1881 1880 }).end().filter('.cancel').click(function(evt){ 1882 1881 $tabs.tabs( "remove", "#configure_tab"); … … 1904 1903 1905 1904 } else { 1906 $('.positionHelper').css('display','none');1907 1905 $('.positionHelper').css('display','none'); 1906 $('.cal-list-options-btn').removeClass('fg-menu-open ui-state-active'); 1908 1907 $tabs.tabs("select", "#configure_tab"); 1909 1908 $('.accordion-user-calendars').accordion( "activate" , previewActiveCalendarConf ); … … 2070 2069 var meu_container = $(".calendars-list").html( html ); 2071 2070 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 detection2085 detectV: true, // do vertical collision detection2086 linkToFront: false2087 },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 2104 2103 meu_container.find(".button.new-calendar").button({ 2105 2104 icons: { … … 2544 2543 // não há resultados 2545 2544 2546 var currentView = '#tab_events_list_' + ((Base64.encode(keyword)).replace(/[^\w\s]/gi, "") || ''); 2545 var currentView = '#tab_events_list_' + ((Base64.encode(keyword)).replace(/[^\w\s]/gi, "") || ''); 2547 2546 2548 2547 if ((((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>' 2553 2552 ); 2554 2553 // há resultados e Agendas Selecionadas 2555 2554 } else{ 2556 2555 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); 2580 2579 }); 2581 2580 }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); 2594 2593 } 2595 2594 … … 2806 2805 2807 2806 } 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 2809 function 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 3 3 %> 4 4 <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> 6 6 <dd class="me"> 7 7 <select class="status" name="status" <%= data.event.isAttendee ? '' : 'disabled' %>> … … 39 39 <dd class="attendee-list"> 40 40 <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 44 45 <li class="organizer <%= (data.event.acl.organization) ? "hidden" : "" %>"> 45 46 <div style="overflow:hidden; width:100%; display:table;"> … … 148 149 <% if (data.event && data.event.attendee.length > 0) { %> 149 150 <ul class="attendees-count"> 150 <li><label>Sim:</label><%=data.event.statusParticipants.accepted%></li>151 <li><label>Sim:</label><%=data.event.statusParticipants.accepted%></li> 151 152 <li><label>Não:</label><%=data.event.statusParticipants.cancelled%></li> 152 153 <li><label>Talvez:</label><%=data.event.statusParticipants.tentative%></li> 153 154 <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> 160 161 <% } %> 161 162 </dd> -
branches/2.4/prototype/modules/calendar/templates/event_add.ejs
r6586 r6754 225 225 <div title="" class="menu-container footer-container menu-addevent"> 226 226 <% 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> 229 229 <% } %> 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> 232 232 </div> 233 233 </div> -
branches/2.4/prototype/modules/calendar/templates/event_list.ejs
r6586 r6754 168 168 <input name="eventid" type="hidden" value="<%=_event.id%>"></input> 169 169 <input name="calendarid" type="hidden" value="<%=_event.calendar%>"></input> 170 <a title="Excluir" class="button delete" href="#">Excluir</a> 171 170 <a title="Excluir" class="button delete" href="#">Excluir</a> 171 <a title="Editar" class="button edit" href="#">Editar</a> 172 172 </div> 173 173 </div> -
branches/2.4/prototype/modules/calendar/templates/index.ejs
r6586 r6754 102 102 <body> 103 103 <div id="wrap" class="expresso-calendar-container" style="text-align:left;"> 104 <div title="Configura ções" class="block-horizontal-toolbox">104 <div title="Configurações" class="block-horizontal-toolbox"> 105 105 <a class="button config-menu main-config-menu" href="#"></a> 106 106 <div class="main-config-menu-content hidden"> -
branches/2.4/prototype/modules/filters/edit-filter.ejs
r6387 r6754 124 124 %> 125 125 </select> 126 <input type="checkbox" name="actionType[]" value="alertMessage" class="alertMessage"/> 127 <label><%= get_lang("Alert message filter by sender")%></label> 126 128 </fieldset> 127 129 <fieldset> -
branches/2.4/prototype/modules/filters/filter-list.ejs
r6728 r6754 4 4 data.rules = (data.rules || []); 5 5 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 } 53 47 %> 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 %>"> 56 56 <strong class="title <%= (data.rules[i].enabled == "true")? 'enable':'disable' %>"><%= (data.rules[i].name ? data.rules[i].name : data.rules[i].id)%></strong> 57 57 <input type="hidden" class="id" value="<%= data.rules[i].id %>"> … … 80 80 <% 81 81 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 } 82 88 %> 83 89 <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 */ 4 function 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 */ 2 23 function outOfficeVerify() { 3 24 DataLayer.remove('filter', false); … … 9 30 outoffice = true; 10 31 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); 12 33 outoffice_active = true; 13 34 break; … … 18 39 } 19 40 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 */ 22 44 valid_save = function(){ 23 45 var accord = list_container.find(".rule-details-container").accordion({autoHeight: false}); … … 53 75 error = true; 54 76 return; 55 } 77 } 56 78 }); 57 79 if(error){ … … 63 85 var criteria_list = list_container.find('[name="criteriaValue[]"]'); 64 86 var er_num = /^[0-9]+$/; 65 87 66 88 if($(".sizeRule").val() != "" && er_num.test($(".sizeRule").val()) == false) { 67 89 $.Zebra_Dialog(get_lang("Size rule must be a number"),{ … … 74 96 } 75 97 $.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 } 77 101 }); 78 102 if(criteria == ""){ … … 101 125 } 102 126 }); 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"')); 103 148 return false; 104 149 } … … 132 177 date2Time = function (timestamp) { 133 178 var date = new Date(); 179 if( typeof timestamp === "string" ) 180 timestamp = parseInt( timestamp, 10 ); 134 181 if ((date.getTime() - timestamp) < (24*60*60*1000)) { 135 182 return '<span class="timable" title="'+timestamp+'"> </span>'; … … 143 190 144 191 keys = function( object ){ 145 192 146 193 var array = []; 147 194 148 195 for( var key in object ) 149 196 array[ array.length ] = key; 150 197 151 198 return( array ); 152 199 153 200 } 154 201 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 */ 156 205 showDetails = function( filter ){ 157 206 158 207 form.get(0).reset(); 159 208 … … 175 224 if(filter.actions[i].type == "redirect") 176 225 actions.siblings('[name="addressRedirect"]').val(filter.actions[i].parameter); 177 if(filter.actions[i].type == "reject") 226 if(filter.actions[i].type == "reject") 178 227 actions.siblings('[name="messageReject"]').val(filter.actions[i].parameter); 179 228 if(filter.actions[i].type == "fileinto" || filter.actions[i].type == "setflag") 180 229 actions.parent().find('[value="'+filter.actions[i].parameter+'"]').attr("selected", "selected"); 181 230 } 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'); 183 234 } 184 235 185 236 186 237 DataLayer.codec( "filter", "detail", { 187 238 188 239 decoder: function( form ){ 189 240 if( form.vacation ) 190 241 return { 191 242 criteria: [{ value: "vacation", operator: "", field: "vacation" }], … … 199 250 200 251 var apply_messages_ = keys(selectedMessages); 201 252 202 253 action = ''; 203 254 204 255 return { 205 256 name: form.name ? form.name.replace(/&/g,'&').replace(/</g,'<').replace(/>/g,'>') : nameObj.val().replace(/&/g,'&').replace(/</g,'<').replace(/>/g,'>'), 206 257 isExact: ( form.isExact === "and" ), 207 criteria: $.map( form.criteriaOperator || [], function( criteriaOperator, i ){ 258 criteria: $.map( form.criteriaOperator || [], function( criteriaOperator, i ){ 208 259 return (!form.criteriaValue[i]) ? null: 209 { 260 { 210 261 value: form.criteriaValue[i].replace(/&/g,'&').replace(/</g,'<').replace(/>/g,'>'), 211 262 operator: criteriaOperator, … … 215 266 actions: $.map( form.actionType || [], function( type, i ){ 216 267 var the_parameter = form.actionParameter[i]; 217 268 218 269 !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 } 219 279 if (type == 'fileinto') { 220 280 the_parameter = form.valueFileInto; … … 223 283 the_parameter = form.messageReject; 224 284 } 225 if (type == 'fileintoInbox') { 285 if (type == 'fileintoInbox') { 226 286 if(!$('[value="fileintoInbox"]').parent().hasClass("hidden")){ 227 287 type = 'fileinto'; … … 238 298 the_parameter = form.addressRedirect; 239 299 } 240 if (type == 'setflag') { 300 if (type == 'setflag') { 241 301 the_parameter = form.valueSetFlag; 242 302 action = form.valueSetFlag; … … 247 307 }), 248 308 enabled : true, 309 alertMessage: $('.alertMessage').is(':checked'), 310 //applyMessages: allMessages? !$.isEmptyObject( selectedMessages ) ? 311 //keys( selectedMessages ) : allMessages : "" 249 312 applyMessages: apply_messages_ 313 //applyMessages: "" 250 314 }; 251 315 }, 252 316 253 317 encoder: function( filters ){ 254 318 var rules = []; … … 260 324 261 325 } 262 326 263 327 }); 264 328 265 329 /* Codec do datalayer */ 266 330 DataLayer.codec( "folder", "select", { 267 331 268 332 decoder:function(){ 269 333 270 334 }, 271 335 encoder:function( data ){ 272 336 273 337 var tree1 = [], tree2 = [], tree3 = []; 274 338 … … 295 359 296 360 } 297 361 298 362 return {folders: [ tree1, tree2, tree3 ]}; 299 363 … … 301 365 302 366 }); 367 368 369 fromRules = getFromAlertRules(); 303 370 304 371 var BASE_PATH = '../prototype/'; … … 310 377 var allMessages = false; 311 378 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 */ 382 function block_user_email(email) { 314 383 delete selectedMessages; 315 384 var idd = urlencode(email); … … 324 393 $.Zebra_Dialog(get_lang("Lock User") + " " + email + " " + get_lang("removed")); 325 394 list_filters(); 395 getFromAlertRules(); 326 396 }); 327 397 return true; … … 331 401 } 332 402 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, 335 405 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, 338 408 id: email, 339 block: true 409 block: true 340 410 }); 341 411 DataLayer.commit("filter", false, function(){ 342 412 $.Zebra_Dialog(get_lang("User") + " " + email + " " + get_lang("blocked")); 343 413 list_filters(); 344 }); 345 414 getFromAlertRules(); 415 }); 416 346 417 } 347 418 } 348 419 349 /* Gerencia o grid das mensagens da caixa de entrada */ 420 421 DataLayer.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 */ 350 433 function showGridMessages(thiss) { 351 434 var criteria_list = list_container.find('[name="criteriaValue[]"]'); … … 366 449 var options = ["from", "to", "subject", "body", "size"]; 367 450 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 375 456 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 contador443 // jQuery('.timable').each(function (i) {444 // jQuery(this).countdown({445 // since: new Date(parseInt(this.title)),446 // significant: 1,447 // layout: 'há {d<}{dn} {dl} {d>}{h<}{hn} {hl} {h>}{m<}{mn} {ml} {m>}{s<}{sn} {sl}{s>}',448 // description: ' atrás'449 // });450 // });451 },452 onSelectRow: function (id, selected) {453 if( selected )454 455 selectedMessages[ id ] = true;456 }457 else458 {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 else467 delete selectedMessages[id[i]];468 }469 },470 caption: 'Mensagens que atendem aos critérios'471 }); // end jqGrid472 } // end success473 }); // end ajax457 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á {d<}{dn} {dl} {d>}{h<}{hn} {hl} {h>}{m<}{mn} {ml} {m>}{s<}{sn} {sl}{s>}', 531 // description: ' atrá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érios' 554 }); // end jqGrid 474 555 } 475 556 476 557 /* Gerencia a listagem de filtros do usuário */ 558 /* 559 * Lista os filtros para o usuário 560 */ 477 561 function list_filters(html){ 478 562 outOfficeVerify(); … … 486 570 } 487 571 list_container = $(".expresso-window-filters").dialog({ 572 title: get_lang('Filters'), 488 573 width:700, 489 574 modal: true, … … 493 578 event.stopPropagation(); 494 579 if(list_container.find(".cancel").length) 495 list_container.find(".cancel").trigger('click'); 580 list_container.find(".cancel").trigger('click'); 496 581 $(".dialog-head-buttonpane").hide(); 497 582 }, … … 516 601 $(".dialog-head-buttonpane").css("padding", "5px"). 517 602 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 519 604 $(".ui-dialog-buttonpane.ui-widget-content").css("background-color", "#E0EEEE"); 520 605 var list = DataLayer.render( BASE_PATH + 'modules/filters/filter-list.ejs', DataLayer.get("filter:detail", true)); 521 606 list_container.html(list).find(".button").button(); 522 607 523 608 list_container.find(".rule-list").selectable({ 524 609 selecting: function(event, ui) { … … 529 614 } 530 615 }); 531 616 532 617 list_container.find( ".menu-control .button" ).filter(".update").button({ 533 618 icons: { … … 542 627 filters = filters[i]; 543 628 break; 544 } 629 } 545 630 } 546 631 DataLayer.render( BASE_PATH + 'modules/filters/edit-filter.ejs', {folders : DataLayer.get("folder", true), delimiter: cyrus_delimiter},function(html){ … … 571 656 else 572 657 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 != '') { 575 666 for (var index in selectedMessages) { 576 667 set_message_flag(index, action, false); … … 578 669 } 579 670 DataLayer.render( BASE_PATH + 'modules/filters/init.ejs', {},list_filters); 671 getFromAlertRules(); 580 672 }); 581 }).end().filter('.button.search').click(function() { 673 }).end().filter('.button.search').click(function() { 582 674 /* Valida se o usuário preencheu as informações */ 583 675 if(valid_save()) … … 595 687 DataLayer.commit( 'filter', false,function(){ 596 688 DataLayer.render( BASE_PATH + 'modules/filters/init.ejs', {},list_filters); 689 getFromAlertRules(); 597 690 }); 598 691 }); … … 607 700 text: false 608 701 }).click(function(){ 609 var id = $(this).parents("li.rule").find('.id').val(); 702 var id = $(this).parents("li.rule").find('.id').val(); 610 703 DataLayer.put( 'filter', id, { enabled: false }); 704 /**RETIRA FLAG*/ 705 removeMessagesFlag(id); 611 706 DataLayer.commit("filter", false,function(){ 612 707 DataLayer.render( BASE_PATH + 'modules/filters/init.ejs', {},list_filters); 708 getFromAlertRules(); 613 709 }); 614 710 }).end() … … 624 720 DataLayer.commit("filter", false,function(){ 625 721 DataLayer.render( BASE_PATH + 'modules/filters/init.ejs', {},list_filters); 722 getFromAlertRules(); 626 723 }); 627 724 }).end() 628 725 629 726 .filter(".close").button({ 630 727 icons: { … … 644 741 DataLayer.remove('filter', false); 645 742 DataLayer.get('filter'); 743 /**RETIRA FLAG*/ 744 removeMessagesFlag(filter_name); 646 745 DataLayer.remove( 'filter', filter_name); 746 647 747 DataLayer.commit("filter", false,function(){ 648 748 DataLayer.render( BASE_PATH + 'modules/filters/init.ejs', {},list_filters); 749 getFromAlertRules(); 649 750 }); 650 751 }else{ … … 654 755 }); 655 756 }).end().removeClass("ui-button-icon-only"); 656 757 657 758 $(".button.allenable").click(function(){ 658 759 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 }); 660 761 }); 661 762 DataLayer.commit("filter", false, function(){ 662 763 DataLayer.render( BASE_PATH + 'modules/filters/init.ejs', {},list_filters); 663 }); 664 }); 665 764 getFromAlertRules(); 765 }); 766 }); 767 666 768 $(".button.alldisable").click(function(){ 667 769 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); 669 773 }); 670 774 DataLayer.commit("filter", false, function(){ 671 775 DataLayer.render( BASE_PATH + 'modules/filters/init.ejs', {},list_filters); 672 }); 673 }); 674 776 getFromAlertRules(); 777 }); 778 }); 779 675 780 $(".button.alldelete").click(function(){ 676 781 $.Zebra_Dialog(get_lang("Are you sure to delete the filters?"),{ … … 683 788 DataLayer.remove('filter', false); 684 789 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) ); 689 795 }); 690 796 DataLayer.commit("filter", false,function(){ 691 797 DataLayer.render( BASE_PATH + 'modules/filters/init.ejs', {},list_filters); 798 getFromAlertRules(); 692 799 }); 693 800 }else{ … … 697 804 }); 698 805 }); 699 806 700 807 var aa = 0; 701 808 702 809 list_container.parent().find(".button.add:first").click(function(){ 703 810 list_container.parent().find(".dialog-head-buttonpane").addClass("hidden"); … … 721 828 return; 722 829 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 != '') { 724 831 for (var index in selectedMessages) { 725 832 set_message_flag(index, action, false); … … 727 834 } 728 835 DataLayer.render( BASE_PATH + 'modules/filters/init.ejs', {},list_filters); 836 getFromAlertRules(); 729 837 }); 730 }).end().filter('.button.search').click(function() { 838 }).end().filter('.button.search').click(function() { 731 839 if(valid_save()) 732 840 showGridMessages($(this)); … … 737 845 }); 738 846 list_container.parent().find(".button.add.vacation").click(function(){ 739 847 740 848 list_container.parent().find(".dialog-head-buttonpane").addClass("hidden"); 741 849 DataLayer.render( BASE_PATH + 'modules/filters/edit-filter.ejs', {folders : DataLayer.get("folder", true), delimiter: cyrus_delimiter},function(html){ … … 745 853 list_container.find(".button").button().filter(".back").click(function(){ 746 854 DataLayer.render( BASE_PATH + 'modules/filters/init.ejs', {},list_filters); 747 }).end().filter(".submit").click(function(){ 855 }).end().filter(".submit").click(function(){ 748 856 if(list_container.find(".vacation-details-container .filter-textarea").val().length <= 0){ 749 857 $.Zebra_Dialog(get_lang('Write a message')); … … 753 861 DataLayer.commit( 'filter',false,function(){ 754 862 DataLayer.render( BASE_PATH + 'modules/filters/init.ejs', {},list_filters); 863 getFromAlertRules(); 755 864 }); 756 865 } 757 866 }); 758 }); 867 }); 759 868 }); 760 869 } 761 870 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 */ 763 875 function init_filters(){ 764 876 var html = DataLayer.render( BASE_PATH + 'modules/filters/init.ejs', {}); 765 877 list_filters(html); 766 878 } 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 */ 884 function 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 41 41 */ 42 42 43 use prototype\api\Config as Config; 43 use prototype\api\Config as Config; 44 44 45 45 /** … … 224 224 $script_criteria .= ")"; 225 225 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 = ''; 227 229 228 230 if( is_array($action) ) … … 230 232 { 231 233 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; 232 242 case 'redirect': 233 243 break; … … 245 255 $vacation = true; 246 256 continue; 247 case 'setflag':248 $require_flag = true;249 $action[$k]['parameter'] = "\\\\" . $action[$k]['parameter'];250 break;251 257 case 'discard': 252 258 break; 253 259 } 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 "; 255 261 } 256 $script_action .= "}";257 262 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 = ''; 258 268 if($vacation == false) 259 269 $script_rules .= $script_match . $script_criteria . $script_action . "\r\n"; … … 263 273 $script_match = ""; 264 274 $script_criteria = ""; 275 $script_action = ""; 265 276 $data['applyMessages'] = ""; 266 277 } … … 295 306 296 307 $content = $script_begin . $script_header . $script_rules . "\r\n\r\n#PseudoScript#" . "\r\n#" . $json_data; 297 308 298 309 return( $content ); 299 310 } … … 697 708 return( $return ); 698 709 } 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 } 699 795 } -
branches/2.4/prototype/modules/mail/css/followupflag.css
r6167 r6754 53 53 .followupflag-container .background-color {margin:0; outline: 0; width: 100px; -moz-border-radius: 5px; -webkit-border-radius:5px; float: left; } 54 54 .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; } 56 56 .colorpicker { float: right; margin: -15px 0 0 0; } 57 57 … … 209 209 span.removeLabeledMsg {margin:0 5px 0 5px;font-weight: bold;} 210 210 span.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 47 47 * @since Classe disponibilizada na versão 2.4 48 48 */ 49 50 use prototype\api\Config as Config; 51 49 52 class Attachments { 50 53 -
branches/2.4/prototype/modules/mail/interceptors/FollowupflagSecure.php
r5611 r6754 1 1 <?php 2 3 use prototype\api\Config as Config; 4 2 5 class FollowupflagSecure { 3 6 -
branches/2.4/prototype/modules/mail/interceptors/Helpers.php
r6653 r6754 1 1 <?php 2 2 include_once ROOTPATH."/../expressoMail1_2/inc/class.imap_functions.inc.php"; 3 4 use prototype\api\Config as Config; 3 5 4 6 class Helpers { … … 41 43 $labeledsIds[] = $e['id']; 42 44 } 43 44 45 Controller::delete( array( 'concept' => 'labeled', 'service' => 'Imap' ), false, array( 'filter' => array( 'IN', 'id', $labeledsIds )) ); 45 46 … … 205 206 206 207 if(empty($params['messageId'])) 207 throw new Exception('#FollowupflagMessageIdError'); 208 else209 208 throw new Exception('#FollowupflagMessageIdError'); 209 else 210 $params = Controller::create($imap_uri, $params); 210 211 211 212 if (!$params) … … 219 220 * deste interceptor. 220 221 */ 221 222 223 224 222 223 224 225 225 226 if ($original['URI']['service'] == 'PostgreSQL') return $result; 226 227 … … 268 269 //followupflagged:PostgreSQL.after.find 269 270 public function doImapFind( &$uri , &$result , &$criteria , $original ){ 270 271 $imap_uri = $uri;271 272 $imap_uri = $uri; 272 273 $imap_uri['service'] = 'Imap'; 273 274 $imap_criteria = $original['criteria']; -
branches/2.4/prototype/modules/mail/interceptors/LabelSecure.php
r5540 r6754 1 1 <?php 2 3 use prototype\api\Config as Config; 4 2 5 class LabelSecure { 3 6 -
branches/2.4/prototype/modules/mail/js/foldertree.js
r6635 r6754 233 233 // eventnsagens : SE O DROP VIER DE UMA ABA ABERTA 234 234 else if(folder_to_move == "border_tr"){ 235 var id_msg = border_id.split("_")[0]; 235 var id_msg = border_id.split("_")[0]; 236 236 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); 237 238 move_msgs2(folder, id_msg, border_id, folder_to, to_folder_title,true); 238 239 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 } 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 } 14 14 15 15 function updateCacheFollowupflag(msgNumber, msgFolder, op){ … … 265 265 updateCacheFollowupflag(selectedMessageIds, folders, true); 266 266 winElement.dialog("close"); 267 alarmFollowupflagged( );267 alarmFollowupflagged('followupflagAlarms'); 268 268 }); 269 269 winElement.find('.menu-configure-followupflag .save').button("option", "disabled", true); … … 342 342 DataLayer.commit(false, false, function(){ 343 343 winElement.dialog("close"); 344 alarmFollowupflagged( );344 alarmFollowupflagged('followupflagAlarms'); 345 345 }); 346 346 … … 485 485 486 486 /** 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) 488 492 */ 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 ]; 493 function 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 } 522 567 var i = 0; 568 // recupera e monta os dados para serem exibidos nas modais de alarmes 523 569 while (it = toIterate.pop()){ 524 570 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 527 635 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 541 637 var caption = (alarmInRange.length == 1) ? 542 638 get_lang(it.caption.singular): 543 639 get_lang(it.caption.plural, alarmInRange.length); 544 640 // monta o array de dados a ser passado para o template 545 641 var data = { 546 alarmInRange : alarmInRange,642 alarmInRange : messages_alarm, 547 643 caption: caption, 548 it : it 644 type: it.attrDeadline, 645 captions: it.caption 549 646 }; 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 550 658 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(); 551 702 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(); 574 705 } 575 706 } 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 576 725 } 726 577 727 $('#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); 579 733 }); 734 -
branches/2.4/prototype/modules/mail/js/label.js
r6653 r6754 127 127 var hasLabel = true; 128 128 $.each(data, function(index, value) { 129 130 hasLabel = typeof value == 'object' ? false : value;131 129 130 hasLabel = typeof value == 'object' ? false : value; 131 132 132 }); 133 133 … … 166 166 167 167 draw_tree_labels(); 168 var msgsReference = DataLayer.get('labeled', {filter: ['=', 'labelId', ''+labelEdited.id]}, true); 169 168 var msgsReference = DataLayer.get('labeled', {filter: ['=', 'labelId', ''+labelEdited.id]}, true); 169 updateMessageLabels(msgsReference); 170 170 171 171 /** … … 207 207 208 208 DataLayer.remove('label', id); 209 209 210 210 DataLayer.commit(false, false, function(data){ 211 211 $.contextMenu( 'destroy', ".table_box tbody tr"); 212 212 loadMenu(); 213 updateMessageLabels(msgsReference); 213 updateMessageLabels(msgsReference); 214 214 }); 215 215 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 <% 11 19 } 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 14 14 background: <%= (data.labels[i].backgroundColor) ? data.labels[i].backgroundColor : '#ffffff' %>; float:right;"></div> 15 15 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> 18 18 </li> 19 19 <%}%> -
branches/2.4/prototype/modules/mail/templates/label_listitem.ejs
r6723 r6754 5 5 <input type="hidden" value="<%= data.id%>" name="labelItemId" class="id-item-list" /> 6 6 <span class="text-list"><%= data.name %></span> 7 <div class="button close tiny" style="float: right" title="<%= get_lang("Delete")%>"></div> 8 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> 9 9 10 10 </li> -
branches/2.4/prototype/modules/mail/templates/new_message.ejs
r6220 r6754 61 61 </td> 62 62 <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> 64 67 </td> 65 68 </tr> … … 71 74 </td> 72 75 <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> 74 80 </td> 75 81 </tr> … … 81 87 </td> 82 88 <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> 84 93 </td> 85 94 </tr> … … 89 98 </td> 90 99 <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> 92 101 </td> 93 102 </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> 39 39 </div> -
branches/2.4/prototype/request.php
r6111 r6754 1 1 <?php 2 2 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']; 10 10 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; 15 15 16 16 $criteria = $filter ? $criteria ? -
branches/2.4/prototype/services/ImapServiceAdapter.php
r6719 r6754 42 42 include_once ROOTPATH."/../expressoMail1_2/inc/class.imap_functions.inc.php"; 43 43 44 use prototype\api\Config as Config; 45 44 46 /** 45 47 * … … 536 538 537 539 $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(); 548 549 549 550 } else if (isset($data['messageId'])) { … … 614 615 $mailService->addHeaderField('Disposition-Notification-To', Config::me('mail')); 615 616 617 $this->rfc2397ToEmbeddedAttachment($mailService , $body); 618 616 619 $isHTML = ( isset($data['type']) && $data['type'] == 'html' )? true : false; 617 620 … … 633 636 { 634 637 $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')); 636 639 } 637 640 else 638 641 $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 640 643 unset($att); 641 644 } … … 650 653 { 651 654 $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')); 653 656 } 654 657 else … … 783 786 public function deleteAll( $URI, $justthese = false, $criteria = false ) 784 787 { 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 793 796 /** 794 797 * TODO - implementar a deleção de todos os followupflaggeds conforme filtro -
branches/2.4/prototype/services/OpenLDAP.php
r5804 r6754 1 1 <?php 2 3 use prototype\api\Config as Config; 2 4 3 5 class OpenLDAP implements Service … … 13 15 if( !isset($criteria["limit"]) ) 14 16 $criteria["limit"] = $this->limit; 15 17 16 18 $sr = ldap_search( $this->con , $this->config['context'] , self::parseCriteria($criteria , $map) , self::parseJustthese($justthese, $map) , 0 , $criteria["limit"]); 17 19 if(!$sr) return false; … … 156 158 $as = array_shift( $filter ); 157 159 $op = self::parseOperator( $as ); 158 160 159 161 if( is_array($filter[0]) ) 160 162 { -
branches/2.4/prototype/services/PostgreSQL.php
r6299 r6754 40 40 */ 41 41 42 use prototype\api\Config as Config; 43 42 44 class PostgreSQL implements Service 43 45 { … … 87 89 $map = Config::get($uri['concept'], 'PostgreSQL.mapping'); 88 90 $criteria = ($criteria !== false) ? $this->parseCriteria ( $criteria , $map , ' WHERE '.$map['id'].' = \''.addslashes( $uri['id'] ).'\'') : ' WHERE '.$map['id'].' = \''.addslashes( $uri['id'] ).'\''; 91 89 92 return $this->execSql('UPDATE '.(Config::get($uri['concept'],'PostgreSQL.concept')).' '. self::parseUpdateData( $data ,$map).$criteria); 90 93 } … … 197 200 $val[] = '\''.addslashes($v).'\''; 198 201 } 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'; 201 203 } 202 204 … … 244 246 $query .= ' GROUP BY '.( is_array($criteria["group"]) ? implode(', ', $criteria["group"]) : $criteria["group"] ).' '; 245 247 } 246 248 247 249 if( isset($criteria["order"]) ) 248 250 { 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 251 258 if( isset($criteria["limit"]) ) 252 259 { … … 339 346 } 340 347 341 private static function parseOrder($order , &$map)348 private static function parseOrder($order , &$map, $orderDesc=false) 342 349 { 343 350 344 351 if($notArray = !is_array($order)) //Caso seja um full select pegar todas as keys 345 352 $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 } 346 365 347 366 $return = array(); … … 356 375 return ( $notArray ? $order[0] : implode(', ', $order) ); 357 376 } 377 358 378 } 359 379 -
branches/2.4/prototype/services/iCal.php
r6346 r6754 4 4 require_once ROOTPATH . '/plugins/icalcreator/iCalcreator.class.php'; 5 5 require_once ROOTPATH . '/modules/calendar/constants.php'; 6 7 use prototype\api\Config as Config; 6 8 7 9 //TODO:Timeout request -
branches/2.4/reports/setup/setup.inc.php
r5298 r6754 13 13 $setup_info['reports']['title'] = 'Expresso Reports'; 14 14 /* 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'; 16 16 $setup_info['reports']['app_order'] = 17; 17 17 $setup_info['reports']['tables'] = ''; … … 41 41 $setup_info['reports']['depends'][] = array( 42 42 'appname' => 'phpgwapi', 43 'versions' => Array('2.4 ')43 'versions' => Array('2.4.1') 44 44 ); 45 45 ?> -
branches/2.4/services/class.db.php
r5842 r6754 263 263 $query = 'select' 264 264 . ' G.oid,' 265 . ' G.id_group,' 265 266 . ' G.title,' 266 267 . ' G.short_name'; … … 288 289 $all_contacts[ $object[ 'oid' ] ]['title'] = $object['title']; 289 290 $all_contacts[ $object[ 'oid' ] ]['short_name'] = $object['short_name']; 291 $all_contacts[ $object[ 'oid' ] ]['id'] = $object[ 'id_group' ]; 290 292 } 291 293 return array_values($all_contacts); -
branches/2.4/setup/applications.php
r3620 r6754 402 402 function allow_remove( $app ) 403 403 { 404 $never_remove = array( 'phpgwapi', 'preferences' );404 $never_remove = array( 'phpgwapi', 'preferences' , 'rest' ); 405 405 406 406 return ( in_array( $app, $never_remove ) ) ? ' ' : '<input type="checkbox" name="remove[' . $app . ']">';
Note: See TracChangeset
for help on using the changeset viewer.