Changeset 8232
- Timestamp:
- 10/08/13 16:20:46 (11 years ago)
- Location:
- branches/2.5
- Files:
-
- 80 added
- 32 deleted
- 144 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/2.5/INSTALL/arquivos/expresso-cron
r7700 r8232 5 5 6 6 # Utilizado para verificar se ha algum alarme, por e-mail, do modulo ExpressoCalendar 7 #CENTOS*/1 * * * * apache php EXPRESSO_DIR/prototype/modules/calendar/alarms.php 8 #DEBIAN*/1 * * * * www-data php5 EXPRESSO_DIR/prototype/modules/calendar/alarms.php 7 #CENTOS*/1 * * * * apache php EXPRESSO_DIR/prototype/modules/calendar/alarms.php 1>& /dev/null 8 #DEBIAN*/1 * * * * www-data php5 EXPRESSO_DIR/prototype/modules/calendar/alarms.php 1>& /dev/null 9 9 10 10 # Utilizado para limpar a tabela, temporaria, que contem os e-mails (rascunhos) antes de … … 19 19 # Utilizado para limpar os arquivos de sessao do PHP 20 20 #*/31 * * * * root find /dev/shm -type f -name "sess_*" -cmin 240 -print0 | xargs -n 200 -r -0 rm 21 */31 * * * * root find /dev/shm -type f -name "sess_*" -cmin +240 -delete 21 22 22 23 # Utilizado para limpar os arquivos, eml, criados ao exportar mensagens 23 13 */4 * * * root find /tmp/ -iname "*.eml" -amin +60 -exec rm -f '{}' \; 24 #13 */4 * * * root find /tmp/ -iname "*.eml" -amin +60 -exec rm -f '{}' \; 25 13 */4 * * * root find /tmp/ -iname "*.eml" -cmin +60 -delete 24 26 25 27 # -
branches/2.5/INSTALL/arquivos/header.inc.php
r7503 r8232 131 131 $GLOBALS['phpgw_info']['server']['versions']['current_header'] = $setup_info['phpgwapi']['versions']['current_header']; 132 132 unset($setup_info); 133 $GLOBALS['phpgw_info']['server']['versions']['header'] = '2.5. 0';133 $GLOBALS['phpgw_info']['server']['versions']['header'] = '2.5.1'; 134 134 /* This is a fix for NT */ 135 135 if(!isset($GLOBALS['phpgw_info']['flags']['noapi']) || !$GLOBALS['phpgw_info']['flags']['noapi'] == True) -
branches/2.5/INSTALL/arquivos/scripts/http.sh
r7619 r8232 111 111 yum -y install httpd mod_ssl \ 112 112 php php-cli php-ldap php-pgsql php-imap php-mbstring php-gd php-xml \ 113 php-pecl-memcache graphviz-phpphp-pspell \113 php-pecl-memcache php-pspell \ 114 114 unzip zip memcached libmemcached \ 115 115 php-soap php-process # para o zpush 116 #graphviz-php \ # problema com o PHP-5.4 116 117 117 118 # para que o yuicompressor funcione … … 122 123 123 124 chkconfig httpd on 125 chkconfig memcached on 124 126 125 127 # Ativa o script do CRON para o RedHat e similares -
branches/2.5/INSTALL/debian/squeeze/etc/ldap/slapd.conf
r6710 r8232 5 5 # Global Directives: 6 6 sizelimit -1 7 timelimit -18 threads 27 #timelimit -1 8 #threads 2 9 9 10 10 # Schema and objectClass definitions -
branches/2.5/INSTALL/debian/squeeze/etc/postfix/main.cf
r7278 r8232 1 1 # Configuracoes para o Expresso 2 myorigin = DOMAIN 3 myhostname = DOMAIN 2 mydomain = DOMAIN 3 myorigin = $mydomain 4 myhostname = $mydomain 4 5 biff = no 5 6 … … 8 9 9 10 # A lista de dominios que esta maquina considera seu destino final. 10 mydestination = $my hostname, localhost.$mydomain, DOMAIN11 mydestination = $mydomain, $myhostname, expresso.$mydomain 11 12 12 13 recipient_delimiter = + -
branches/2.5/INSTALL/expressoInstall.sh
r7619 r8232 35 35 # Variaveis globais 36 36 ARQS="arquivos" 37 VERSAO="2.5. 0"37 VERSAO="2.5.1" 38 38 # Inclusao dos scripts de apoio 39 39 . $ARQS/scripts/aux.sh -
branches/2.5/INSTALL/rhel/6/etc/cyrus.conf
r7699 r8232 7 7 # this is only necessary if using idled for IMAP IDLE 8 8 idled cmd="idled" 9 10 # this is recommended if using duplicate delivery suppression11 delprune cmd="/usr/lib/cyrus-imapd/ctl_deliver -E 3"12 9 } 13 10 … … 37 34 checkpoint cmd="ctl_cyrusdb -c" period=30 38 35 39 # this is only necessary if using duplicate delivery suppression40 delprune cmd="/usr/lib/cyrus-imapd/ctl_deliver -E 3" at=040141 42 36 # this is only necessary if using duplicate delivery suppression, 43 37 # Sieve or NNTP … … 52 46 53 47 # SQUATTER indexa as caixas postais, a cada 120 min, para otimizar a pesquisa 54 squatter_i cmd="/bin/nice -n 19 /usr/lib/cyrus-imapd/squatter -s -i -r " period=12048 squatter_i cmd="/bin/nice -n 19 /usr/lib/cyrus-imapd/squatter -s -i -r -v" period=240 55 49 } -
branches/2.5/INSTALL/rhel/6/etc/imapd.conf
r5802 r8232 9 9 sasl_mech_list: LOGIN PLAIN 10 10 allowplaintext: yes 11 auxprop_plugin: ldapdb12 11 13 12 tls_cert_file: /etc/pki/cyrus-imapd/cyrus-imapd.pem -
branches/2.5/INSTALL/rhel/6/etc/openldap/slapd.conf
r6761 r8232 7 7 # Global Directives: 8 8 sizelimit -1 9 timelimit -110 threads 29 #timelimit -1 10 #threads 2 11 11 12 12 # Schema and objectClass definitions -
branches/2.5/INSTALL/rhel/6/etc/postfix/main.cf
r7278 r8232 1 1 # Configuracoes para o Expresso 2 myorigin = DOMAIN 3 myhostname = DOMAIN 2 mydomain = DOMAIN 3 myorigin = $mydomain 4 myhostname = $mydomain 4 5 biff = no 5 6 … … 8 9 9 10 # A lista de dominios que esta maquina considera seu destino final. 10 mydestination = $my hostname, localhost.$mydomain, DOMAIN11 mydestination = $mydomain, $myhostname, expresso.$mydomain 11 12 12 13 recipient_delimiter = + -
branches/2.5/INSTALL/rhel/6/var/lib/pgsql/data/postgresql.conf
r5797 r8232 484 484 #backslash_quote = safe_encoding # on, off, or safe_encoding 485 485 #default_with_oids = off 486 # Necessario para o Expresso487 standard_conforming_strings = off488 #bytea_output = 'escape'489 # Necessario para o Expresso490 486 #escape_string_warning = on 491 487 #regex_flavor = advanced # advanced, extended, or basic … … 494 490 #synchronize_seqscans = on 495 491 492 # Necessario para o Expresso 493 standard_conforming_strings = off 494 bytea_output = 'escape' 495 496 496 # - Other Platforms and Clients - 497 497 -
branches/2.5/admin/inc/class.uiconfig.inc.php
r8176 r8232 59 59 $t = CreateObject('phpgwapi.Template',$GLOBALS['phpgw']->common->get_tpl_dir($appname)); 60 60 $t->set_unknowns('keep'); 61 $template_file = $config_appname == "migra" ? 'migra.tpl' : 'config.tpl'; 62 $t->set_file(array('config' => $template_file)); 61 $template_file = $config_appname == "migra" ? 'migra.tpl' : 'config.tpl'; 62 $t->set_file(array('config' => $template_file)); 63 63 $t->set_block('config','header','header'); 64 64 $t->set_block('config','body','body'); … … 73 73 } 74 74 75 if($appname === "expressoCalendar"){ 76 77 if($config_appname == 'expressoCalendar' ) 78 { 79 $t->set_var('action_url',$GLOBALS['phpgw']->link('/index.php','menuaction=admin.uiconfig.index&appname=' . $appname)); 80 81 }; 82 83 if($_POST['newsettings']['expressoCalendar_autoImportCalendars'] == 'true') 84 { 85 $db = $GLOBALS['phpgw']->db; 86 $calendars = array(); 87 $db->query('SELECT calendar_signature.user_uidnumber as "user",calendar.id as "calendar" FROM calendar,calendar_signature WHERE calendar.id = calendar_signature.calendar_id AND calendar.type = 0 AND calendar_signature.is_owner = 1 AND (SELECT id from module_preference WHERE user_uidnumber = calendar_signature.user_uidnumber AND module_preference.module = \'expressoCalendar\' AND module_preference.name = \'dafaultImportCalendar\' ) IS NULL'); 88 while( $db->next_record() ) 89 { 90 $calendars[] = $db->row(); 91 } 92 93 foreach($calendars as $v) 94 { 95 $db->query('INSERT INTO module_preference ("user_uidnumber","value","name","module") VALUES ( \''.$v['user'].'\' , \''.$v['calendar'].'\',\'dafaultImportCalendar\' , \'expressoCalendar\')'); 96 } 97 } 98 75 if($appname === "expressoCalendar"){ 76 77 if($config_appname == 'expressoCalendar' ) 78 { 79 $t->set_var('action_url',$GLOBALS['phpgw']->link('/index.php','menuaction=admin.uiconfig.index&appname=' . $appname)); 80 81 }; 82 83 if($_POST['newsettings']['expressoCalendar_autoImportCalendars'] == 'true') 84 { 85 $db = $GLOBALS['phpgw']->db; 86 $calendars = array(); 87 $db->query('SELECT calendar_signature.user_uidnumber as "user",calendar.id as "calendar" FROM calendar,calendar_signature WHERE calendar.id = calendar_signature.calendar_id AND calendar.type = 0 AND calendar_signature.is_owner = 1 AND (SELECT id from module_preference WHERE user_uidnumber = calendar_signature.user_uidnumber AND module_preference.module = \'expressoCalendar\' AND module_preference.name = \'dafaultImportCalendar\' ) IS NULL'); 88 while( $db->next_record() ) 89 { 90 $calendars[] = $db->row(); 91 } 92 93 foreach($calendars as $v) 94 { 95 $db->query('INSERT INTO module_preference ("user_uidnumber","value","name","module") VALUES ( \''.$v['user'].'\' , \''.$v['calendar'].'\',\'dafaultImportCalendar\' , \'expressoCalendar\')'); 96 } 97 } 98 99 99 if (isset($_POST['migration']) && ($_POST['migration'] == "true")){ 100 100 … … 104 104 $migratrion->calendar(); 105 105 } 106 106 107 107 } 108 108 -
branches/2.5/admin/inc/hook_admin.inc.php
r5804 r8232 85 85 $file['VoIP settings'] = $GLOBALS['phpgw']->link('/index.php','menuaction=admin.uivoip.edit_conf'); 86 86 } 87 88 if (! $GLOBALS['phpgw']->acl->check('site_config_access',1,'admin')) 89 { 90 $file['Calendar settings'] = $GLOBALS['phpgw']->link('/index.php','menuaction=admin.uicalendar.edit_conf'); 91 } 87 92 88 93 89 /* Do not modify below this line */ -
branches/2.5/admin/setup/setup.inc.php
r7516 r8232 13 13 $setup_info['admin']['name'] = 'admin'; 14 14 $setup_info['admin']['title'] = 'Admin'; 15 $setup_info['admin']['version'] = '2.5. 0';15 $setup_info['admin']['version'] = '2.5.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.5. 0')50 'versions' => Array('2.5.1.1') 51 51 ); 52 52 ?> -
branches/2.5/calendar/setup/setup.inc.php
r7516 r8232 12 12 13 13 $setup_info['calendar']['name'] = 'calendar'; 14 $setup_info['calendar']['version'] = '2.5. 0';14 $setup_info['calendar']['version'] = '2.5.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.5. 0')54 'versions' => Array('2.5.1.0') 55 55 ); -
branches/2.5/calendar/setup/tables_update.inc.php
r7516 r8232 154 154 return $GLOBALS['setup_info']['calendar']['currentver']; 155 155 } 156 $test[] = '2.5.0'; 157 function calendar_upgrade2_5_0() 158 { 159 $GLOBALS['setup_info']['calendar']['currentver'] = '2.5.1'; 160 return $GLOBALS['setup_info']['calendar']['currentver']; 161 } 156 162 157 163 -
branches/2.5/contactcenter/js/cc.js
r7497 r8232 1250 1250 states.disabled = false; 1251 1251 var i = 1; 1252 /* 1252 1253 for (var j in data['data']) 1253 1254 { … … 1255 1256 if(i == 1) data['data'] = data['data'].sort(); 1256 1257 i++; 1257 } 1258 1258 }*/ 1259 jQuery.each(data['data'],function(index,value){ 1260 if (value != undefined){ 1261 states.options[i] = new Option(value, index); 1262 if(i == 1) data['data'] = data['data'].sort(); 1263 i++; 1264 } 1265 }); 1259 1266 states.disabled = false; 1260 1267 states.selectedIndex = 0; … … 1366 1373 cities.disabled = false; 1367 1374 var i = 1; 1375 /* 1368 1376 for (var j in data['data']) 1369 1377 { 1370 1378 cities.options[i] = new Option(data['data'][j], j); 1371 1379 i++; 1372 } 1373 1380 }*/ 1381 jQuery.each(data['data'],function(index,value){ 1382 if (value != undefined){ 1383 cities.options[i] = new Option(value,index); 1384 i++; 1385 } 1386 }); 1374 1387 cities.disabled = false; 1375 1388 cities.selectedIndex = 0; -
branches/2.5/contactcenter/setup/default_records.inc.php
r2 r8232 19 19 $oProc->query("insert into phpgw_cc_typeof_ct_addrs (id_typeof_contact_address,contact_address_type_name) values(1,'Comercial')"); 20 20 $oProc->query("insert into phpgw_cc_typeof_ct_addrs (id_typeof_contact_address,contact_address_type_name) values(2,'Residencial')"); 21 21 $oProc->query("ALTER TABLE phpgw_cc_groups SET WITH OIDS;"); 22 22 // Populate brazilian database. 23 23 include("states_pt-br.inc.php"); -
branches/2.5/contactcenter/setup/setup.inc.php
r7516 r8232 17 17 $setup_info['contactcenter']['name'] = 'contactcenter'; 18 18 $setup_info['contactcenter']['title'] = 'ContactCenter'; 19 $setup_info['contactcenter']['version'] = '2.5. 0';19 $setup_info['contactcenter']['version'] = '2.5.1'; 20 20 $setup_info['contactcenter']['app_order'] = 4; 21 21 $setup_info['contactcenter']['enable'] = 1; … … 77 77 $setup_info['contactcenter']['depends'][] = array( 78 78 'appname' => 'phpgwapi', 79 'versions' => Array('2.5. 0')79 'versions' => Array('2.5.1.1') 80 80 ); 81 81 ?> -
branches/2.5/contactcenter/setup/tables_update.inc.php
r7516 r8232 100 100 } 101 101 $test[] = '2.4.2'; 102 function contactcenter_upgrade2_4_2() { 103 $GLOBALS['setup_info']['contactcenter']['currentver'] = '2.5.0'; 104 return $GLOBALS['setup_info']['contactcenter']['currentver']; 105 } 102 function contactcenter_upgrade2_4_2() { 103 $GLOBALS['setup_info']['contactcenter']['currentver'] = '2.5.0'; 104 return $GLOBALS['setup_info']['contactcenter']['currentver']; 105 } 106 107 $test[] = '2.5.0'; 108 function contactcenter_upgrade2_5_0() { 109 $GLOBALS['setup_info']['contactcenter']['currentver'] = '2.5.1'; 110 return $GLOBALS['setup_info']['contactcenter']['currentver']; 111 } 106 112 ?> -
branches/2.5/emailadmin/inc/class.ui.inc.php
r7673 r8232 77 77 print $this->t->get('out','main'); 78 78 } 79 79 80 function countProfiles(){ 81 $return = $this->boemailadmin->getProfileList(); 82 (is_array($return) && count($return) > 0) ? $return = count($return) : $return = 0; 83 return $return; 84 } 85 86 function addDefaultProfile() 87 { 88 $emailServer = $_SESSION['phpgw_info']['expressomail']['email_server']; 89 $globalSettings = array( 90 "profileID" => "", 91 "description" => "Expresso", 92 "defaultDomain" => $emailServer['defaultDomain'], 93 "organisationName" => $emailServer['organisationName'], 94 "userDefinedAccounts" => "0" 95 ); 96 97 $smtpSettings = array( 98 "smtpServer" => "127.0.0.1", 99 "smtpPort" => "25", 100 "smtpAuth" => "", 101 "smtpType" => "2", 102 "smtpLDAPServer" => "127.0.0.1", 103 "smtpLDAPAdminDN" => $emailServer['smtpLDAPAdminDN'], 104 "smtpLDAPAdminPW" => $emailServer['smtpLDAPAdminPW'], 105 "smtpLDAPBaseDN" => $emailServer['smtpLDAPBaseDN]'], 106 "smtpLDAPUseDefault" => "yes" 107 ); 108 109 $imapSettings = array( 110 'imapServer' => "127.0.0.1", 111 'imapPort' => "143", 112 'imapDelimiter' => "/", 113 'imapType' => "3", 114 'imapLoginType' => "standard", 115 'imapTLSEncryption' => "1", 116 'imapTLSAuthentication' => "", 117 'imapoldcclient' => "", 118 'imapEnableCyrusAdmin' => "yes", 119 'imapAdminUsername' => "expresso-admin", 120 'imapAdminPW' => $emailServer['imapAdminPW'], 121 'imapEnableSieve' => "yes", 122 'imapSieveServer' => "127.0.0.1", 123 'imapSievePort' => "2000", 124 'imapCreateSpamFolder' => "yes", 125 'imapCyrusUserPostSpam' => "", 126 'imapDefaultTrashFolder' => "Trash", 127 'imapDefaultSentFolder' => "Sent", 128 'imapDefaultDraftsFolder' => "Drafts", 129 'imapDefaultSpamFolder' => "Spam" 130 ); 131 132 $this->boemailadmin->saveProfile($globalSettings, $smtpSettings, $imapSettings); 133 } 134 80 135 function css() 81 136 { -
branches/2.5/emailadmin/setup/setup.inc.php
r7516 r8232 14 14 $setup_info['emailadmin']['name'] = 'emailadmin'; 15 15 $setup_info['emailadmin']['title'] = 'EMailAdmin'; 16 $setup_info['emailadmin']['version'] = '2.5. 0';16 $setup_info['emailadmin']['version'] = '2.5.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.5. 0')42 'versions' => Array('2.5.1.1') 43 43 ); 44 44 -
branches/2.5/emailadmin/setup/tables_update.inc.php
r7516 r8232 142 142 return $GLOBALS['setup_info']['emailadmin']['currentver']; 143 143 } 144 $test[] = '2.4.2'; 145 function emailadmin_upgrade2_4_2() 146 { 147 $GLOBALS['setup_info']['emailadmin']['currentver'] = '2.5.0'; 148 return $GLOBALS['setup_info']['emailadmin']['currentver']; 149 } 144 $test[] = '2.4.2'; 145 function emailadmin_upgrade2_4_2() 146 { 147 $GLOBALS['setup_info']['emailadmin']['currentver'] = '2.5.0'; 148 return $GLOBALS['setup_info']['emailadmin']['currentver']; 149 } 150 151 $test[] = '2.5.0'; 152 function emailadmin_upgrade2_5_0() 153 { 154 $GLOBALS['setup_info']['emailadmin']['currentver'] = '2.5.1'; 155 return $GLOBALS['setup_info']['emailadmin']['currentver']; 156 } 150 157 151 158 ?> -
branches/2.5/expressoAdmin1_2/inc/class.db_functions.inc.php
r7769 r8232 539 539 { 540 540 // AGENDA 541 $this->db->query('SELECT cal _id FROM phpgw_cal WHERE owner ='.$user_info['uidnumber']);541 $this->db->query('SELECT calendar_id FROM calendar_signature WHERE user_uidnumber ='.$user_info['uidnumber'] . ' AND is_owner = 1' ); 542 542 while($this->db->next_record()) 543 543 { 544 544 $ids[] = $this->db->row(); 545 545 } 546 546 547 if (count($ids)) 547 548 { 548 549 foreach($ids as $i => $id) 549 { 550 $this->db->query('DELETE FROM phpgw_cal WHERE cal_id='.$id['cal_id']); 551 $this->db->query('DELETE FROM phpgw_cal_user WHERE cal_id='.$id['cal_id']); 552 $this->db->query('DELETE FROM phpgw_cal_repeats WHERE cal_id='.$id['cal_id']); 553 $this->db->query('DELETE FROM phpgw_cal_extra WHERE cal_id='.$id['cal_id']); 554 } 550 $this->db->query('DELETE FROM calendar WHERE id = '.$id['calendar_id']); 555 551 } 556 552 -
branches/2.5/expressoAdmin1_2/inc/class.imap_functions.inc.php
r7769 r8232 278 278 function getaclfrombox($params) 279 279 { 280 $boxacl = $params['uid'];281 282 $return = array(); 280 $boxacl = imap_utf7_encode($params['uid']); 281 282 $return = array(); 283 283 284 284 $mbox_acl = imap_getacl($this->imap, "user" . $this->imapDelimiter . $boxacl); -
branches/2.5/expressoAdmin1_2/inc/class.ldap_functions.inc.php
r8179 r8232 138 138 } 139 139 140 if (empty($params['desc'])) 141 { 142 $result['status'] = false; 143 $result['msg'] = $this->functions->lang('DESCRIPTION field is empty') . '.'; 144 return $result; 145 } 146 140 147 $uid = 'institutional_account_' . $params['mail']; 141 148 $dn = "uid=$uid," . $params['context']; -
branches/2.5/expressoAdmin1_2/inc/class.uishared_accounts.inc.php
r5907 r8232 107 107 'disabled_empty_inbox' => $this->functions->check_acl($account_lid,'empty_shared_accounts_inbox') ? '' : 'disabled', 108 108 'display_quota_used' => 'none', 109 'aclExpressoCalendar' => (isset($config['defaultCalendar']) && ($config['defaultCalendar'] == 'expressoCalendar')) ? '' : 'none',110 'aclCalendar' => (isset($config['defaultCalendar']) && ($config['defaultCalendar'] == 'calendar')) ? '' :'none',111 'calendarName' => (isset($config['defaultCalendar']) && ($config['defaultCalendar'] == 'calendar')) ? 'Calendar' :'ExpressoCalendar',109 'aclExpressoCalendar' => '' , 110 'aclCalendar' => 'none', 111 'calendarName' => 'ExpressoCalendar', 112 112 'sharedAccountsLocation' => isset($davicalConf['sharedAccountsLocation']) ? $davicalConf['sharedAccountsLocation'] : '' 113 113 ); -
branches/2.5/expressoAdmin1_2/index.php
r6444 r8232 9 9 * option) any later version. * 10 10 \*************************************************************************************/ 11 11 $GLOBALS['phpgw_info'] = array(); 12 $GLOBALS['phpgw_info']['flags']['currentapp'] = 'expressoAdmin1_2'; 13 include('../header.inc.php'); 14 12 15 echo ' 13 16 <link rel="Stylesheet" type="text/css" href="../prototype/plugins/jquery/jquery-ui.css" /> … … 44 47 '; 45 48 46 49 $debug = false; 47 50 $time_start = microtime(true); 48 49 $GLOBALS['phpgw_info'] = array();50 $GLOBALS['phpgw_info']['flags']['currentapp'] = 'expressoAdmin1_2';51 include('../header.inc.php');52 53 51 $c = CreateObject('phpgwapi.config','expressoAdmin1_2'); 54 52 $c->read_repository(); -
branches/2.5/expressoAdmin1_2/js/jscode/shared_accounts.js
r8179 r8232 97 97 { 98 98 combo_org_available_users = Element('ea_combo_org_available_users'); 99 context = context.toLowerCase(); 99 context = context.toLowerCase(); 100 100 for (i=0; i<combo_org_available_users.length; i++) 101 101 { … … 300 300 301 301 var combo_org = Element('ea_combo_org'); 302 var context_to_select = data.user_context.toLowerCase(); 302 var context_to_select = data.user_context.toLowerCase(); 303 303 for (i=0; i<combo_org.length; i++) 304 304 { … … 374 374 375 375 for (var i=0; i < calendarPermission.length; i++){ 376 sharemailbox.ownersExpressoCalendarAcl[ calendarPermission[i].user.uid ] = calendarPermission[i].aclValues; 377 sharemailbox.currentPemissions[calendarPermission[i].user.uid] = calendarPermission[i].id; 378 // sharemailbox.ownersExpressoCalendarAcl.length = sharemailbox.currentPemissions.length = i; 379 380 if(!current[calendarPermission[i].user.uid ]){ 376 if (calendarPermission[i].user.uid ){ 377 sharemailbox.ownersExpressoCalendarAcl[ calendarPermission[i].user.uid ] = calendarPermission[i].aclValues; 378 sharemailbox.currentPemissions[calendarPermission[i].user.uid] = calendarPermission[i].id; 379 // sharemailbox.ownersExpressoCalendarAcl.length = sharemailbox.currentPemissions.length = i; 380 } 381 if(calendarPermission[i].user.uid && !current[calendarPermission[i].user.uid ]){ 381 382 Element('ea_select_owners').innerHTML = Element('ea_select_owners').innerHTML+'<option value='+ calendarPermission[i].user.uid +'>'+ calendarPermission[i].user.name +'</option>'; 382 383 Element('ea_select_owners').outerHTML = Element('ea_select_owners').outerHTML; … … 507 508 508 509 $.each(sharemailbox.ownersExpressoCalendarAcl, function(user, acl) { 509 510 var usuario = DataLayer.get('user', { 511 filter: ['=','uid',user], 512 criteria: { 513 notExternal: true 510 if (user != "undefined"){ 511 var usuario = DataLayer.get('user', { 512 filter: ['=','uid',user], 513 criteria: { 514 notExternal: true 515 } 516 }); 517 518 if($.isArray(usuario)) 519 usuario = usuario[0]; 520 521 DataLayer.put('calendarToPermission', DataLayer.merge({ 522 user: usuario.id, 523 type: '0', 524 acl: acl, 525 calendar: calendar 526 }, !!sharemailbox.currentPemissions[usuario.uid] ? { 527 id: sharemailbox.currentPemissions[usuario.uid] 528 } : {})); 529 530 if(!!!sharemailbox.currentPemissions[usuario.uid]) 531 DataLayer.put('calendarSignature', { 532 user: usuario.id, 533 calendar: calendar, 534 isOwner: '0', 535 fontColor: '000000', 536 backgroundColor: 'f1efac', 537 borderColor: 'eddb21' 538 }); 514 539 } 515 });516 517 if($.isArray(usuario))518 usuario = usuario[0];519 520 DataLayer.put('calendarToPermission', DataLayer.merge({521 user: usuario.id,522 type: '0',523 acl: acl,524 calendar: calendar525 }, !!sharemailbox.currentPemissions[usuario.uid] ? {526 id: sharemailbox.currentPemissions[usuario.uid]527 } : {}));528 529 if(!!!sharemailbox.currentPemissions[usuario.uid])530 DataLayer.put('calendarSignature', {531 user: usuario.id,532 calendar: calendar,533 isOwner: '0',534 fontColor: '000000',535 backgroundColor: 'f1efac',536 borderColor: 'eddb21'537 });538 539 540 }) 540 541 DataLayer.commit(); … … 622 623 cShareMailbox.prototype.getaclfromuser = function(user) 623 624 { 624 625 625 Element('em_input_readAcl').checked = false; 626 626 Element('em_input_deleteAcl').checked = false; … … 642 642 Element('em_input_deleteCalendar').disabled = true; 643 643 Element('em_input_restrictCalendar').disabled = true; 644 645 644 645 if (!this.ownersExpressoCalendarAcl[user] && !this.ownersCalendarAcl[user]){ 646 DataLayer.dispatchPath = "prototype/"; 647 var sharedUser = DataLayer.get('user', { 648 filter: ['=','mail',$('#mail').val()] 649 }); 650 for(var j = 0; j < sharedUser.length; j++) 651 if(sharedUser[j].phpgwAccountType == 's'){ 652 sharedUser = sharedUser[j]; 653 break; 654 } 655 656 var signature = DataLayer.get('calendarSignature', { 657 filter: ['=','user', sharedUser.id] 658 }); 659 660 if(!signature) 661 return; 662 663 var usuario = DataLayer.get('user', { 664 filter: ['=','uid',user], 665 criteria: { 666 notExternal: true 667 } 668 }); 669 var calendarPermission = DataLayer.get('calendarToPermission', { 670 filter: ['AND', ['=','calendar',signature[0].calendar], ['=','user',usuario[0].id] ] 671 }); 672 this.ownersExpressoCalendarAcl[user] = calendarPermission[0] ? calendarPermission[0].acl : ""; 673 } 646 674 if(this.ownersExpressoCalendarAcl[user]) 647 675 { -
branches/2.5/expressoAdmin1_2/setup/setup.inc.php
r7516 r8232 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.5. 0';15 $setup_info['expressoAdmin1_2']['version'] = '2.5.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.5. 0')39 'versions' => Array('2.5.1.1') 40 40 ); 41 41 ?> -
branches/2.5/expressoAdmin1_2/setup/tables_update.inc.php
r7655 r8232 339 339 } 340 340 $test[] = '2.4.2'; 341 function expressoAdmin1_2_upgrade2_4_2() 342 { 343 $GLOBALS['setup_info']['expressoAdmin1_2']['currentver'] = '2.5.0'; 344 return $GLOBALS['setup_info']['expressoAdmin1_2']['currentver']; 345 } 341 function expressoAdmin1_2_upgrade2_4_2() 342 { 343 $GLOBALS['setup_info']['expressoAdmin1_2']['currentver'] = '2.5.0'; 344 return $GLOBALS['setup_info']['expressoAdmin1_2']['currentver']; 345 } 346 347 $test[] = '2.5.0'; 348 function expressoAdmin1_2_upgrade2_5_0() 349 { 350 $GLOBALS['setup_info']['expressoAdmin1_2']['currentver'] = '2.5.1'; 351 return $GLOBALS['setup_info']['expressoAdmin1_2']['currentver']; 352 } 346 353 ?> -
branches/2.5/expressoCalendar/inc/hook_admin.inc.php
r7982 r8232 13 13 $title = $appname; 14 14 $file = Array( 15 'ExpressoCalendar migration' => $GLOBALS['phpgw']->link('/index.php','menuaction=admin.uiconfig.index&appname=' . $appname. '&config=migra'), 16 'Global Settings' => $GLOBALS['phpgw']->link('/index.php','menuaction=admin.uiconfig.index&appname=' . $appname) 15 'ExpressoCalendar migration' => $GLOBALS['phpgw']->link('/index.php','menuaction=admin.uiconfig.index&appname=' . $appname. '&config=migra'), 16 'Global Settings' => $GLOBALS['phpgw']->link('/index.php','menuaction=admin.uiconfig.index&appname=' . $appname) 17 17 ); 18 18 //Do not modify below this line -
branches/2.5/expressoCalendar/setup/tables_current.inc.php
r7938 r8232 234 234 'uidnumber' => array( 'type' => 'int', 'precision' => '8', 'nullable' => False), 235 235 'object_id' => array( 'type' => 'int', 'precision' => '8', 'nullable' => False), 236 'owner' => array( 'type' => 'int', 'precision' => '8', 'nullable' => False), 236 'owner' => array( 'type' => 'int', 'precision' => '8', 'nullable' => False), 237 237 'object_type' => array( 'type' => 'int', 'precision' => '8', 'nullable' => False), 238 238 'permission' => array( 'type' => 'varchar','precision' => '50', 'nullable' => False) … … 313 313 'background_color' => array( 'type' => 'varchar','precision' => '6', 'nullable' => True), 314 314 'border_color' => array( 'type' => 'varchar','precision' => '6', 'nullable' => True), 315 'type' => array('type' => 'int', 'precision' => '2' ,'nullable' => false, 'default' => 0), 316 'hidden' => array('type' => 'int', 'precision' => '2' ,'nullable' => false, 'default' => 0) 315 'type' => array('type' => 'int', 'precision' => '2' ,'nullable' => false, 'default' => 0), 316 'hidden' => array('type' => 'int', 'precision' => '2' ,'nullable' => false, 'default' => 0) 317 317 ), 318 318 'pk' => array('id'), -
branches/2.5/expressoCalendar/setup/tables_update.inc.php
r7938 r8232 234 234 return $GLOBALS['setup_info']['expressoCalendar']['currentver']; 235 235 }; 236 237 $test[] = '1.011'; 238 function expressoCalendar_upgrade1_011() { 239 $oProc = $GLOBALS['phpgw_setup']->oProc; 240 241 $oProc->query("ALTER TABLE calendar_signature ADD COLUMN hidden integer"); 242 243 $GLOBALS['setup_info']['expressoCalendar']['currentver'] = '1.012'; 244 return $GLOBALS['setup_info']['expressoCalendar']['currentver']; 245 }; 236 237 $test[] = '1.011'; 238 function expressoCalendar_upgrade1_011() { 239 $oProc = $GLOBALS['phpgw_setup']->oProc; 240 241 $oProc->query("ALTER TABLE calendar_signature ADD COLUMN hidden integer"); 242 243 $GLOBALS['setup_info']['expressoCalendar']['currentver'] = '1.012'; 244 return $GLOBALS['setup_info']['expressoCalendar']['currentver']; 245 }; 246 246 247 247 ?> -
branches/2.5/expressoCalendar/templates/default/config.tpl
r7982 r8232 1 1 <!-- BEGIN header --> 2 <form method="POST" action="{action_url}"> 3 <table border="0" align="center"> 4 <!-- END header --> 5 <!-- BEGIN body --> 6 <tr class="th"> 7 <td colspan="2" align="center"><b>{lang_expressoCalendar_Setup}</b></td> 8 </tr> 9 10 <tr><td></td></tr> 11 12 <tr class="row_off"> 13 <td>{lang_Auto_import_calendars_to_receive_an_internal_event}:</td> 14 <td> 15 <select name="newsettings[expressoCalendar_autoImportCalendars]"> 16 <option value="false" {selected_expressoCalendar_autoImportCalendars_false}>{lang_no}</option> 17 <option value="true" {selected_expressoCalendar_autoImportCalendars_true}>{lang_yes}</option> 18 </select> 19 </td> 20 </tr> 21 <!-- END body --> 22 <!-- BEGIN footer --> 23 <tr class="th"> 24 <td colspan="2"> </td> 25 </tr> 26 <tr> 27 <td colspan="2" align="center"> 28 <input type="submit" name="submit" value="{lang_submit}"> 29 <input type="submit" name="cancel" value="{lang_cancel}"> 30 </td> 31 </tr> 32 </table> 2 <form method="POST" action="{action_url}"> 3 <table border="0" align="center"> 4 <!-- END header --> 5 <!-- BEGIN body --> 6 <tr class="th"> 7 <td colspan="2" align="center"><b>{lang_expressoCalendar_Setup}</b></td> 8 </tr> 9 10 <tr><td></td></tr> 11 12 <tr class="row_off"> 13 <td>{lang_Auto_import_calendars_to_receive_an_internal_event}:</td> 14 <td> 15 <select name="newsettings[expressoCalendar_autoImportCalendars]"> 16 <option value="false" {selected_expressoCalendar_autoImportCalendars_false}>{lang_no}</option> 17 <option value="true" {selected_expressoCalendar_autoImportCalendars_true}>{lang_yes}</option> 18 </select> 19 </td> 20 </tr> 21 <!-- END body --> 22 <!-- BEGIN footer --> 23 <tr class="th"> 24 <td colspan="2"> </td> 25 </tr> 26 <tr> 27 <td colspan="2" align="center"> 28 <input type="submit" name="submit" value="{lang_submit}"> 29 <input type="submit" name="cancel" value="{lang_cancel}"> 30 </td> 31 </tr> 32 </table> 33 33 </form> 34 34 <!-- END footer --> -
branches/2.5/expressoMail1_2/assetic.php
r7919 r8232 47 47 new FileAsset('../prototype/plugins/watermark/jquery.watermarkinput.js'), 48 48 new FileAsset('../prototype/plugins/fileupload/jquery.iframe-transport.js'), 49 new FileAsset('../prototype/plugins/qtip/jquery.qtip-1.0.0-rc3.min.js'), 49 new FileAsset('../prototype/plugins/qtip/jquery.qtip-1.0.0-rc3.min.js'), 50 50 new FileAsset('../prototype/plugins/treeview/jquery.treeview.js'), 51 51 new FileAsset('../prototype/plugins/treeview/lib/jquery.cookie.js'), -
branches/2.5/expressoMail1_2/inc/class.db_functions.inc.php
r7673 r8232 147 147 return $stringDropDownContacts; 148 148 } 149 150 function getContactsByGroupAlias($alias)151 {149 function getContactsByGroupAlias($alias) 150 { 151 /* 152 152 list($alias,$uid) = explode("::",$alias); 153 153 154 $cc_related_ids = $_SESSION['phpgw_info']['expressomail']['user']['cc_related_ids']; 154 155 // Explode personal group, If exists related ids (the user has permission to send email). 156 155 157 if(is_array($cc_related_ids) && $uid){ 156 $owner = array_search($uid,$cc_related_ids); 157 } 158 158 $owner = array_search($uid,$cc_related_ids); 159 }*/ 160 $groups = $this->get_cc_groups(); 161 if ($groups){ 162 $groups = explode(",", $groups); 163 for($ii=0; $ii < count($groups); ++$ii) { 164 $tmp = preg_split("/;|\::/",$groups[$ii]); 165 $relatedGroups[$ii] = array("name" => $tmp[0],"alias" => $tmp[1],"owner" => $tmp[2]); 166 } 167 foreach ($relatedGroups as $key => $value) { 168 if ($value["alias"] == $alias) 169 $owner = $value["owner"]; 170 } 171 if ($owner){ 172 include_once("class.ldap_functions.inc.php"); 173 $ldap = new ldap_functions(); 174 $owner = $ldap->uid2uidnumber($owner); 175 } 176 } 177 159 178 $query = "select C.id_connection, A.names_ordered, C.connection_value from phpgw_cc_contact A, ". 160 179 "phpgw_cc_contact_conns B, phpgw_cc_connections C,phpgw_cc_contact_grps D,phpgw_cc_groups E where ". -
branches/2.5/expressoMail1_2/inc/class.exporteml.inc.php
r7673 r8232 150 150 } 151 151 152 function export_all_byLocalFolder($params){153 $error = false;154 155 if(empty($params['messages'])){156 $file["empty_folder"] = true;157 } else {158 foreach($params['messages'] as $eachMsg){159 $header = "";160 $body = "";161 $tempDir = $this->tempDir;162 163 $this->get_header_byLocalFolder($eachMsg, $header);164 $this->get_body_byLocalFolder($eachMsg, $body);165 $sEMLData = $this->parseEml($header, $body);166 $fileName = $this->createFileEml_by_localFolder($sEMLData, $tempDir,$eachMsg['msg_number']);167 168 if(!$fileName){169 $error = true;170 break;171 } else172 $fileNames .= "\"".$fileName."\" ";173 }174 175 $nameFileZip = 'False';176 if($fileNames && !$error) {177 $nameFileZip = $this->createFileZip($fileNames, $tempDir);178 ($nameFileZip) ? ($file = $tempDir.'/'.$nameFileZip) : ($file = false);179 } else180 $file = false;181 }182 183 return $file;184 185 }186 187 function get_header_byLocalFolder($eachMsg, &$header){188 $header = <<<header189 MIME-Version: 1.0190 Content-Type: text/html; charset=ISO-8859-1191 Content-Transfer-Encoding: quoted-printable192 From: "{$eachMsg['from']['name']}" <{$eachMsg['from']['email']}>193 To: {$eachMsg['to']['email']}194 Subject: {$eachMsg['subject']}195 Message-Id: {$eachMsg['msg_number']}196 Date: {$eachMsg['date']}197 header;198 }199 200 function get_body_byLocalFolder($eachMsg, &$body){201 $body = $eachMsg['msg_sample']['body'];202 }203 152 204 153 function export_all($params){ -
branches/2.5/expressoMail1_2/inc/class.imap_functions.inc.php
r8114 r8232 42 42 var $useCache = false; 43 43 var $expirationCache = false; 44 44 var $msgIds = array();// Usado para guardar o messagesIds 45 45 46 46 function imap_functions (){ … … 233 233 ++$i; 234 234 } 235 236 $filter = array('AND', array('=', 'folderName', $folder), array('IN','messageNumber', $sort_array_msg)); 237 $followupflagged = Controller::find( 238 array('concept' => 'followupflagged'), 239 false, 240 array('filter' => $filter, 'criteria' => array('deepness' => '2')) 241 ); 242 $labeleds = Controller::find( 243 array('concept' => 'labeled'), 244 false, 245 array('filter' => $filter, 'criteria' => array('deepness' => '2')) 246 ); 247 $sort_array_msg_count = count($sort_array_msg); 248 for($i=0; $i<$sort_array_msg_count; ++$i){ 249 if(!isset($return[$i]['msg_number'])) 250 continue; 251 252 $numFlags = count($followupflagged); 253 for($ii=0; $ii<$numFlags; ++$ii){ 254 if($return[$i]['msg_number'] == $followupflagged[$ii]['messageNumber']){ 255 $followupflag = Controller::read( array( 'concept' => 'followupflag', 'id' => $followupflagged[$ii]['followupflagId'] )); 256 $return[$i]['followupflagged'] = $followupflagged[$ii]; 257 $return[$i]['followupflagged']['followupflag'] = $followupflag; 258 break; 259 } 260 } 261 $numLabels = count($labeleds); 262 for($ii=0; $ii<$numLabels; ++$ii){ 263 if($return[$i]['msg_number'] == $labeleds[$ii]['messageNumber']){ 264 $labels = Controller::read( array( 'concept' => 'label', 'id' => $labeleds[$ii]['labelId'])); 265 $return[$i]['labels'][$labeleds[$ii]['labelId']] = $labels; 266 } 267 } 268 } 235 if($_SESSION['phpgw_info']['user']['preferences']['expressoMail']['use_followupflags_and_labels'] == "1") 236 { 237 $filter = array('AND', array('=', 'folderName', $folder), array('IN','messageNumber', $sort_array_msg)); 238 $followupflagged = Controller::find( 239 array('concept' => 'followupflagged'), 240 false, 241 array('filter' => $filter, 'criteria' => array('deepness' => '2')) 242 ); 243 $labeleds = Controller::find( 244 array('concept' => 'labeled'), 245 false, 246 array('filter' => $filter, 'criteria' => array('deepness' => '2')) 247 ); 248 $sort_array_msg_count = count($sort_array_msg); 249 for($i=0; $i<$sort_array_msg_count; ++$i){ 250 if(!isset($return[$i]['msg_number'])) 251 continue; 252 253 $numFlags = count($followupflagged); 254 for($ii=0; $ii<$numFlags; ++$ii){ 255 if($return[$i]['msg_number'] == $followupflagged[$ii]['messageNumber']){ 256 $followupflag = Controller::read( array( 'concept' => 'followupflag', 'id' => $followupflagged[$ii]['followupflagId'] )); 257 $return[$i]['followupflagged'] = $followupflagged[$ii]; 258 $return[$i]['followupflagged']['followupflag'] = $followupflag; 259 break; 260 } 261 } 262 $numLabels = count($labeleds); 263 for($ii=0; $ii<$numLabels; ++$ii){ 264 if($return[$i]['msg_number'] == $labeleds[$ii]['messageNumber']){ 265 $labels = Controller::read( array( 'concept' => 'label', 'id' => $labeleds[$ii]['labelId'])); 266 $return[$i]['labels'][$labeleds[$ii]['labelId']] = $labels; 267 } 268 } 269 } 270 } 269 271 } 270 272 $return['num_msgs'] = $num_msgs; 271 } else { 273 } 274 else 275 { 272 276 $num_msgs = imap_num_msg($this->mbox); 273 277 $sort_array_msg = $this-> get_msgs($folder, $sort_box_type, $search_box_type, $sort_box_reverse,$msg_range_begin,$num_msgs); 274 278 275 276 279 $return['tot_unseen'] = 0; 277 280 $i = 0; 278 281 279 if(is_array($sort_array_msg)){ 280 281 foreach($sort_array_msg as $msg_number => $value) 282 { 283 $temp = $this->get_info_head_msg($msg_number); 284 if(!$temp) 285 return false; 286 287 if($temp['Unseen'] == 'U' || $temp['Recent'] == 'N'){ 288 $return['tot_unseen']++; 289 } 290 291 if($i <= ($msg_range_end-$msg_range_begin)) 292 $return[$i] = $temp; 293 ++$i; 294 } 295 } 296 $return['num_msgs'] = count($sort_array_msg)+($msg_range_begin-1); 282 if(is_array($sort_array_msg)) 283 { 284 foreach($sort_array_msg as $msg_number => $value) 285 { 286 $temp = $this->get_info_head_msg($msg_number); 287 if(!$temp) 288 return false; 289 290 if($temp['Unseen'] == 'U' || $temp['Recent'] == 'N') 291 $return['tot_unseen']++; 292 293 if($i <= ($msg_range_end-$msg_range_begin)) 294 $return[$i] = $temp; 295 296 ++$i; 297 297 } 298 299 return $return; 298 } 299 300 $return['num_msgs'] = count($sort_array_msg)+($msg_range_begin-1); 301 } 302 303 $return['messagesIds'] = $this->msgIds; 304 return $return; 300 305 } 301 306 … … 458 463 $return['attachment'] = ( preg_match('/((Content-Disposition:(.)*([\r\n\s]*filename))|(Content-Type:(.)*([\r\n\s]*name)))/i', $mimeBody) ) ? '1' : '0'; //Verifica se a anexos na mensagem 459 464 $return['reply_toaddress'] = isset($header->reply_toaddress) ? self::decodeMimeString($header->reply_toaddress) : ''; 460 $return['flag'] = $header->Unseen.$header->Recent.$header->Flagged.$header->Draft.$header->Answered.$header->Deleted.( $return['attachment'] === '1' ? 'T': '' ); 461 462 if (!empty($header->to)){ 465 $return['flag'] = $header->Unseen. 466 $header->Recent. 467 ($header->Flagged == 'F' || !( preg_match('/importance *: *(.*)\r/i', $mimeHeader , $importance) === 0 )? 'F' : ''). 468 $header->Draft. 469 $header->Answered. 470 $header->Deleted. 471 ( $return['attachment'] === '1' ? 'T': '' ); 472 473 if (!empty($header->to)){ 463 474 foreach ($header->to as $i => $v){ 464 475 $return['to'][$i] = self::formatMailObject( $v ); … … 592 603 if (zip_entry_open($zip, $zip_entry, "r")) { 593 604 $email = zip_entry_read($zip_entry, zip_entry_filesize($zip_entry)); 594 595 /*Caso mensagens vierem com quebras de linha diferentes do esperado, como por exemplo, 596 mensagens exportadas pelo MailArchiver, é preciso corrigir.*/ 597 $email = str_replace("\r\n", "\n", $email); 598 $email = str_replace("\n", "\r\n", $email); 599 605 606 /*Caso mensagens vierem com quebras de linha diferentes do esperado, como por exemplo, 607 mensagens exportadas pelo MailArchiver, é preciso corrigir.*/ 608 $email = str_replace("\r\n", "\n", $email); 609 $email = str_replace("\n", "\r\n", $email); 610 600 611 $status = @imap_append($this->mbox, 601 612 "{".$this->imap_server.":".$this->imap_port.$this->imap_options."}".$params["folder"], … … 620 631 }else if(substr($filename,strlen($filename)-4)==".eml") { 621 632 $email = implode("",file($params['FILES'][0]['tmp_name'])); 622 623 /*Caso mensagens vierem com quebras de linha diferentes do esperado, como por exemplo, 624 mensagens exportadas pelo MailArchiver, é preciso corrigir.*/ 625 $email = str_replace("\r\n", "\n", $email); 626 $email = str_replace("\n", "\r\n", $email); 627 633 634 /*Caso mensagens vierem com quebras de linha diferentes do esperado, como por exemplo, 635 mensagens exportadas pelo MailArchiver, é preciso corrigir.*/ 636 $email = str_replace("\r\n", "\n", $email); 637 $email = str_replace("\n", "\r\n", $email); 638 628 639 $status = imap_append($this->mbox,"{".$this->imap_server.":".$this->imap_port.$this->imap_options."}".$params["folder"],$email); 629 640 … … 954 965 955 966 $content .= $this->decodeMailPart($part->body,$part->ctype_parameters['charset']); 967 $i = -1; 956 968 } 957 969 … … 962 974 963 975 $content .= '<pre>'. htmlentities($this->decodeMailPart($part->body,$part->ctype_parameters['charset'],false)).'</pre>'; 976 $i = -1; 964 977 } 965 if(strtolower($part->ctype_secondary) == 'calendar')966 $content.= $this->builderMsgCalendar($this->decodeMailPart($part->body, $part->ctype_parameters['charset']));967 978 // Comentado para tratamento de e-mail multipart alternative com html e ical. Parseava o ical e ignorava o html. 979 //if(strtolower($part->ctype_secondary) == 'calendar') 980 // $content.= $this->builderMsgCalendar($this->decodeMailPart($part->body, $part->ctype_parameters['charset'])); 968 981 } 969 982 970 $i = -1;971 983 break; 972 984 973 985 case 'multipart': 974 986 975 if(strtolower($part->ctype_secondary) == 'alternative' ) //Unico formato multipart suportado, escapa os outros976 {977 if($printHeader)978 $content .= $this->builderMsgHeader($part);979 980 $this->builderMsgBody($part,$content);981 982 $i = -1;983 }984 985 987 if(strtolower($part->ctype_secondary) == 'alternative' ) //Unico formato multipart suportado, escapa os outros 988 { 989 if($printHeader) 990 $content .= $this->builderMsgHeader($part); 991 992 $this->builderMsgBody($part,$content); 993 994 $i = -1; 995 } 996 997 break; 986 998 987 999 case 'message': … … 1211 1223 1212 1224 $return['msg_number'] = $msg_number.$plus_id; 1213 $return['msg_folder'] = mb_convert_encoding( $msg_folder, "ISO-8859-1", "UTF-8" ); 1214 //isset($params['decoded']) ? mb_convert_encoding( $msg_folder, "ISO-8859-1", "UTF-8" ) : $msg_folder; 1225 $return['msg_folder'] = mb_convert_encoding( $msg_folder, "ISO-8859-1", "UTF-8" ); 1226 //isset($params['decoded']) ? mb_convert_encoding( $msg_folder, "ISO-8859-1", "UTF-8" ) : $msg_folder; 1215 1227 1216 1228 … … 1460 1472 } 1461 1473 $return['alarm'] = $alarm; 1462 1474 1463 1475 return $return; 1464 1476 } … … 2186 2198 function delete_msgs($params) 2187 2199 { 2188 2189 2200 $folder = $params['folder']; 2190 2201 $folder = mb_convert_encoding($folder, "UTF7-IMAP","ISO-8859-1"); 2191 2202 $msgs_number = explode(",",$params['msgs_number']); 2203 2192 2204 if(array_key_exists('border_ID' ,$params)) 2193 2205 $border_ID = $params['border_ID']; … … 2205 2217 $mbox_stream = @imap_open("{".$this->imap_server.":".$this->imap_port.$this->imap_options."}".$folder, $this->username, $this->password) or die(serialize(array('imap_error' => $this->parse_error(imap_last_error())))); 2206 2218 2207 2219 foreach ($msgs_number as $msg_number) 2208 2220 { 2209 2221 if (imap_delete($mbox_stream, $msg_number, FT_UID)); … … 2650 2662 function ren_mailbox($arr) 2651 2663 { 2652 $namebox = $arr['current']; 2653 $path_delimiter = strrpos($namebox,$this->imap_delimiter)+1; 2654 $base_path = substr($namebox,0,$path_delimiter); 2655 $rename = preg_split("/\/|\./",substr($arr['rename'], $path_delimiter)); 2656 $new_box = array_shift($rename); 2657 $subfolders = $rename; 2664 $namebox = $arr['current']; 2665 $path_delimiter = strrpos($namebox,$this->imap_delimiter)+1; 2666 $base_path = substr($namebox,0,$path_delimiter); 2667 $rename = preg_split("/\/|\./",substr($arr['rename'], $path_delimiter)); 2668 $new_box = array_shift($rename); 2669 $subfolders = $rename; 2658 2670 $imap_server = $_SESSION['phpgw_info']['expressomail']['email_server']['imapServer']; 2659 2671 $mbox_stream = $this->open_mbox(); … … 2666 2678 $result = imap_last_error(); 2667 2679 } 2668 /*Cria as subpastas*/ 2669 if (is_array($subfolders)){ 2670 $child = $new_box.$this->imap_delimiter; 2671 $subfolders_count = count($subfolders); 2672 for($i =0; $i < $subfolders_count; ++$i){ 2673 $child .= ($subfolders[$i] ? $subfolders[$i] : $this->functions->getLang("New Folder")); 2674 $namebox = mb_convert_encoding($child, "UTF7-IMAP", "UTF-8"); 2675 $result = "Ok"; 2676 if(!imap_createmailbox($mbox_stream,"{".$imap_server."}$namebox")) 2677 { 2678 $result = imap_last_error(); 2679 } 2680 $child .=$this->imap_delimiter; 2681 } 2682 } 2683 2680 /*Cria as subpastas*/ 2681 if (is_array($subfolders)){ 2682 $child = $new_box.$this->imap_delimiter; 2683 $subfolders_count = count($subfolders); 2684 for($i =0; $i < $subfolders_count; ++$i){ 2685 $child .= ($subfolders[$i] ? $subfolders[$i] : $this->functions->getLang("New Folder")); 2686 $namebox = mb_convert_encoding($child, "UTF7-IMAP", "UTF-8"); 2687 $result = "Ok"; 2688 if(!imap_createmailbox($mbox_stream,"{".$imap_server."}$namebox")) 2689 { 2690 $result = imap_last_error(); 2691 } 2692 $child .=$this->imap_delimiter; 2693 } 2694 } 2695 2684 2696 if($mbox_stream) 2685 2697 imap_close($mbox_stream); … … 2711 2723 return $return; 2712 2724 } 2713 2725 2726 /*Método utilizado para retornar dados da mensagem local (desarquivada na pasta lixeira) 2727 para poder ser anexada à mensagem.*/ 2728 function get_info_msg_archiver($params){ 2729 $folder = "INBOX".$this->imap_delimiter.$this->folders['trash']; 2730 $mbox_stream = $this->open_mbox($folder); 2731 $id = $params['idMsgs']; 2732 2733 $name = imap_headerinfo($mbox_stream, imap_msgno($mbox_stream, $id)); 2734 $return[] = array( 2735 'uid' => $id, 2736 'folder' => "archiver", 2737 'type' => "imapMSG", 2738 'name' => base64_encode($name->subject.".eml") 2739 ); 2740 2741 return json_encode($return); 2742 } 2743 2714 2744 function send_mail($params) { 2715 2745 require_once dirname(__FILE__) . '/../../services/class.servicelocator.php'; … … 2934 2964 $arr_new_folder['base_path'] = $base_path; 2935 2965 2936 $this->create_mailbox($arr_new_folder); 2966 $this->create_mailbox($arr_new_folder); 2937 2967 $has_new_folder = true; 2938 2968 $folder = $newfolder; … … 2954 2984 2955 2985 $from = $fromaddress ? ('"' . $fromaddress[0] . '" <' . $fromaddress[1] . '>') : ('"' . $_SESSION['phpgw_info']['expressomail']['user']['firstname'] . ' ' . $_SESSION['phpgw_info']['expressomail']['user']['lastname'] . '" <' . $_SESSION['phpgw_info']['expressomail']['user']['email'] . '>'); 2956 $mailService->setFrom( $from);2986 $mailService->setFrom( mb_convert_encoding($from, "ISO-8859-1","UTF-8, ISO-8859-1")); 2957 2987 2958 2988 $mailService->addHeaderField('Reply-To', !!$replytoaddress ? $replytoaddress : $from); … … 3004 3034 $isHTML = ( isset($params['type']) && $params['type'] == 'html' )? true : false; 3005 3035 3006 3007 // TODO - tratar mensagem criptografada e remover o AND false abaixo 3036 // TODO - tratar mensagem criptografada e remover o AND false abaixo 3008 3037 if (($encrypt && $signed && $params['smime']) || ($encrypt && !$signed) AND false) { // a msg deve ser enviada cifrada... 3009 3038 $email = $this->add_recipients_cert($toaddress . ',' . $ccaddress . ',' . $ccoaddress); … … 3103 3132 { 3104 3133 $value = json_decode($value, true); 3134 if($value["folder"] == "archiver"){ 3135 $value['folder'] = "INBOX/Trash"; 3136 } 3105 3137 3106 3138 switch ($value['type']) { … … 3110 3142 if(strstr($body,'src="./inc/get_archive.php?msgFolder='.$value['folder'].'&msgNumber='.$value['uid'].'&indexPart='.$value['part'].'"') !== false)//Embeded IMG 3111 3143 { 3112 $body = str_ireplace('src="./inc/get_archive.php?msgFolder='.$value['folder']. '&msgNumber='.$value['uid'].'&indexPart='.$value['part'].'"' , 'src="'.$att['name'].'"', $body);3144 $body = str_ireplace('src="./inc/get_archive.php?msgFolder='.$value['folder']. '&msgNumber='.$value['uid'].'&indexPart='.$value['part'].'"' , 'src="'.$att['name'].'"', $body); 3113 3145 $mailService->addStringImage($att['source'], $att['type'],mb_convert_encoding($att['name'], 'ISO-8859-1' , 'UTF-8,ISO-8859-1') ); 3114 3146 } … … 3124 3156 3125 3157 $mailService->addStringAttachment($rawmsg, mb_convert_encoding(base64_decode($value['name']), 'ISO-8859-1' , 'UTF-8,ISO-8859-1'), 'message/rfc822', '7bit', 'attachment' ); 3158 /*envia o anexo para o email*/ 3126 3159 $message_size_total += mb_strlen($rawmsg); //Adiciona o tamanho do anexo a variavel que controlao tamanho da msg. 3127 3160 unset($rawmsg); … … 3419 3452 $sort = array(); 3420 3453 } 3454 3455 $this->msgIds = $sort; 3456 3421 3457 if ($slice_array) 3422 3458 $sort = array_slice($sort,$offsetBegin-1,$offsetEnd-($offsetBegin-1),true); … … 3556 3592 } 3557 3593 3594 function verifyShareFolder($params){ 3595 $folder = $params['folder']; 3596 3597 if (substr($folder,0,4) == 'user'){ 3598 $acl = $this->getacltouser($folder, isset($params['decoded'])); 3599 3600 $acl_share_delete = (stripos($acl,'t') !== false && stripos($acl,'e') !== false); 3601 3602 if (!$acl_share_delete) { 3603 $return['status'] = false; 3604 return $return; 3605 } 3606 } 3607 } 3558 3608 function move_messages($params) 3559 3609 { … … 3676 3726 } 3677 3727 3678 function set_messages_flag_from_search($params){ 3728 function set_messages_flag_from_search($params){ 3679 3729 $error = False; 3680 3730 $fileNames = ""; … … 4404 4454 $elem['uid'] = $new_search; 4405 4455 /* compare dates in ordering */ 4406 $elem['udatecomp'] = substr ($elem['udate'], -4) ."-". substr ($elem['udate'], 3, 2) ."-". substr ($elem['udate'], 0, 2); 4407 4408 $filter = array('AND', array('=', 'folderName', $name_box), array('=','messageNumber', $new_search)); 4409 $followupflagged = Controller::find( 4410 array('concept' => 'followupflagged'), 4411 false, 4412 array('filter' => $filter, 'criteria' => array('deepness' => '2')) 4413 ); 4414 4415 if(isset($followupflagged[0]['followupflagId'])) 4416 { 4417 $followupflag = Controller::read( array( 'concept' => 'followupflag', 'id' => $followupflagged[0]['followupflagId'] )); 4418 $followupflagged[0]['followupflag'] = $followupflag; 4419 $elem['followupflagged'] = $followupflagged[0]; 4420 4421 } 4422 $labeleds = Controller::find( 4423 array('concept' => 'labeled'), 4424 false, 4425 array('filter' => $filter, 'criteria' => array('deepness' => '2')) 4426 ); 4427 foreach ($labeleds as $e){ 4428 $labels = Controller::read( array( 'concept' => 'label', 'id' => $e['labelId'])); 4429 $elem['labels'][$e['labelId']] = $labels; 4430 } 4456 $elem['udatecomp'] = substr ($elem['udate'], -4) ."-". substr ($elem['udate'], 3, 2) ."-". substr ($elem['udate'], 0, 2); 4457 if($_SESSION['phpgw_info']['user']['preferences']['expressoMail']['use_followupflags_and_labels'] == "1") 4458 { 4459 $filter = array('AND', array('=', 'folderName', $name_box), array('=','messageNumber', $new_search)); 4460 $followupflagged = Controller::find( 4461 array('concept' => 'followupflagged'), 4462 false, 4463 array('filter' => $filter, 'criteria' => array('deepness' => '2')) 4464 ); 4465 4466 if(isset($followupflagged[0]['followupflagId'])) 4467 { 4468 $followupflag = Controller::read( array( 'concept' => 'followupflag', 'id' => $followupflagged[0]['followupflagId'] )); 4469 $followupflagged[0]['followupflag'] = $followupflag; 4470 $elem['followupflagged'] = $followupflagged[0]; 4471 4472 } 4473 $labeleds = Controller::find( 4474 array('concept' => 'labeled'), 4475 false, 4476 array('filter' => $filter, 'criteria' => array('deepness' => '2')) 4477 ); 4478 foreach ($labeleds as $e){ 4479 $labels = Controller::read( array( 'concept' => 'label', 'id' => $e['labelId'])); 4480 $elem['labels'][$e['labelId']] = $labels; 4481 } 4482 } 4431 4483 $retorno[] = $elem; 4432 4484 } … … 4460 4512 $arrayRetorno['data'] = $pageret; 4461 4513 $arrayRetorno['currentTab'] = $params['current_tab']; 4462 4514 return ($pageret) ? $arrayRetorno : 'none'; 4463 4515 } 4464 4516 … … 4546 4598 { 4547 4599 $folder = str_replace($serverString, "", imap_utf7_decode($val->name)); 4548 //$folder = str_replace("&-", "&", $folder); 4549 $trashFolder = explode($this->imap_delimiter,$folder); 4550 $acls = ($trashFolder[count($trashFolder) - 1] == "Trash") ? $value['acls']."i" : $value['acls']; 4551 $folder = imap_utf7_encode($folder);4552 imap_setacl ($mbox_stream, $folder, "$user", $acls); 4600 //$folder = str_replace("&-", "&", $folder); 4601 $trashFolder = explode($this->imap_delimiter,$folder); 4602 $acls = ($trashFolder[count($trashFolder) - 1] == "Trash") ? $value['acls']."i" : $value['acls']; 4603 $folder = imap_utf7_encode($folder); 4604 imap_setacl ($mbox_stream, $folder, "$user", $acls); 4553 4605 } 4554 4606 } … … 4909 4961 $insert = $this->insert_email($source,$dest_folder,$timestamps[$index],$flags[$index]); 4910 4962 4963 $return['idsMsg'] = $insert['msg_no']; 4911 4964 if($insert['error']) 4912 4965 { … … 5070 5123 foreach ($subject as $tmp) 5071 5124 $return['msgs'][$i]['subject'] .= mb_convert_encoding($tmp->text, 'UTF-8', 'UTF-8 , ISO-8859-1'); 5072 5073 $filter = array('AND', array('=', 'folderName', $folder), array('=','messageNumber', $v)); 5074 $followupflagged = Controller::find( 5075 array('concept' => 'followupflagged' , 'folder' => $folder ), 5076 false, 5077 array('filter' => $filter, 'criteria' => array('deepness' => '2')) 5078 ); 5079 5080 if(isset($followupflagged[0]['followupflagId'])) 5081 { 5082 $followupflag = Controller::read( array( 'concept' => 'followupflag', 'id' => $followupflagged[0]['followupflagId'] )); 5083 $followupflagged[0]['followupflag'] = $followupflag; 5084 $return['msgs'][$i]['followupflagged'] = $followupflagged[0]; 5085 5086 } 5087 $labeleds = Controller::find( 5088 array('concept' => 'labeled'), 5089 false, 5090 array('filter' => $filter, 'criteria' => array('deepness' => '2')) 5091 ); 5092 if(is_array($labeleds)) 5093 foreach ($labeleds as $e){ 5094 $labels = Controller::read( array( 'concept' => 'label', 'id' => $e['labelId'])); 5095 $return['msgs'][$i]['labels'][$e['labelId']] = $labels; 5096 } 5125 5126 5127 if($_SESSION['phpgw_info']['user']['preferences']['expressoMail']['use_followupflags_and_labels'] == "1") 5128 { 5129 5130 $filter = array('AND', array('=', 'folderName', $folder), array('=','messageNumber', $v)); 5131 $followupflagged = Controller::find( 5132 array('concept' => 'followupflagged' , 'folder' => $folder ), 5133 false, 5134 array('filter' => $filter, 'criteria' => array('deepness' => '2')) 5135 ); 5136 5137 if(isset($followupflagged[0]['followupflagId'])) 5138 { 5139 $followupflag = Controller::read( array( 'concept' => 'followupflag', 'id' => $followupflagged[0]['followupflagId'] )); 5140 $followupflagged[0]['followupflag'] = $followupflag; 5141 $return['msgs'][$i]['followupflagged'] = $followupflagged[0]; 5142 5143 } 5144 $labeleds = Controller::find( 5145 array('concept' => 'labeled'), 5146 false, 5147 array('filter' => $filter, 'criteria' => array('deepness' => '2')) 5148 ); 5149 if(is_array($labeleds)) 5150 foreach ($labeleds as $e){ 5151 $labels = Controller::read( array( 'concept' => 'label', 'id' => $e['labelId'])); 5152 $return['msgs'][$i]['labels'][$e['labelId']] = $labels; 5153 } 5154 } 5155 5097 5156 $mimeBody = imap_body( $this->mbox, $v , FT_UID|FT_PEEK ); 5098 5157 $return['msgs'][$i]['flag'] = ' '; 5099 5158 $return['msgs'][$i]['flag'] .= $msg->Unseen ? $msg->Unseen : ''; 5100 $return['msgs'][$i]['flag'] .= $msg->Recent ? $msg->Recent : ''; 5159 $return['msgs'][$i]['flag'] .= $msg->Recent ? $msg->Recent : ''; 5101 5160 $return['msgs'][$i]['flag'] .= $msg->Draft ? $msg->Draft : ''; 5102 5161 $return['msgs'][$i]['flag'] .= $msg->Answered ? $msg->Answered : ''; … … 5159 5218 $nMsgs[] = $v; 5160 5219 } 5161 $return['msgs'] = $nMsgs; 5162 5163 $return = json_encode($return); 5220 $return['msgs'] = $nMsgs; 5221 5222 $return = json_encode($return); 5164 5223 $return = base64_encode($return); 5165 5224 5166 5225 return $return; 5167 5226 } … … 5227 5286 function searchSieveRule( $params ) 5228 5287 { 5229 5230 $imap = $this->open_mbox( 'INBOX' ); 5288 $imap = $this->open_mbox( $params['folder']['criteria'] ? $params['folder']['criteria'] : 'INBOX' ); 5231 5289 $msgs = imap_sort( $imap , SORTDATE , 0 , SE_UID); 5232 5290 5233 5291 $rr = array(); 5234 5292 5235 5293 if(isset($params['from'])) $rr['from'] = array(); 5236 5294 if(isset($params['to'])) $rr['to'] = array(); 5237 5295 if(isset($params['subject'])) $rr['subject'] = array(); 5238 if(isset($params['body'])) $rr['body'] = array(); 5239 if(isset($params['size'])) $rr['size'] = array(); 5240 5296 if(isset($params['body'])) $rr['body'] = array(); 5297 if(isset($params['size'])) $rr['size'] = array(); 5298 5299 //$params['search'] = mb_convert_encoding($params['search'], 'UTF-8',mb_detect_encoding($params['search'].'x', 'UTF-8, ISO-8859-1')); 5300 5241 5301 foreach ($msgs as $i => $v) 5242 5302 { … … 5264 5324 5265 5325 if(isset($params['to'])) 5266 { 5326 { 5267 5327 $tos = $msg->to; 5268 5328 $val = ''; … … 5284 5344 5285 5345 } 5286 5346 5287 5347 if($this->filterCheck( $val , $params['to']['criteria'] , $params['to']['filter'] )) 5288 5348 $rr['to'][] = $v; … … 5294 5354 $subject = imap_mime_header_decode($msg->subject); 5295 5355 foreach ($subject as $tmp) 5296 $ss .= $tmp->text;5356 $ss .= ($tmp->charset == "default") ? $tmp->text : utf8_encode($tmp->text); 5297 5357 5298 5358 if($this->filterCheck($ss , $params['subject']['criteria'] , $params['subject']['filter'] )) … … 5302 5362 if(isset($params['body'])) 5303 5363 { 5304 $this->mbox = $this->open_mbox( 'INBOX' );5305 $b = $this->get_body_msg( $v , 'INBOX' );5306 5307 if( $this->filterCheck( $b['body'], $params['body']['criteria'] , $params['body']['filter'] ))5364 $this->mbox = $this->open_mbox( $params['folder']['criteria'] ? $params['folder']['criteria'] : 'INBOX' ); 5365 $b = $this->get_body_msg( $v , $params['folder']['criteria'] ? $params['folder']['criteria'] : 'INBOX' ); 5366 5367 if( $this->filterCheck( mb_convert_encoding(html_entity_decode($b['body']), 'UTF-8',mb_detect_encoding(html_entity_decode($b['body']).'x', 'UTF-8, ISO-8859-1')) , $params['body']['criteria'] , $params['body']['filter'] )) 5308 5368 $rr['body'][] = $v; 5309 5369 5310 5370 unset($b); 5311 5371 } … … 5320 5380 $rrr = array(); 5321 5381 $init = true; 5322 5323 5324 5382 foreach ($rr as $i => $v) 5325 { 5383 { 5326 5384 if(count($rrr) == 0 && $init === true) 5327 5385 $rrr = $v; 5328 5386 else if($params['isExact'] == 'yes') 5329 5387 $rrr = array_intersect($rrr , $v); 5330 5388 else 5331 5389 $rrr = array_unique(array_merge($rrr , $v)); 5332 5333 } 5334 5390 } 5335 5391 5336 5392 // if($params['page'] && $params['rows']) … … 5403 5459 $ret[$msg][] = imap_mail_copy($imap,$msg,$proc['value'], CP_UID); 5404 5460 else 5461 { 5405 5462 /* Está sempre copiando a mensagem para a pasta destino */ 5406 5463 //$ret[$msg][] = imap_mail_move($imap,$msg,$proc['parameter'], CP_UID); 5407 5464 $ret[$msg][] = imap_mail_move($imap,$msg,$proc['parameter'], CP_UID); 5465 imap_expunge($imap); 5466 } 5408 5467 break; 5409 5468 case 'redirect': -
branches/2.5/expressoMail1_2/inc/class.ldap_functions.inc.php
r8172 r8232 499 499 500 500 foreach($info_return as &$value){ 501 $value['type_contact'] = "G";502 501 if (is_array($value)) 502 $value['type_contact'] = "G"; 503 503 //Converte a descrição dos filtros para ISO8859 corrigindo inconsitências com caractéres especiais 504 504 if(isset($value['vacationinfo']) && isset($value['vacationinfo'][0]) && $value['vacationinfo'][0] != '') -
branches/2.5/expressoMail1_2/inc/hook_settings.inc.php
r8166 r8232 150 150 signatures[default_signature].replace( /\\n/g, "<br>" ); 151 151 } 152 if (document.getElementById( "signature" ).value != "") 153 document.getElementById( "signature" ).value = encode64(document.getElementById( "signature" ).value);152 if (document.getElementById( "signature" ).value != "") 153 document.getElementById( "signature" ).value = encode64(document.getElementById( "signature" ).value); 154 154 document.getElementById( "signatures" ).value = toJSON( signatures ); 155 155 document.getElementById( "signature_types" ).value = toJSON( types ); … … 270 270 return output.toString(); 271 271 } 272 function normalizerSignature(values){ 273 var value = {}; 274 for( key in values ){ 275 value[isEncoded64(key) ? decode64(key) : key] = values[key]; 276 } 277 return value; 278 } 279 /*Verifica se a string input esta em Base 64*/ 280 function isEncoded64(input){ 281 var baseStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; 282 var encoded = true; 283 if ( (input.length % 4) != 0) 284 return false; 285 for(var i=0; i<input.length; i++){ 286 if ( baseStr.indexOf(input[i]) < 0 ){ 287 encoded = false; 288 break; 289 } 290 } 291 return encoded; 272 function normalizerSignature(values){ 273 274 var value = {}; 275 276 for( key in values ){ 277 278 value[isEncoded64(key) ? decode64(key) : key] = values[key]; 279 280 } 281 282 return value; 283 } 284 /*Verifica se a string input esta em Base 64*/ 285 function isEncoded64(input){ 286 var baseStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; 287 var encoded = true; 288 if ( (input.length % 4) != 0) 289 return false; 290 for(var i=0; i<input.length; i++){ 291 if ( baseStr.indexOf(input[i]) < 0 ){ 292 encoded = false; 293 break; 294 } 295 } 296 return encoded; 292 297 } 293 298 function loadSignature() 294 299 { 295 300 var types = fromJSON( document.getElementById( "signature_types" ).value ); 296 var signatures; 297 if (document.getElementById( "signatures" ).value) 298 { 299 signatures = fromJSON(document.getElementById("signatures").value); 300 } else if (document.getElementById( "signature" ).value) // Caso a assinatura esteja no formato da versão 2.2.10: 301 { 302 // TODO: Internazionalizar a string 303 signatures = {}; 304 signatures["Assinatura padrão"] = document.getElementById( "signature" ).value; 305 if (!document.getElementById("signature_default").value) 306 { 307 document.getElementById("signature_default").value = "Assinatura padrão"; 308 } 309 } 310 311 var old_signature = document.getElementById( "signature" ).value; 312 var def = document.getElementById( "signature_default" ).value; 313 def = isEncoded64(def) ? decode64(def) : def; 301 var signatures; 302 if (document.getElementById( "signatures" ).value) 303 { 304 signatures = fromJSON(document.getElementById("signatures").value); 305 } else if (document.getElementById( "signature" ).value) // Caso a assinatura esteja no formato da versão 2.2.10: 306 { 307 // TODO: Internazionalizar a string 308 signatures = {}; 309 signatures["Assinatura padrão"] = document.getElementById( "signature" ).value; 310 if (!document.getElementById("signature_default").value) 311 { 312 document.getElementById("signature_default").value = "Assinatura padrão"; 313 } 314 } 315 316 signatures = normalizerSignature(signatures); 317 types = normalizerSignature(types); 318 319 var old_signature = document.getElementById( "signature" ).value; 320 var def = document.getElementById( "signature_default" ).value; 321 def = isEncoded64(def) ? decode64(def) : def; 314 322 315 323 var counter = 0, ids = [], def_signature = "", noSig = true; 316 317 signatures = normalizerSignature(signatures);318 types = normalizerSignature(types);319 324 320 325 for( key in signatures ) … … 336 341 337 342 if( def_signature !== "" ) 338 343 document.getElementById( "default_signature" + def_signature ).checked = true; 339 344 else if( noSig && old_signature ) 340 345 { 341 var type_signature = document.getElementById("type_signature"); 342 if (type_signature) 343 { 344 addSignature( type_signature.value !== "html" ); 345 document.getElementById( "user_signature" + counter ).value = old_signature; 346 } 347 346 var type_signature = document.getElementById("type_signature"); 347 if (type_signature) 348 { 349 addSignature( type_signature.value !== "html" ); 350 document.getElementById( "user_signature" + counter ).value = old_signature; 351 } 352 } 348 353 } 349 354 '); … … 364 369 365 370 create_check_box('View the user name in the header of the messages printed?', 'show_name_print_messages', 'Displays the user name in the header print email'); 371 372 create_check_box('Habilitar funcionalidade de notificar ao receber mensagens filtradas por remetente ?', 'use_alert_filter_criteria', ''); 373 create_check_box('Habilitar sinalizadores e marcadores em mensagens', 'use_followupflags_and_labels', ''); 366 374 367 375 //$default = 0; -
branches/2.5/expressoMail1_2/index.php
r7919 r8232 16 16 'enable_nextmatchs_class' => True 17 17 ); 18 18 19 19 require_once('../header.inc.php'); 20 20 include_once dirname(__FILE__) . '/../header.inc.php'; … … 25 25 $AlternateEmailExpresso = $alternativeMailService->getMailAlternateByUidNumber($_SESSION['phpgw_info']['expressomail']['user']['account_id']); 26 26 $template->set_var("user_email_alternative", implode(",", $AlternateEmailExpresso)); 27 28 if (execmethod('emailadmin.ui.countProfiles') == 0){ 29 execmethod('emailadmin.ui.addDefaultProfile'); 30 } 27 31 28 32 $update_version = $GLOBALS['phpgw_info']['apps']['expressoMail1_2']['version']; 29 33 $_SESSION['phpgw_info']['expressomail']['user'] = $GLOBALS['phpgw_info']['user']; 30 34 echo "<script type='text/javascript'>var template = '".$_SESSION['phpgw_info']['expressoMail1_2']['user']['preferences']['common']['template_set']."';</script>"; 35 31 36 32 37 //jquery and Editor … … 74 79 <script type="text/javascript" src="js/DropDownContacts.js"></script> 75 80 '; 76 81 82 // 83 // include_once(__DIR__.'/inc/class.imap_functions.inc.php'); 84 // 85 // $param = array(); 86 // $param['folder'] = 'INBOX'; 87 // $param['msg_range_begin'] = '1'; 88 // $param['msg_range_end'] = '50'; 89 // $param['sort_box_type'] = 'SORTARRIVAL'; 90 // $param['search_box_type'] = 'ALL'; 91 // $param['sort_box_reverse'] = '1'; 92 // 93 // $imapf = new imap_functions(); 94 // $initialMessages = $imapf->get_range_msgs2($param); 95 // 96 // echo '<script type="text/javascript"> var initialMessages = '.json_encode($initialMessages).'</script>'; 97 77 98 /* 78 99 * TODO: implementar o controle como preferência do usuário … … 251 272 } 252 273 253 echo '<script type="text/javascript"> var preferences = '.json_encode($_SESSION['phpgw_info']['user']['preferences']['expressoMail']).'</script>'; 254 274 echo '<script type="text/javascript"> var preferences = '.json_encode($_SESSION['phpgw_info']['user']['preferences']['expressoMail']).'</script>'; 275 255 276 echo ' 256 277 <script> var special_folders = new Array(4); … … 334 355 //echo $obj -> getFilesJs("js/common_functions.js",$update_version); 335 356 include("inc/load_lang.php"); 336 357 337 358 // INCLUDE these JS Files: 338 359 if ($_SESSION['phpgw_info']['user']['preferences']['expressoMail']['use_local_messages']) … … 349 370 echo "<script> use_local_messages = ".$_SESSION['phpgw_info']['user']['preferences']['expressoMail']['use_local_messages']."</script>"; 350 371 if($_SESSION['phpgw_info']['user']['preferences']['expressoMail']['use_local_messages']) 351 $scripts .= "js/local_messages.js"; 352 372 $scripts .= "js/local_messages.js"; 373 353 374 echo ' 354 375 <!--<script type="text/javascript" src="../prototype/modules/mail/js/followupflag.js"></script>--> … … 360 381 '; 361 382 362 echo 383 //////////////////////////////////////////// Carregar Timezones para o javascript ///////////////////////////////////////// 384 385 $zones = timezone_identifiers_list(); 386 $Time = new DateTime('now', new DateTimeZone('UTC')); 387 $timezone = array(); 388 389 foreach ($zones as $zone) 390 { 391 $timezone['timezones'][$zone] = $Time->setTimezone(new DateTimeZone($zone))->format('O'); 392 } 393 394 $localtime = localtime(time(), true); 395 $timezone['isDaylightSaving'] = !!$localtime['tm_isdst'] ? 1 : 0; 396 397 echo '<script type="text/javascript"> var Timezone = '.json_encode($timezone).'</script>'; 398 399 //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 400 401 echo 363 402 '<script src="../prototype/plugins/datejs/date-pt-BR.js" language="javascript" ></script> 364 <script src="../prototype/modules/calendar/js/timezone.js" language="javascript" ></script> 365 <script src="../prototype/plugins/dateFormat/dateFormat.js" language="javascript" ></script> 366 <script src="../prototype/modules/calendar/js/calendar.date.js" language="javascript" ></script> 403 <script src="../prototype/plugins/dateFormat/dateFormat.js" language="javascript" ></script> 404 <script src="../prototype/modules/calendar/js/calendar.date.js" language="javascript" ></script> 367 405 <script src="../prototype/modules/calendar/js/calendar.codecs.js" language="javascript" ></script> 368 406 <script src="../prototype/modules/calendar/js/calendar.alarms.js" language="javascript" ></script> … … 371 409 echo $obj -> getFilesJs($scripts, $update_version); 372 410 echo '<script type="text/javascript">connector.updateVersion = "'.$update_version.'";</script>'; 373 374 411 echo '<script type="text/javascript" src="assetic.php"></script>'; 375 412 413 ///////// Verifica se o usuario esta fora do escritorio imprime a variavel javascript "outOfficeFlag" ///////////////////////////// 414 415 include_once(__DIR__ .'/../library/Net/Sieve.php'); 416 $sieveConf = parse_ini_file( __DIR__."/../prototype/config/Sieve.srv", true ); 417 $sieveConf = $sieveConf['config']; 418 $sieve = new Net_Sieve(); 419 $inVacation = false; 420 @$sieve->connect( $sieveConf['host'] , $sieveConf['port'] , $sieveConf['options'] , $sieveConf['useTLS'] ); 421 @$sieve->login( $_SESSION['wallet']['Sieve']['user'], $_SESSION['wallet']['Sieve']['password'] , $sieveConf['loginType']); 422 $script = $sieve->getScript($sieve->getActive()); 423 $pos = strripos($script, "#PseudoScript#"); 424 $pseudo_script = substr( $script, $pos+17 ); 425 $sieveRules = json_decode( $pseudo_script, true ); 426 foreach( $sieveRules as $i => $v) 427 if($v['id'] == 'vacation' && $v['enabled'] == 'true') 428 $inVacation = true; 429 430 if($inVacation) 431 echo '<script language="javascript"> write_msg(get_lang("Attention, you are in out of office mode."), true); </script>'; 432 433 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 434 435 436 437 376 438 377 439 // Get Preferences or redirect to preferences page. -
branches/2.5/expressoMail1_2/js/InfoContact.js
r8147 r8232 7 7 this.td; 8 8 this.createCard(); 9 this.folder = get_current_folder(); 9 10 } 10 11 … … 69 70 70 71 emInfoContact.prototype.show = function (data){ 72 if (this.folder != get_current_folder()){ 73 this.folder = get_current_folder(); 74 return false; 75 } 71 76 var _this = this; 72 77 var card = Element("card_cc"); 73 78 card.style.left = (findPosX(this.td) + 20)+"px"; 74 var divScroll = Element("divScrollMain_"+numBox); 75 var y = findPosY(this.td) + 20 - (divScroll ? divScroll.scrollTop : 0); 79 var divScroll = Element("divScrollMain_"+numBox); 80 var y = findPosY(this.td) + 20 - (divScroll ? divScroll.scrollTop : 0); 76 81 var w_height = is_ie ? document.body.clientHeight + document.body.scrollTop : window.innerHeight + window.pageYOffset; 77 82 if(y + 160 > w_height) -
branches/2.5/expressoMail1_2/js/abas.js
r8125 r8232 10 10 function setBorderAttributes(ID) 11 11 { 12 13 12 this.border_id = "border_id_"+ID; 13 this.sequence = ID; 14 14 } 15 15 … … 17 17 function alternate_border(ID) 18 18 { 19 msg_selected = false;//Controle da seleção de mensagens 20 if(isNaN(ID)) 21 if(preferences.use_shortcuts == "1") 22 select_msg((ID.split("_"))[0]); 23 if( document.getElementById("div_menu_c3") != null ) 24 { 25 //div que contém divs de paginação de todas abas de listagem possíveis (listagem de pasta e listagem de pesquisa) 26 var node = document.getElementById("div_menu_c3").firstChild; 27 //Se for diferente da aba de listagem, remove a paginação 28 if(currentTab != 0){ 29 //Enquanto node for true (retorna false se não houver mais elementos) 30 while ( node ) { 31 node.style.display = "none"; 32 node = node.nextSibling; 33 } 34 } 35 36 if( document.getElementById("span_paging"+ID) != null ) 37 document.getElementById("span_paging"+ID).style.display = "block"; 38 } 39 40 if ( typeof win == 'object' && win.close && win.close.constructor == Function ){ 19 20 21 msg_selected = false;//Controle da seleção de mensagens 22 if(isNaN(ID)) 23 if(preferences.use_shortcuts == "1") 24 select_msg((ID.split("_"))[0]); 25 if( document.getElementById("div_menu_c3") != null ) 26 { 27 //div que contém divs de paginação de todas abas de listagem possíveis (listagem de pasta e listagem de pesquisa) 28 var node = document.getElementById("div_menu_c3").firstChild; 29 //Se for diferente da aba de listagem, remove a paginação 30 if(currentTab != 0){ 31 //Enquanto node for true (retorna false se não houver mais elementos) 32 while ( node ) { 33 node.style.display = "none"; 34 node = node.nextSibling; 35 } 36 } 37 38 if( document.getElementById("span_paging"+ID) != null ) 39 document.getElementById("span_paging"+ID).style.display = "block"; 40 } 41 42 if ( typeof win == 'object' && win.close && win.close.constructor == Function ){ 41 43 var search_win = document.getElementById( 'window_QuickCatalogSearch' ); 42 44 if(search_win){ … … 45 47 win.close( ); 46 48 } 47 48 49 50 51 52 53 54 55 var footer_menu = Element("footer_menu"); 56 57 58 59 60 61 62 63 if((openTab.imapBox[ID].indexOf("local_") >= 0)){ 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 alternate_menu.setAttribute("onclick", 'archive_msgs(\''+openTab.imapBox[ID]+'\', null)'); 80 81 82 83 } 84 85 86 87 88 89 90 91 92 93 footer_menu.style.display = 'none'; 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 Element("font_border_id_"+BordersArray[i].sequence).className = 'font-menu'; 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 49 50 if (! Element('border_id_'+ID)) 51 return false; // Not possible to alternate 52 show_hide_span_paging(ID); 53 spanD = Element("span_D"); 54 if (spanD) 55 spanD.style.display = (openTab.type[ID] == 0 ? '' : 'none'); 56 57 var footer_menu = Element("footer_menu"); 58 var aba = Element('border_id_'+ID); 59 if (footer_menu != null) { 60 footer_menu.style.display = (openTab.type[ID] != 4 ? '' : 'none'); 61 var alternate_menu = document.getElementById('localOption'); 62 63 if(alternate_menu != null && alternate_menu != 'undefined'){ //Quando Carregado o expresso mail 64 if(openTab.imapBox[ID]!= null && openTab.imapBox[ID]!= 'undefined' ){ //Quando abrir uma Nova Mensagem 65 if((openTab.imapBox[ID].indexOf("local_") >= 0)){ 66 alternate_menu.title = get_lang("Unarchive"); 67 alternate_menu.removeAttribute("onclick"); 68 if(!is_ie) 69 alternate_menu.setAttribute("onclick", 'expresso_local_messages.unarchive_msgs(\''+openTab.imapBox[ID]+'\', null)'); 70 else{ 71 alternate_menu.onclick = function(){ 72 expresso_local_messages.unarchive_msgs(openTab.imapBox[ID], null); 73 } 74 } 75 alternate_menu.innerHTML = get_lang("Unarchive"); 76 77 }else{ 78 alternate_menu.title = get_lang("Archive"); 79 alternate_menu.removeAttribute("onclick"); 80 if(!is_ie) 81 alternate_menu.setAttribute("onclick", 'archive_msgs(\''+openTab.imapBox[ID]+'\', null)'); 82 else{ 83 alternate_menu.onclick = function(){ 84 archive_msgs(openTab.imapBox[ID], null); 85 } 86 } 87 alternate_menu.innerHTML = get_lang("Archive"); 88 } 89 90 } 91 } 92 93 if((aba.id.indexOf("_r") < 0) && (aba.id.indexOf("_0") < 0) && (aba.id.indexOf("id_search_") < 0) && (aba.id.indexOf("_s") < 0)){ 94 spanD.style.display = 'none'; 95 footer_menu.style.display = 'none'; 96 } 97 } 98 99 100 var len = BordersArray.length; 101 for (var i=0; i < len; i++) 102 { 103 m = document.getElementById(BordersArray[i].border_id); 104 if ((m)&&(m.className == 'menu-sel')) 105 { 106 m.className = 'menu'; 107 c = document.getElementById("content_id_"+BordersArray[i].sequence); 108 c.style.display = 'none'; 109 if(Element("font_border_id_"+BordersArray[i].sequence)) 110 Element("font_border_id_"+BordersArray[i].sequence).className = 'font-menu'; 111 112 } 113 } 114 115 m = Element("border_id_"+ID); 116 if (m) 117 m.className = 'menu-sel'; 118 if(Element("font_border_id_" + ID)) 119 Element("font_border_id_" + ID).className = 'font-menu-sel'; 120 var c = Element("content_id_"+ID) 121 if (c) 122 c.style.display = ''; 123 124 125 // hide the DropDrowContact, if necessary 126 window_DropDownContacts = Element('tipDiv'); 127 if ((window_DropDownContacts)&&(window_DropDownContacts.style.visibility != 'hidden')){ 128 window_DropDownContacts.style.visibility = 'hidden'; 129 } 130 131 numBox = getNumBoxFromTabId(ID); 132 if (typeof(ID)=='number') { 131 133 numBox = ID; 132 134 } … … 145 147 } 146 148 } 147 currentTab=ID; 148 if( document.getElementById('to_'+ID) && document.getElementById('to_'+ID).type == "textarea"){ 149 document.getElementById('to_'+ID).focus(); 150 } 151 if (ID == 0){ 152 updateSelectedMsgs(); 153 } 154 RichTextEditor.setEditable(ID); 155 resizeWindow(); 156 return ID; 149 currentTab=ID; 150 if( document.getElementById('to_'+ID) && document.getElementById('to_'+ID).type == "textarea"){ 151 document.getElementById('to_'+ID).focus(); 152 } 153 if (ID == 0){ 154 updateSelectedMsgs(); 155 } 156 RichTextEditor.setEditable(ID); 157 resizeWindow(); 158 159 return ID; 157 160 } 158 161 159 162 function create_border(borderTitle, id_value, search) 160 163 { 161 164 borderTitle = ( ( borderTitle && borderTitle.constructor == String && borderTitle.length > 0 ) ? borderTitle : ' ' ); 162 165 borderTitle = html_entities(borderTitle); 163 166 var resize = false; 164 167 resize = resize_borders(); 165 168 if (!resize){ 166 169 var str_continue = ''; 167 170 var bolContinue = true; 168 171 str_continue = '\n' + get_lang('You must manually close one of your tabs before opening a new one'); 169 172 if (preferences.auto_close_first_tab == 1){ 170 173 var children = Element('border_tr').childNodes; … … 180 183 } 181 184 if (bolDelete || bolContinue){ 182 183 185 str_fechar = '\n' + get_lang('Reached maximum tab limit. Want to close this tab'); 186 var confirmacao = confirm(str_fechar); 184 187 if(confirmacao){ 185 188 bolContinue = false; 186 189 delete_border(num_child, 'false'); 187 190 break; 188 189 191 }else{ 192 return 'maximo'; 190 193 } 191 194 } 192 195 } 193 196 } 194 }else{ 197 }else{ 195 198 alert(get_lang('Reached maximum tab limit') + str_continue ); 196 199 return 'maximo'; 197 200 } 198 201 } 199 200 201 202 203 204 205 202 203 if (! id_value){ // Is new message? 204 var ID = parseInt(BordersArray[(BordersArray.length-1)].sequence) + 1; 205 if(isNaN(ID)){ 206 var aux = BordersArray[(BordersArray.length-1)].sequence.split("_"); 207 ID = parseInt(aux[1]) + 1; 208 } 206 209 }else 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 borderTitle = borderTitle ? borderTitle : id_value ? get_lang("No Subject") : " ";246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 210 { 211 if (Element("border_id_"+id_value)) // It's opened already! 212 return alternate_border(id_value); 213 214 var ID = id_value; 215 if(isNaN(ID) && ID.indexOf("search_local") >= 0){ 216 if(current_folder.indexOf("local") >= 0) 217 openTab.imapBox[ID] = current_folder; 218 else 219 openTab.imapBox[ID] = 'local_search'; 220 }else if(isNaN(ID) && ID.indexOf("search_") >= 0){ 221 if(current_folder.indexOf("local") < 0) 222 openTab.imapBox[ID] = current_folder; 223 else 224 openTab.imapBox[ID] = 'search'; 225 }else if( (currentTab != 0) && isNaN(currentTab) && (currentTab.indexOf("search") >= 0) && (ID.indexOf("msg") < 0) ) { 226 var id_border = currentTab.replace(/[a-zA-Z_]+/, ""); 227 ID_TR = ID.toString().substr(0,ID.toString().indexOf("_r")); 228 var tr = Element(ID_TR) ? Element(ID_TR) : Element(ID_TR+"_s"+id_border); 229 openTab.imapBox[ID] = (tr.getAttribute('name') == null?get_current_folder():tr.getAttribute('name')); 230 }else 231 openTab.imapBox[ID] = current_folder; 232 } 233 td = document.createElement("TD"); 234 td.id="border_id_" + ID; 235 if(resize) 236 { 237 td.setAttribute("width", parseInt(resize)+"px"); 238 td.style.width = parseInt(resize)+"px"; 239 } 240 else 241 td.setAttribute("width", "200px"); 242 243 td.setAttribute("align", "right"); 244 td.onclick = function(){alternate_border(ID);resizeWindow()}; 245 td.setAttribute("noWrap","true"); 246 td.setAttribute("role",get_current_folder()); 247 td.title = borderTitle; 248 borderTitle = borderTitle ? borderTitle : id_value ? get_lang("No Subject") : " " ; 249 td.value = borderTitle; 250 if (borderTitle.length > 21) 251 borderTitle = borderTitle.substring(0,21) + "..."; 252 253 if ( resize ) 254 borderTitle = borderTitle.substring(0, resize*0.08); 255 256 var cc = search; 257 if(!cc){ 258 if(isNaN(ID)){ 259 var is_local = ID.match('.*_local_.*'); 260 if(!is_local) 261 cc = document.getElementById("em_message_search").value; 262 else{ 263 if (currentTab == 0) 264 cc = ""; 265 else 266 cc = document.getElementsByName(currentTab)[0].value; 267 } 268 }else{ 269 cc =""; 270 } 271 } 272 td.innerHTML = "<div><div id='font_border_id_" + ID+"' class='font-menu'>" + 270 273 borderTitle + 271 274 "</div>\n\ … … 273 276 <img onmousedown='javascript:return false' style='cursor:pointer' onclick=delete_border('" + ID + "','false') src='templates/"+template+"/images/close_button.gif'/>\n\ " + 274 277 "</div>\n\ " + 275 "<input type=\"hidden\" name=\""+ ID+"\" value=\""+cc+"\"></div>"; 276 bb = document.getElementById("border_blank"); 277 parent_bb = bb.parentNode; //Pego o tbody 278 parent_bb.insertBefore(td, bb); 279 280 if((typeof(id_value) == 'string') && id_value.match(/_r/)){ 281 $(td).draggable({ 282 start : function(){ 283 $('.upper, .lower').show(); 284 $(".lower").css("top", ($("#content_folders").height()-18) + $("#content_folders").offset().top); 285 if($(".shared-folders").length){ 286 $(".shared-folders").parent().find('.folder:not(".shared-folders")').droppable({ 287 over : function(a, b){ 288 //SETA BORDA EM VOLTA DA PASTA 289 over = $(this); 290 $(this).addClass("folder-over"); 291 if(($(this)[0] != $(this).parent().find(".head_folder")[0])) 292 if($(this).prev()[0]) 293 if($(this).parent().find(".expandable-hitarea")[0] == $(this).prev()[0]){ 294 setTimeout(function(){ 295 if(over.hasClass("folder-over")) 296 over.prev().trigger("click"); 297 }, 500); 298 299 } 300 //$("#content_folders").stop().scrollTo($(this), {axis:'y', margin:true, offset:-50, duration:400}); 301 }, 302 out : function(){ 303 //RETIRA BORDA EM VOLTA DA PASTA 304 $(this).removeClass("folder-over"); 305 }, 306 //accept: ".draggin_mail", 307 drop : function(event, ui){ 308 $(this).css("border", "0"); 309 if($(this).parent().attr('id') == undefined){ 310 var folder_to = 'INBOX'; 311 var to_folder_title = get_lang("Inbox"); 312 }else{ 313 var folder_to = $(this).parent().attr('id'); 314 var to_folder_title = $(this).attr('title'); 315 } 316 var folder_to_move = ui.draggable.parent().attr('id'); 317 var border_id = ui.draggable.find("input[type=hidden]").attr("name"); 318 if(folder_to_move == "border_tr"){ 319 var id_msg = border_id.split("_")[0]; 320 folder = $("#input_folder_"+border_id+"_r")[0] ? $("#input_folder_"+border_id+"_r").val() : (openTab.imapBox[border_id] ? openTab.imapBox[border_id]:get_current_folder()); 321 move_msgs2(folder, id_msg, border_id, folder_to, to_folder_title,true); 322 return refresh(); 323 } 324 } 325 }); 326 } 327 }, 328 stop :function(){ 329 $('.upper, .lower').hide(); 330 $(".shared-folders").parent().find(".folder").droppable("destroy"); 331 }, 332 helper: function(event){ 333 if( borderTitle.length > 18 ) 334 return $("<td>"+DataLayer.render('../prototype/modules/mail/templates/draggin_box.ejs', {texto : borderTitle.substring(0,18) + "...", type: "messages"})+"</td>"); 335 else 336 return $("<td>"+DataLayer.render('../prototype/modules/mail/templates/draggin_box.ejs', {texto : borderTitle, type: "messages"})+"</td>"); 337 }, 338 delay: 150, 339 cursorAt: {top: 5, left: 56}, 340 refreshPositions: true , 341 containment: "#divAppbox" 342 }); 343 } 344 //_dragArea.makeDragged(td, id_value,td.value); 345 346 BordersArray[BordersArray.length] = new setBorderAttributes(ID); 347 348 var div = document.createElement("DIV"); 349 div.id = "content_id_" + ID; 350 div.className = "conteudo"; 351 div.style.display=''; 352 353 div.style.overflow = "hidden"; 354 355 Element("exmail_main_body").insertBefore(div,Element("footer_menu")); 356 if (!is_ie) 357 resizeWindow(); 358 alternate_border(ID); 278 "<input type=\"hidden\" name=\""+ ID+"\" value=\""+cc+"\"></div>"; 279 bb = document.getElementById("border_blank"); 280 parent_bb = bb.parentNode; //Pego o tbody 281 parent_bb.insertBefore(td, bb); 282 283 if((typeof(id_value) == 'string') && id_value.match(/_r/)){ 284 $(td).draggable({ 285 start : function(){ 286 $('.upper, .lower').show(); 287 $(".lower").css("top", ($("#content_folders").height()-18) + $("#content_folders").offset().top); 288 /* Habilitar anexar mensagem por drag-and-drop, se a aba atual for editável, 289 ou seja, nem de leitura (2), nem de lista de mensagens (0):*/ 290 var current_tab_type = openTab.type[currentTab]; 291 if (current_tab_type != 0 && current_tab_type != 2){ 292 var dropzone = $("#fileupload_msg" + currentTab + "_droopzone"); 293 dropzone.show(); 294 dropzone.prev().hide(); 295 dropzone.droppable({ 296 over: function (event, ui){ 297 dropzone.addClass('hover in'); 298 $(ui.helper).find(".draggin-folder,.draggin-mail").css("color", "green"); 299 }, 300 out: function (event, ui) { 301 dropzone.removeClass('hover in'); 302 $(ui.helper).find(".draggin-folder,.draggin-mail").css("color", ""); 303 }, 304 drop: function (event, ui) { 305 var border_id = ui.draggable.find("input[type=hidden]").attr("name"); 306 var id_msg = border_id.split("_")[0]; 307 var folder = $("#input_folder_"+border_id+"_r")[0] ? $("#input_folder_"+border_id+"_r").val() : (openTab.imapBox[border_id] ? openTab.imapBox[border_id]:get_current_folder()); 308 attach_message(folder, id_msg); /* Anexa a mensagem especificada (por folder e id_msg) 309 na mensagem sendo criada.*/ 310 } 311 }); 312 } 313 if($(".shared-folders").length){ 314 $(".shared-folders").parent().find('.folder:not(".shared-folders")').droppable({ 315 over : function(a, b){ 316 //SETA BORDA EM VOLTA DA PASTA 317 $(b.helper).find(".draggin-folder,.draggin-mail").css("color", "green"); 318 over = $(this); 319 $(this).addClass("folder-over"); 320 if(($(this)[0] != $(this).parent().find(".head_folder")[0])) 321 if($(this).prev()[0]) 322 if($(this).parent().find(".expandable-hitarea")[0] == $(this).prev()[0]){ 323 setTimeout(function(){ 324 if(over.hasClass("folder-over")) 325 over.prev().trigger("click"); 326 }, 500); 327 328 } 329 //$("#content_folders").stop().scrollTo($(this), {axis:'y', margin:true, offset:-50, duration:400}); 330 }, 331 out : function(a,b){ 332 //RETIRA BORDA EM VOLTA DA PASTA 333 $(b.helper).find(".draggin-folder,.draggin-mail").css("color", ""); 334 $(this).removeClass("folder-over"); 335 }, 336 //accept: ".draggin_mail", 337 drop : function(event, ui){ 338 $(this).css("border", "0"); 339 if($(this).parent().attr('id') == undefined){ 340 var folder_to = 'INBOX'; 341 var to_folder_title = get_lang("Inbox"); 342 }else{ 343 var folder_to = $(this).parent().attr('id'); 344 var to_folder_title = $(this).attr('title'); 345 } 346 var folder_to_move = ui.draggable.parent().attr('id'); 347 var border_id = ui.draggable.find("input[type=hidden]").attr("name"); 348 if(folder_to_move == "border_tr"){ 349 var id_msg = border_id.split("_")[0]; 350 folder = $("#input_folder_"+border_id+"_r")[0] ? $("#input_folder_"+border_id+"_r").val() : (openTab.imapBox[border_id] ? openTab.imapBox[border_id]:get_current_folder()); 351 move_msgs2(folder, id_msg, border_id, folder_to, to_folder_title,true); 352 return refresh(); 353 } 354 } 355 }); 356 } 357 }, 358 stop :function(){ 359 $('.upper, .lower').hide(); 360 $(".shared-folders").parent().find(".folder").droppable("destroy"); 361 /* Habilitar anexar mensagem por drag-and-drop, se a aba atual for editável, 362 ou seja, nem de leitura (2), nem de lista de mensagens (0):*/ 363 var current_tab_type = openTab.type[currentTab]; 364 if (current_tab_type != 0 && current_tab_type != 2){ 365 var dropzone = $("#fileupload_msg" + currentTab + "_droopzone"); 366 dropzone.hide(); 367 dropzone.prev().show(); 368 } 369 }, 370 helper: function(event){ 371 if( borderTitle.length > 18 ) 372 return $("<td>"+DataLayer.render('../prototype/modules/mail/templates/draggin_box.ejs', {texto : borderTitle.substring(0,18) + "...", type: "messages"})+"</td>"); 373 else 374 return $("<td>"+DataLayer.render('../prototype/modules/mail/templates/draggin_box.ejs', {texto : borderTitle, type: "messages"})+"</td>"); 375 }, 376 delay: 150, 377 cursorAt: {top: 5, left: 56}, 378 refreshPositions: true , 379 containment: "#divAppbox" 380 }); 381 } 382 //_dragArea.makeDragged(td, id_value,td.value); 383 384 BordersArray[BordersArray.length] = new setBorderAttributes(ID); 385 386 var div = document.createElement("DIV"); 387 div.id = "content_id_" + ID; 388 div.className = "conteudo"; 389 div.style.display=''; 390 391 div.style.overflow = "hidden"; 392 393 Element("exmail_main_body").insertBefore(div,Element("footer_menu")); 394 if (!is_ie) 395 resizeWindow(); 396 alternate_border(ID); 359 397 uidsSave[ID] = []; 360 398 saveBorderError[ID] = false; 361 399 return ID; 362 400 } 363 401 364 402 function resize_borders() 365 403 { 366 367 368 369 370 371 404 var numBorders = count_borders(); 405 406 if (numBorders > 8) 407 return false; 408 409 return redim_borders(numBorders+1); 372 410 } 373 411 374 412 function count_borders() 375 413 { 376 377 378 379 380 381 382 383 414 var numBorders = 0; 415 var children = Element('border_tr').childNodes; 416 for (var i=0; i<children.length; i++) { 417 if ((children[i].nodeName === 'TD') && (children[i].id!=='border_id_0') && (children[i].id!=='border_blank')) 418 numBorders++; 419 } 420 421 return numBorders; 384 422 } 385 423 386 424 function redim_borders(numBorders) 387 425 { 388 389 390 391 392 393 394 395 396 397 398 399 400 426 var children = Element('border_tr').childNodes; 427 var clientWidth = (window.document.body.clientWidth - findPosX(Element("exmail_main_body"))) - Element("border_id_0").clientWidth - 30; 428 var newWidthTD = (clientWidth/numBorders)-6; 429 newWidthTD = newWidthTD > 200 ? 200 : (newWidthTD < 50 ? 50 : newWidthTD); 430 children = Element('border_tr').childNodes; 431 for (var i=0; i<children.length; i++) { 432 if ((children[i].nodeName === 'TD') && (children[i].id!=='border_id_0') && (children[i].id!=='border_blank')){ 433 $(children[i]).css("width", newWidthTD); 434 $(children[i]).find('div:first').css("width", newWidthTD); 435 set_border_caption(children[i].id, children[i].title, newWidthTD); 436 } 437 } 438 return newWidthTD; 401 439 } 402 440 … … 411 449 border_width = border.clientWidth; 412 450 } 413 451 var caption = ""; 414 452 if (border != null){ 415 416 417 418 453 Element("font_"+border.id).style.width = (border_width - 35)+'px'; 454 Element("font_"+border.id).innerHTML = title; 455 } 456 return(title); 419 457 } 420 458 … … 442 480 'type': 'question', 443 481 'overlay_opacity': '0.5', 444 482 'custom_class': 'custom-zebra-filter', 445 483 'buttons': buttons, 446 484 'width' : width, 447 485 'onClose': function(clicked) { 448 449 450 451 452 453 486 if(clicked == 'Cancelar'){ 487 if (RichTextEditor.plain[id] != true) 488 setTimeout("RichTextEditor.focus("+ID+")",100); 489 else 490 $('#body_'+ID).focus(); 491 } 454 492 if(clicked == 'Descartar alterações' || clicked == 'Descartar alterações e anexos' ) { 455 493 if (openTab.imapBox[ID] && !openTab.toPreserve[ID]) … … 477 515 $("#cc_"+ID).focus(); 478 516 else if ($("#tr_cco_"+ID).css('display') != 'none' && $.trim($("#cco_"+ID).val()) == "") 479 $("#cco_"+ID).focus(); 517 $("#cco_"+ID).focus(); 480 518 else if ($.trim($("#subject_"+ID).val()) == "") 481 519 $("#subject_"+ID).focus(); … … 494 532 }})}, 300); 495 533 } 496 534 497 535 } 498 536 499 537 function editTest(ID){ 500 538 var body = document.getElementById('body_'+ ID); 501 539 var content = $('#content_id_'+ ID); 502 540 if (body) 503 541 { … … 522 560 } 523 561 524 if($("#content_id_"+ currentTab+" textarea[name=input_to]").length ){525 if($("#content_id_"+ currentTab+" .save").is(':disabled') ) {562 if($("#content_id_"+ID+" textarea[name=input_to]").length ){ 563 if($("#content_id_"+ID+" .save").is(':disabled') ) { 526 564 close_delete(ID, msg_sent); 527 } else if( $("#content_id_"+ currentTab+" .save").is(':enabled') ) {565 } else if( $("#content_id_"+ID+" .save").is(':enabled') ) { 528 566 return(draftTests(ID, msg_sent)); 529 567 } … … 537 575 538 576 /*var bolExecuteClose = true; 539 540 577 var borderElem = Element("border_id_" + ID); 578 if (borderElem){ 541 579 borderElem.onclick = null; // It's avoid a FF3 bug 542 580 }else{ 543 581 return false; 544 582 } 545 546 583 if (msg_sent == 'false') 584 { 547 585 if (editTest(ID)){ 548 586 bolExecuteClose = false; … … 550 588 return(draftTests(ID, msg_sent)); 551 589 } 552 590 } 553 591 554 592 … … 556 594 { 557 595 close_delete(ID, msg_sent); 558 559 596 } 597 delete(openTab.type[ID]); 560 598 return true;*/ 561 599 … … 564 602 function close_delete(ID, msg_sent) 565 603 { 566 604 openTab.toPreserve[ID] = false; 567 605 // Limpa o autosave 568 606 if (preferences.auto_save_draft == 1 && autoSaveControl.timer[ID] !== null ) … … 573 611 //////////////////////////////// 574 612 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 613 hold_session = false; 614 if (exist_className(Element('border_id_'+ID),'menu-sel')) 615 { 616 if (BordersArray[BordersArray.length-2].sequence == ID) 617 this.alternate_border(0); 618 else 619 this.alternate_border(BordersArray[BordersArray.length-2].sequence); 620 } 621 622 // Remove TD, title 623 border = Element('border_id_' + ID); 624 border.parentNode.removeChild(border); 625 var j=0; 626 var new_BordersArray = new Array(); 627 for (i=0;i<BordersArray.length;i++) 628 if (document.getElementById(BordersArray[i].border_id) != null){ 629 new_BordersArray[j] = BordersArray[i]; 630 j++; 631 } 632 if(j == 1) 633 Element("footer_menu").style.display = ''; 634 BordersArray = new_BordersArray; 635 636 // Remove Div Content 637 content = Element('content_id_' + ID); 638 content.parentNode.removeChild(content); 639 if(is_webkit) 640 resizeWindow(); 641 RichTextEditor.destroy( 'body_'+ID ); 604 642 delete msgAttachments[ID]; 605 643 //Caso for uma mensagem anexada tem que deletar ela da lixeira apos fechar a aba 606 644 var isPartMsg = false; 607 608 645 if(!parseInt(id2)) 646 return; 609 647 var id2 = ID.replace('_r',''); 610 648 for(var ii = 0; ii < partMsgs.length; ii++) … … 620 658 /////////////////////////////////////////////////////////////////////////////////// 621 659 622 660 return true; 623 661 } 624 662 625 663 function getTabPrefix() { // define o prefixo para os checkboxes das mensagens 626 627 628 629 664 if (typeof(currentTab)!='number') 665 return currentTab+"_"; 666 else 667 return ""; 630 668 } 631 669 632 670 function getMessageIdFromRowId(row_id) { // extrai o id da mensagem do id da linha 633 634 635 636 637 671 var p = row_id.search("_s"); 672 if (p>0) 673 return row_id.substr(0,p); 674 else 675 return row_id; 638 676 } 639 677 640 678 function getNumBoxFromTabId(tab_id) { // extrai o numBox do id da tab 641 642 643 644 645 646 647 679 if (typeof(tab_id)=='number') { 680 return tab_id; 681 } 682 else { 683 var p = tab_id.search(/[0-9]/); 684 return tab_id.substr(p); 685 } 648 686 } 649 687 … … 673 711 function listAttachment(ID) 674 712 { 675 return (typeof(msgAttachments[ID]) == 'undefined') ? '' : JSON.stringify(msgAttachments[ID]); 676 } 677 713 return (typeof(msgAttachments[ID]) == 'undefined') ? '' : JSON.stringify(msgAttachments[ID]); 714 } -
branches/2.5/expressoMail1_2/js/common_functions.js
r8080 r8232 694 694 } 695 695 696 /* 697 Abre o diálogo de edição de filtro na tela de criação de filtro, 698 com os dados da mensagem (remetente e assunto) pré-carregados. 699 */ 700 function filter_from_msg (msg) { 701 var html = DataLayer.render( BASE_PATH + 'modules/filters/init.ejs', {}); 702 initialize_container(html); 703 list_container = create_filter_dialog(); 704 render_new_rule(msg.from.email, html_entities(msg.subject)); 705 $('.expresso-window-container').dialog('open'); 706 } 696 707 697 708 function sharebox(){ … … 771 782 var number = id.replace(/_[a-zA-Z0-9]+/,""); 772 783 } 773 messages.push(onceOpenedHeadersMessages[folder_name][number] );784 messages.push(onceOpenedHeadersMessages[folder_name][number] || number); 774 785 } 775 786 … … 997 1008 abas_unseen = abas_unseen.match(/(<font.*?>){0,1} *([0-9]+) *(<\/font>){0,1}/)[2]; 998 1009 999 if (folder_unseen){ 1000 //folder_unseen.innerHTML = (parseInt(folder_unseen.innerHTML) + 1); 1001 1002 1003 1004 1005 }); 1006 } 1010 if (folder_unseen){ 1011 //folder_unseen.innerHTML = (parseInt(folder_unseen.innerHTML) + 1); 1012 /*Incrementa recursivamente o contador de mensagens*/ 1013 $('.selected').parents().find('> span.folder').not('.inbox').each(function(index,ui){ 1014 var unseen = $(ui).find('.folder_unseen:last'); 1015 unseen.html(parseInt(unseen.html(),10) + 1); 1016 }); 1017 } 1007 1018 else 1008 1019 { … … 1046 1057 if ((folder_unseen) && (parseInt(folder_unseen.innerHTML) > 1)) 1047 1058 { 1048 //folder_unseen.innerHTML = (parseInt(folder_unseen.innerHTML) - 1); 1049 /*Decrementa recursivamente o contador de mensagens*/ 1050 $('.selected').parents().find('> span.folder').not('.inbox').each(function(index,ui){ 1051 var unseen = $(ui).find('.folder_unseen:last'); 1052 unseen.html(parseInt(unseen.html(),10) - 1); 1053 }); 1059 //folder_unseen.innerHTML = (parseInt(folder_unseen.innerHTML) - 1); 1060 /*Decrementa recursivamente o contador de mensagens*/ 1061 $('.selected').parents().find('> span.folder').not('.inbox').each(function(index,ui){ 1062 var unseen = $(ui).find('.folder_unseen:last'); 1063 unseen.html(parseInt(unseen.html(),10) - 1); 1064 }); 1054 1065 } 1055 1066 else if (parseInt(folder_unseen.innerHTML) <= 1) -
branches/2.5/expressoMail1_2/js/connector.js
r8103 r8232 171 171 } 172 172 173 cConnector.prototype.unserializeArchiver = function(str) 174 { 175 _thisObject = this; 176 var matchB = function (str, iniPos) 177 { 178 var nOpen, nClose = iniPos; 179 do 180 { 181 nOpen = str.substr(nClose+1).search(/[0-9]\:\{/ ); 182 183 if (nOpen > 0) 184 nOpen = nOpen + nClose+3; 185 186 nClose = str.indexOf('}', nClose+1); 187 188 if (nOpen < 0) 189 { 190 return nClose; 191 } 192 if (nOpen < nClose ) 193 { 194 nClose = matchB(str, nOpen); 195 } 196 } while (nOpen < nClose); 197 198 return nClose; 199 } 200 201 var f = function (str) 202 { 203 switch (str.charAt(0)) 204 { 205 case 'a': 206 207 var data = new Array(); 208 var n = parseInt( str.substring( str.indexOf(':')+1, str.indexOf(':',2) ) ); 209 var arrayContent = str.substring(str.indexOf('{')+1, str.lastIndexOf('}')); 210 211 for (var i = 0; i < n; i++) 212 { 213 var pos = 0; 214 215 /* Process Index */ 216 var indexStr = arrayContent.substr(pos, arrayContent.indexOf(';')+1); 217 var index = f(indexStr); 218 pos = arrayContent.indexOf(';', pos)+1; 219 220 /* Process Content */ 221 var part = null; 222 switch (arrayContent.charAt(pos)) 223 { 224 case 'a': 225 var pos_ = matchB(arrayContent, arrayContent.indexOf('{', pos))+1; 226 part = arrayContent.substring(pos, pos_); 227 pos = pos_; 228 data[index] = f(part); 229 break; 230 231 case 's': 232 var pval = arrayContent.indexOf(':', pos+2); 233 var val = parseInt(arrayContent.substring(pos+2, pval)); 234 pos = pval + val + 4; 235 data[index] = arrayContent.substr(pval+2, val); 236 break; 237 238 default: 239 part = arrayContent.substring(pos, arrayContent.indexOf(';', pos)+1); 240 pos = arrayContent.indexOf(';', pos)+1; 241 data[index] = f(part); 242 break; 243 } 244 arrayContent = arrayContent.substr(pos); 245 } 246 break; 247 248 case 's': 249 var pos = str.indexOf(':', 2); 250 var val = parseInt(str.substring(2,pos)); 251 var data = str.substr(pos+2, val); 252 str = str.substr(pos + 4 + val); 253 break; 254 255 case 'i': 256 case 'd': 257 var pos = str.indexOf(';'); 258 var data = parseInt(str.substring(2,pos)); 259 str = str.substr(pos + 1); 260 break; 261 262 case 'N': 263 var data = null; 264 str = str.substr(str.indexOf(';') + 1); 265 break; 266 267 case 'b': 268 var data = str.charAt(2) == '1' ? true : false; 269 break; 270 } 271 return data; 272 } 273 274 return f(str); 275 } 276 173 cConnector.prototype.unserializeArchiver = function(str) 174 { 175 _thisObject = this; 176 var matchB = function (str, iniPos) 177 { 178 var nOpen, nClose = iniPos; 179 do 180 { 181 nOpen = str.substr(nClose+1).search(/[0-9]\:\{/ ); 182 183 if (nOpen > 0) 184 nOpen = nOpen + nClose+3; 185 186 nClose = str.indexOf('}', nClose+1); 187 188 if (nOpen < 0) 189 { 190 return nClose; 191 } 192 if (nOpen < nClose ) 193 { 194 nClose = matchB(str, nOpen); 195 } 196 } while (nOpen < nClose); 197 198 return nClose; 199 } 200 201 var f = function (str) 202 { 203 switch (str.charAt(0)) 204 { 205 case 'a': 206 207 var data = new Array(); 208 var n = parseInt( str.substring( str.indexOf(':')+1, str.indexOf(':',2) ) ); 209 var arrayContent = str.substring(str.indexOf('{')+1, str.lastIndexOf('}')); 210 211 for (var i = 0; i < n; i++) 212 { 213 var pos = 0; 214 215 /* Process Index */ 216 var indexStr = arrayContent.substr(pos, arrayContent.indexOf(';')+1); 217 var index = f(indexStr); 218 pos = arrayContent.indexOf(';', pos)+1; 219 220 /* Process Content */ 221 var part = null; 222 switch (arrayContent.charAt(pos)) 223 { 224 case 'a': 225 var pos_ = matchB(arrayContent, arrayContent.indexOf('{', pos))+1; 226 part = arrayContent.substring(pos, pos_); 227 pos = pos_; 228 data[index] = f(part); 229 break; 230 231 case 's': 232 var pval = arrayContent.indexOf(':', pos+2); 233 var val = parseInt(arrayContent.substring(pos+2, pval)); 234 pos = pval + val + 4; 235 data[index] = arrayContent.substr(pval+2, val); 236 break; 237 238 default: 239 part = arrayContent.substring(pos, arrayContent.indexOf(';', pos)+1); 240 pos = arrayContent.indexOf(';', pos)+1; 241 data[index] = f(part); 242 break; 243 } 244 arrayContent = arrayContent.substr(pos); 245 } 246 break; 247 248 case 's': 249 var pos = str.indexOf(':', 2); 250 var val = parseInt(str.substring(2,pos)); 251 var data = str.substr(pos+2, val); 252 str = str.substr(pos + 4 + val); 253 break; 254 255 case 'i': 256 case 'd': 257 var pos = str.indexOf(';'); 258 var data = parseInt(str.substring(2,pos)); 259 str = str.substr(pos + 1); 260 break; 261 262 case 'N': 263 var data = null; 264 str = str.substr(str.indexOf(';') + 1); 265 break; 266 267 case 'b': 268 var data = str.charAt(2) == '1' ? true : false; 269 break; 270 } 271 return data; 272 } 273 274 return f(str); 275 } 276 277 277 //Unserialize Data Method 278 278 cConnector.prototype.unserialize = function(str) … … 290 290 291 291 nClose = (str.substr(nClose+1) == '}' || str.substr(nClose+1,1) == '}') ? nClose +1 : str.substr(nClose+1).search(/[0-9\"]\;\}/ ) + nClose + 3; 292 292 293 293 if (nOpen < 0) 294 294 { … … 554 554 { 555 555 var div = document.getElementById('divProgressBar'); 556 557 if(div) 558 { 559 div.style.visibility = 'hidden'; 560 this.isVisibleBar = false; 561 } 556 557 if(div) 558 { 559 div.style.visibility = 'hidden'; 560 this.isVisibleBar = false; 561 } 562 562 } 563 563 564 564 cConnector.prototype.showProgressBar = function(){ 565 565 566 566 var div = document.getElementById('divProgressBar'); 567 if(div) 568 { 569 div.style.visibility = 'visible'; 570 this.isVisibleBar = true; 571 } 567 if(div) 568 { 569 div.style.visibility = 'visible'; 570 this.isVisibleBar = true; 571 } 572 572 } 573 573 -
branches/2.5/expressoMail1_2/js/doiMenuData.js
r8127 r8232 142 142 function loadMenu(){ 143 143 var archive = ""; 144 if(use_local_messages != 0){ 145 archive = {"name": get_lang("Archive"), "icon": "archive", callback: function(key, opt){ proxy_mensagens.archive_message('inbox', 'get_selected_messages'); }} 146 }else{ 147 archive = ""; 144 145 if( preferences['use_followupflags_and_labels'] == "1" ) 146 var labelItems = getLabels(); 147 148 var revertSortBox = function(){ 149 if (search_box_type == "UNSEEN") sort_box_reverse = sort_box_reverse ? 0 : 1; 148 150 } 149 var labelItems = getLabels();150 151 151 152 $.contextMenu({ … … 156 157 return true; 157 158 } 158 if( current.indexOf("local") == -1){ 159 archive = {"name": get_lang("Archive"), "icon": "archive", callback: function(key, opt){ proxy_mensagens.archive_message(get_current_folder(), 'get_selected_messages'); }} 160 161 } else { 162 archive = {"name": get_lang("Unarchive"), "icon": "archive", callback: function(key, opt){ proxy_mensagens.unarchive_message(get_current_folder(), 'get_selected_messages'); }} 163 } 164 var itensNotLocal = { 165 "label": { "name": get_lang("Labels"), "items": labelItems}, 166 "follouwpflag":{"name": get_lang("Follow up"), callback: function(key, opt){ configureFollowupflag(); } }, 167 "sep2": "---------" 168 } 159 if(use_local_messages != 0){ 160 if( current.indexOf("local") != -1){ 161 archive = {"name": get_lang("Unarchive"), "icon": "archive", callback: function(key, opt){ proxy_mensagens.unarchive_message('inbox', 'get_selected_messages'); }} 162 } else { 163 archive = {"name": get_lang("Archive"), "icon": "archive", callback: function(key, opt){ proxy_mensagens.unarchive_message('inbox', 'get_selected_messages'); }} 164 } 165 } 166 167 if( preferences['use_followupflags_and_labels'] == "1" ) 168 var itensNotLocal = { 169 "label": { "name": get_lang("Labels"), "items": labelItems}, 170 "follouwpflag":{"name": get_lang("Follow up"), callback: function(key, opt){ configureFollowupflag(); } }, 171 "sep2": "---------" 172 } 169 173 170 174 var items= { 171 "flagSeen": {"name": get_lang("Mark as") + " " + get_lang('seen'), "icon": "seen", callback: function(key, opt){ proxy_mensagens.proxy_set_messages_flag('seen','get_selected_messages'); }},172 "flagUnseen": {"name": get_lang("Mark as") + " " + get_lang('unseen'), "icon": "unseen", callback: function(key, opt){ proxy_mensagens.proxy_set_messages_flag('unseen','get_selected_messages'); }},173 "flagFlagged": {"name": get_lang("Mark as") + " " + get_lang('important'), "icon": "important", callback: function(key, opt){ proxy_mensagens.proxy_set_messages_flag('flagged','get_selected_messages'); }},174 "flagUnflagged": {"name": get_lang("Mark as") + " " + get_lang('normal'), callback: function(key, opt){ proxy_mensagens.proxy_set_messages_flag('unflagged','get_selected_messages'); }},175 "flagSeen": {"name": get_lang("Mark as") + " " + get_lang('seen'), "icon": "seen", callback: function(key, opt){ revertSortBox(); proxy_mensagens.proxy_set_messages_flag('seen','get_selected_messages'); }}, 176 "flagUnseen": {"name": get_lang("Mark as") + " " + get_lang('unseen'), "icon": "unseen", callback: function(key, opt){ revertSortBox(); proxy_mensagens.proxy_set_messages_flag('unseen','get_selected_messages'); }}, 177 "flagFlagged": {"name": get_lang("Mark as") + " " + get_lang('important'), "icon": "important", callback: function(key, opt){ revertSortBox(); proxy_mensagens.proxy_set_messages_flag('flagged','get_selected_messages'); }}, 178 "flagUnflagged": {"name": get_lang("Mark as") + " " + get_lang('normal'), callback: function(key, opt){ revertSortBox(); proxy_mensagens.proxy_set_messages_flag('unflagged','get_selected_messages'); }}, 175 179 "sep1": "---------" 176 180 } 177 181 182 // Desabilita a opção de criar filtro a partir da mensagem, caso mais de uma mensagem esteja selecionada: 183 var is_filterFromMsg_disabled = function () { 184 var base_selector = ".table_box tbody tr.selected_msg"; 185 return ($(base_selector).length > 1) || ($(base_selector + " td span").text().indexOf(get_lang("Draft")) > -1); 186 } 187 178 188 var lastItens = { 179 189 "move": {"name": get_lang("Move to")+"...", "icon": "move", callback: function(key, opt){ wfolders.makeWindow('', 'move_to'); }}, 180 190 "remove": {"name": get_lang("Delete"), "icon": "delete", callback: function(key, opt){ proxy_mensagens.delete_msgs('null','selected','null'); }}, 181 191 "export": {"name": get_lang("Export"), "icon": "export", callback: function(key, opt){ proxy_mensagens.export_all_messages(); }}, 192 /*Abre o diálogo de criação de filtro a partir da mensagem:*/ 193 "filterFromMsg": { 194 "name": get_lang("Create filter from message"), 195 "icon": "filter", 196 callback: function (key, opt) { 197 var msg_number = get_selected_messages(); 198 var msg = onceOpenedHeadersMessages[current_folder][msg_number]; 199 if (msg !== undefined) 200 { 201 filter_from_msg(msg); 202 } 203 }, 204 disabled: is_filterFromMsg_disabled() 205 }, 182 206 "archive": archive 183 207 } … … 318 342 } else { 319 343 var labeleds = (messageInfo.forceIcon ? messageInfo.labels : DataLayer.get('labeled', { 320 criteria: {deepness: '2'},321 344 criteria: {deepness: 2}, 345 filter: [ 322 346 'AND', 323 347 ['=', 'folderName', msg_folder], … … 337 361 338 362 for (var i=0; i < labeleds.length; i++){ 339 menuItems[ labeleds[i].id ? labeleds[i].id : labeleds[i].label.id] = labeleds[i].id ? labeleds[i] : labeleds[i].label;363 menuItems[ (labeleds[i].id ? labeleds[i].id : labeleds[i].label.id) ] = labeleds[i].label ? labeleds[i].label : labeleds[i]; 340 364 } 341 365 } else { … … 351 375 menuItensLabel[index] = {type: "label", customName: menuItems[index].name, id: msg_folder+"/"+msg_number+"#"+index}; 352 376 } 377 378 353 379 $.contextMenu.types.label = function(item, opt, root) { 354 380 $('<span>'+item.customName+'</span><span class="removeLabeled" title="'+get_lang("Remove Label")+'">x</span>') -
branches/2.5/expressoMail1_2/js/draw_api.js
r8188 r8232 106 106 } 107 107 cExecute ("$this.imap_functions.get_folders_list&folder="+current_folder, update_tree_folders); 108 108 109 } 109 110 … … 239 240 var nn = new dNode({id:folders[i].folder_id, caption:lang_folder(folders[i].folder_name) + '<font style=color:red> (</font><span id="dftree_'+folders[i].folder_id+'_unseen" style=color:red>'+folders[i].folder_unseen+'</span><font style=color:red>)</font>', onClick:"change_folder('"+folders[i].folder_id+"','"+folders[i].folder_name+"')", plusSign:folders[i].folder_hasChildren}); 240 241 241 if( folders[i].folder_name.toLowerCase() == 'inbox' ) 242 Element('new_m').innerHTML = '<font style="color:red">' + folders[i].folder_unseen + '</font>'; 242 243 // if( folders[i].folder_name.toLowerCase() == 'inbox' ) 244 // Element('new_m').innerHTML = '<font style="color:black">' + folders[i].folder_unseen + '</font>'; 243 245 } 244 246 else … … 471 473 } 472 474 } 473 474 outOfficeVerify();475 475 } 476 476 … … 646 646 } 647 647 draw_new_tree_folder(false, forceLoadFolders); 648 draw_tree_labels(); 648 649 if( preferences['use_followupflags_and_labels'] == "1" ) 650 draw_tree_labels(); 651 649 652 if(Element("table_quota")) 650 653 connector.loadScript("InfoQuota"); … … 655 658 656 659 var handler_draw_box = function(data){ 660 populateSelectedMsgs(data.messagesIds); 657 661 draw_box(data, 'INBOX', true); 658 662 //alternate_border(0); … … 661 665 // Action on change folders. 662 666 function change_folder(folder, folder_name){ 663 if (openTab.imapBox[0] != folder) 667 if (parseInt(preferences.use_dynamic_contacts) && $(".to").length && $(".to").data( "autocomplete" ).menu.active){ 668 $(".to").data( "autocomplete" ).close(); 669 } 670 if (openTab.imapBox[0] != folder) 664 671 { 665 672 selectAllFolderMsgs(false); … … 667 674 var handler_draw_box = function(data) 668 675 { 669 676 populateSelectedMsgs(data.messagesIds); 670 677 if(!verify_session(data)) 671 678 return; … … 683 690 return true; 684 691 } 692 685 693 //MAILARCHIVE 686 694 //se for pasta local 687 695 if (/^local_messages/.test(current_folder)) { 688 696 $(".folders-loading").removeClass("folders-loading"); //remove o icone de loading ao clicar nas pastas locais 689 }690 else { //se não, processamento normal da pasta691 $.ajax({692 async: false,693 url: "controller.php?" + $.param( {action: "$this.imap_functions.getMessagesIds",694 folder: folder,695 msg_range_begin: "0",696 msg_range_end: "0",697 sort_box_type: "SORTARRIVAL",698 search_box_type: search_box_type,699 sort_box_reverse: "1"700 }),701 success: function(data){702 data = connector.unserialize(data);703 if(data){704 var _data = {};705 $.each(data,function(index,value){706 if (data[index]){707 _data[data[index]] = data[index];708 }709 });710 populateSelectedMsgs(_data);711 }712 },713 beforeSend: function( jqXHR, settings ){714 connector.showProgressBar();715 },716 complete: function( jqXHR, settings ){717 connector.hideProgressBar();718 }719 });720 697 } 721 698 proxy_mensagens.messages_list(current_folder,1,preferences.max_email_per_page,sort_box_type,search_box_type,sort_box_reverse,preferences.preview_msg_subject,preferences.preview_msg_tip,handler_draw_box); … … 917 894 if (document.getElementById("table_message_header_box_"+numBox).emptyBody) 918 895 return; 919 objCell.style.cursor = "col-resize"; 920 $(objCell).next().css('cursor','col-resize'); 921 896 objCell.style.cursor = "col-resize"; 897 $(objCell).next().css('cursor','col-resize'); 898 922 899 if (objCell.style.cursor == "col-resize" && detectLeftButton(ev)) { 923 900 var cellIndex = objCell.cellIndex; … … 942 919 943 920 document.getElementById("table_message_ruler").style.left = cellOffset+cellWidth; 944 syncColumns(); 921 syncColumns(); 945 922 } 946 923 ev.returnValue = false; … … 1649 1626 $(".lower").css("top", ($("#content_folders").height()-18) + $("#content_folders").offset().top); 1650 1627 if($(".shared-folders").length){ 1651 $(".shared-folders ").parent().find('.folder:not(".shared-folders")').droppable({1628 $(".shared-folders,.head_folder").parent().find('.folder:not(".shared-folders")').droppable({ 1652 1629 over : function(a, b){ 1653 1630 //SETA BORDA EM VOLTA DA PASTA 1631 $(b.helper).find(".draggin-folder,.draggin-mail").css("color", "green"); 1654 1632 over = $(this); 1655 1633 $(this).addClass("folder-over"); … … 1664 1642 } 1665 1643 }, 1666 out : function( ){1644 out : function(a,b){ 1667 1645 //RETIRA BORDA EM VOLTA DA PASTA 1646 $(b.helper).find(".draggin-folder,.draggin-mail").css("color", ""); 1668 1647 $(this).removeClass("folder-over"); 1669 1648 }, … … 1723 1702 1724 1703 $(this).addClass("selected_msg"); 1725 } 1726 updateSelectedMsgs($(this).find("input:checkbox").is(':checked'),$(this).attr("id")); 1727 } 1704 } 1705 updateSelectedMsgs($(this).find("input:checkbox").is(':checked'),$(this).attr("id")); 1706 } else if ( typeof $(event.target).attr("style") == "undefined" || $(event.target).attr("style").match(/background/g) == null ) { 1707 if($(this).find("input:checkbox").attr("checked") != "checked"){ 1708 1709 $(this).find("input:checkbox").trigger('click'); 1710 1711 $(this).addClass("selected_msg"); 1712 } 1713 updateSelectedMsgs($(this).find("input:checkbox").is(':checked'),$(this).attr("id")); 1714 } 1715 1728 1716 }); 1729 1717 } … … 1739 1727 draw_footer_box(headers_msgs.num_msgs); 1740 1728 Element('main_table').style.display = ''; 1741 if(is_ie6) // Stupid Fixing on IE6. 1742 setTimeout("resizeWindow()",1); 1743 else 1744 resizeWindow(); 1729 resizeWindow(); 1745 1730 if(debug) { 1746 1731 var _eTime = new Date(); … … 1752 1737 var msg_number = Element('msg_number').value; 1753 1738 if(!msg_folder && msg_number) { 1754 if ((msg_number.toString().indexOf('@') != -1) || !msg_number.toString().match(/[0-9]/)){ 1755 new_message_to(msg_number); 1756 } 1757 else 1758 new_message('new','null'); 1739 if ((msg_number.toString().indexOf('@') != -1) || !msg_number.toString().match(/[0-9]/)){ 1740 new_message_to(msg_number); 1741 } 1742 else 1743 new_message('new','null'); 1759 1744 } 1760 1745 else if(msg_folder && msg_number){ … … 1871 1856 //if (headers_msgs.msg_sample.body.length > 0) 1872 1857 tr_element.msg_sample = Base64.decode(headers_msgs.msg_sample.body).substr(0,180) + "..."; //trecho do body que sera exibido com o assunto; //blabla 1873 } else { 1858 tr_element.msg_sample = html_entities(tr_element.msg_sample); 1859 } else { 1874 1860 //if (headers_msgs.msg_sample.body.length > 0) 1875 1861 tr_element.msg_sample = Base64.decode(headers_msgs.msg_sample.body).substr(0,120) + "..."; //trecho do body que sera exibido com o assunto; 1876 } 1877 1878 // preferencia dos tooltips 1879 if(headers_msgs.msg_sample && preferences.preview_msg_tip == "1" && headers_msgs.msg_sample.body !== "") { 1880 tr_element.tip = Base64.decode(headers_msgs.msg_sample.body).substr(3,300) + "..."; //trecho do body que sera exibido no tool-tip; 1881 } 1862 tr_element.msg_sample = html_entities(tr_element.msg_sample); 1863 } 1882 1864 } 1883 1865 } 1884 1866 // preferencia dos tooltips 1867 if(headers_msgs.msg_sample && preferences.preview_msg_tip == "1" && headers_msgs.msg_sample.body !== "") { 1868 tr_element.tip = Base64.decode(headers_msgs.msg_sample.body).substr(3,300) + "..."; //trecho do body que sera exibido no tool-tip; 1869 } 1885 1870 1886 1871 if ((headers_msgs.Unseen == 'U') || (headers_msgs.Recent == 'N')){ … … 1925 1910 1926 1911 if ((headers_msgs.Forwarded == 'F') || (headers_msgs.Draft == 'X' && headers_msgs.Answered == 'A')){ 1927 td_element21.onclick=function(){search_emails(headers_msgs.subject.replace(/^(re: ?|fw: ?|enc: ?|res: ?|fwd: ?)*/gi,''),true);};1912 $(td_element21).on('click',function(){search_emails(headers_msgs.subject.replace(/^(re: ?|fw: ?|enc: ?|res: ?|fwd: ?)*/gi,''),true);}); 1928 1913 td_element21.innerHTML = "<img src ='templates/"+template+"/images/forwarded.png' title='"+get_lang('Forwarded')+"'>"; 1929 1914 headers_msgs.Draft = '' … … 1934 1919 td_element21.innerHTML = "<img src ='templates/"+template+"/images/draft.png' title='"+get_lang('Draft')+"'>"; 1935 1920 else if (headers_msgs.Answered == 'A'){ 1936 td_element21.onclick=function(){search_emails(headers_msgs.subject.replace(/^(re: ?|fw: ?|enc: ?|res: ?|fwd: ?)*/gi,''),true);};1921 $(td_element21).on('click',function(){search_emails(headers_msgs.subject.replace(/^(re: ?|fw: ?|enc: ?|res: ?|fwd: ?)*/gi,''),true);}); 1937 1922 td_element21.innerHTML = "<img src ='templates/"+template+"/images/answered.png' title='"+get_lang('Answered')+"'>"; 1938 1923 }else … … 2048 2033 this.title = title_to; 2049 2034 }; 2050 if (headers_msgs.to && headers_msgs.to[0] ) {2035 if (headers_msgs.to && headers_msgs.to[0] != null) { 2051 2036 if (headers_msgs.to[0].name != null){ 2052 2037 spanSender.innerHTML += headers_msgs.to[0].name; 2053 2038 }else if(headers_msgs.to[0].email != null) { 2054 2039 spanSender.innerHTML += headers_msgs.to[0].email; 2055 } 2040 }else { 2041 spanSender.innerHTML += get_lang("without destination"); 2042 } 2056 2043 } 2057 2044 }else if(headers_msgs.from !== undefined){ … … 2139 2126 $(td_element26).click(function() { 2140 2127 var messageClickedId = $(this).attr('id').match(/td_message_followup_([\d]+)/)[1]; 2141 2128 2129 var loading = $('#td_message_followup_' + messageClickedId + ', ' + 2130 'tr[role="'+messageClickedId+'_'+msg_folder+'"] #td_message_followup_search_' + messageClickedId).find(".flag-edited") 2131 .find('img[alt=Carregando]'); 2132 2133 2134 //Verificar se está carregando a bandeira. 2135 //Caso esteja ele sai da função até que seja carregado. 2136 if( loading.length ) { 2137 return false; 2138 } 2139 2142 2140 var followupColor = $('#td_message_followup_' + messageClickedId).find(".flag-edited").css('backgroundColor'); 2143 2141 … … 2192 2190 2193 2191 if(fail != 'success'){ 2194 $('#td_message_followup_' + messageClickedId + ', ' + 2195 'tr[role="'+messageClickedId+'_'+msg_folder+'"] #td_message_followup_search_' + messageClickedId).find(".flag-edited").css("background", "#CCCCCC") 2196 .find('img').remove(); 2197 MsgsCallbackFollowupflag[fail](); 2192 var msgFlag = $('#td_message_followup_' + messageClickedId + ', ' + 2193 'tr[role="'+messageClickedId+'_'+msg_folder+'"] #td_message_followup_search_' + messageClickedId).find(".flag-edited").css("background", "#CCCCCC"); 2194 2195 msgFlag.find('img').remove(); 2196 2197 //Insere a imagem da flag quando ocorre erro ao marcar a msg 2198 msgFlag.append("<img src='../prototype/modules/mail/img/flagEditor.png'/>"); 2199 2200 MsgsCallbackFollowupflag[fail](); 2198 2201 }else{ 2199 2202 $('#td_message_followup_' + messageClickedId + ', ' + 2200 2203 '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) 2201 . find('img').remove();2204 .append("<img src='../prototype/modules/mail/img/flagEditor.png'/>"); 2202 2205 updateCacheFollowupflag(messageClickedId, msg_folder, true); 2203 2206 } … … 2215 2218 $('#td_message_followup_' + messageClickedId + ', ' + 2216 2219 'tr[role="'+messageClickedId+'_'+msg_folder+'"] #td_message_followup_search_' + messageClickedId).find(".flag-edited") 2217 .css({"background-image":"url(../prototype/modules/mail/img/flagEditor.png)"})2218 2220 .find('img').remove(); 2219 2221 … … 2222 2224 2223 2225 $('#td_message_followup_' + messageClickedId + ', ' + 2224 'tr[role="'+messageClickedId+'_'+msg_folder+'"] #td_message_followup_search_' + messageClickedId).find(".flag-edited") 2225 .css({" background-image":"url(../prototype/modules/mail/img/flagEditor.png)"});2226 'tr[role="'+messageClickedId+'_'+msg_folder+'"] #td_message_followup_search_' + messageClickedId).find(".flag-edited").html('<img src="../prototype/modules/mail/img/flagEditor.png">') 2227 .css({"width":"8px","height":"6px"/*"background-image":"url(../prototype/modules/mail/img/flagEditor.png)"*/}); 2226 2228 }); 2227 2229 … … 2229 2231 $('#td_message_followup_' + messageClickedId + ', ' + 2230 2232 'tr[role="'+messageClickedId+'_'+msg_folder+'"] #td_message_followup_search_' + messageClickedId).find(".flag-edited") 2231 .css({"background-image":"url(../prototype/modules/mail/img/flagEditor.png)"}).css("background", followupColor); 2233 .css("backgroundColor", followupColor) 2234 .find('img').remove(); //remove imagem carregando da bandeira 2235 2236 $('#td_message_followup_' + messageClickedId).find('.flag-edited').append("<img src='../prototype/modules/mail/img/flagEditor.png'/>"); 2237 2232 2238 2233 $(tr_element).addClass('selected_msg').find(':checkbox').trigger('click'); 2239 //Pega id do checkbox 2240 var id = $(tr_element).addClass('selected_msg').find(':checkbox').attr('id'); 2241 2242 //Verifica se o checkbox está selecionado 2243 if($('#' + id).attr('checked') != 'checked') 2244 $(tr_element).addClass('selected_msg').find(':checkbox').trigger('click'); 2234 2245 2235 2246 /** … … 2320 2331 var message_header = Element("message_header_"+search); 2321 2332 var handler_draw_box = function(data){ 2322 draw_box(data, current_folder,true); 2333 2334 if (typeof(clean_selected) == "undefined") 2335 populateSelectedMsgs(data.messagesIds); 2336 2337 draw_box(data, current_folder,true); 2323 2338 //Mostrar as msgs nao lidas de acordo com o filtro de relevancia 2324 2339 var msgs_unseen = 0; … … 2341 2356 sort_box_type = sort; 2342 2357 search_box_type = search; 2343 2344 if (typeof(clean_selected) == "undefined"){2345 $.ajax({2346 url: "controller.php?" + $.param( {action: "$this.imap_functions.getMessagesIds",2347 folder: get_current_folder(),2348 sort_box_type: "SORTARRIVAL",2349 search_box_type: search_box_type,2350 sort_box_reverse: "1"2351 }),2352 success: function(data){2353 data = connector.unserialize(data);2354 if(data){2355 var _data = {};2356 $.each(data,function(index,value){2357 if (value){2358 _data[index] = value;2359 }2360 });2361 populateSelectedMsgs(_data);2362 }2363 }2364 });2365 }2366 2358 2367 2359 proxy_mensagens.messages_list(current_folder,1,preferences.max_email_per_page,sort,search,sort_box_reverse,preferences.preview_msg_subject,preferences.preview_msg_tip,handler_draw_box); … … 2432 2424 function draw_message(info_msg, ID){ 2433 2425 // remove a flag $FilteredMessage da mensagem ao ser lida 2434 if(info_msg.Unseen == "U" ){2426 if(info_msg.Unseen == "U" && preferences['use_alert_filter_criteria'] == "1"){ 2435 2427 $.each(fromRules, function(index, value) { 2436 2428 if(value == info_msg.msg_folder){ … … 2479 2471 { 2480 2472 if(info_msg.msg_number.match("s[0-9]+")){ 2481 var new_info = info_msg.msg_number;2482 new_info = new_info.split("_")[1];2483 info_msg.next _message = info_msg.next_message+"_"+new_info;2484 info_msg.nextMsgBox = info_msg.nextMsgBox+"_"+new_info;2473 var msg_next = $('#'+info_msg.msg_number).next(); 2474 info_msg.next_message = msg_next.attr("id"); 2475 info_msg.nextMsgBox = msg_next.attr("name"); 2476 nextMsgBox = msg_next.attr("name"); 2485 2477 } 2486 2478 currentTab = ID; … … 2489 2481 //select_msg('null', 'down', true); 2490 2482 if (!msg_selected){ 2491 select_msg('null', 'down', true); 2483 if(!!parseInt(preferences.use_shortcuts)) 2484 select_msg('null', 'down', true); 2492 2485 msg_selected = true; 2493 2486 } … … 2495 2488 } 2496 2489 /*Ultima mensagem de cada página, exceto a ultima*/ 2497 else if( (current_page < total_pages) ){2490 else if( (current_page < total_pages) && !info_msg.msg_number.match("s[0-9]+") ){ 2498 2491 2499 2492 img_next_msg.onclick = function() … … 2559 2552 { 2560 2553 if(info_msg.msg_number.match("s[0-9]+")){ 2561 var new_info = info_msg.msg_number;2562 new_info = new_info.split("_")[1];2563 info_msg.prev _message = info_msg.prev_message+"_"+new_info;2564 info_msg.previousMsgBox = info_msg.previousMsgBox+"_"+new_info;2554 var msg_prev = $('#'+info_msg.msg_number).prev(); 2555 info_msg.prev_message = msg_prev.attr("id"); 2556 info_msg.previousMsgBox = msg_prev.attr("name"); 2557 previousMsgBox = msg_prev.attr("name"); 2565 2558 } 2566 2559 currentTab = ID; … … 2569 2562 //select_msg('null', 'up', false); 2570 2563 if (!msg_selected){ 2571 select_msg('null', 'up', true); 2564 if(!!parseInt(preferences.use_shortcuts)) 2565 select_msg('null', 'up', true); 2572 2566 msg_selected = true; 2573 2567 } … … 3010 3004 var option_export = '<span onclick="proxy_mensagens.export_all_messages()" onmouseover="this.className=\'reply_options_active\'" onmouseout="this.className=\'reply_options\'" class="reply_options">'+get_lang("Export")+'</span> | '; 3011 3005 var report_error = '<span onmouseover="this.className=\'reply_options_active\'" onmouseout="this.className=\'reply_options\'" class="reply_options" onclick=reports_window("'+currentTab+'");>'+get_lang("Report error")+'</span> | '; 3012 div_other_more_options.innerHTML += option_move + option_print + option_export + block_user + report_error; 3006 // Opção do menu 'Mais Ações' para criar filtro a partir da mensagem aberta: 3007 var option_create_filter = '<span onmouseover="this.className=\'reply_options_active\'" onmouseout="this.className=\'reply_options\'" class="reply_options" onclick=filter_from_msg(onceOpenedHeadersMessages[\'' + html_entities(info_msg.msg_folder) + '\'][' + info_msg.msg_number + ']);>' + get_lang("Create filter from message") + '</span> | '; 3008 div_other_more_options.innerHTML += option_create_filter + option_move + option_print + option_export + block_user + report_error; 3013 3009 3014 3010 … … 3509 3505 subject.innerHTML = html_entities(info_msg.subject); 3510 3506 subject.className = "header_message_field"; 3511 if( defaultCalendar == "expressoCalendar" &&$("#expressoCalendarid")[0]){3507 if($("#expressoCalendarid")[0]){ 3512 3508 var new_task_logo = document.createElement("IMG"); 3513 3509 new_task_logo.title = "Criar uma nova tarefa a partir deste email."; … … 4644 4640 delay : 300, 4645 4641 minLength: 0 4646 }).bind(' catcompleteopen', function(event, ui) {4642 }).bind('autocompleteopen', function(event, ui) { 4647 4643 4648 4644 $(this).data('is_open',true); 4649 4645 4650 }).bind(' catcompleteclose', function(event, ui) {4646 }).bind('autocompleteclose', function(event, ui) { 4651 4647 4652 4648 canMakeBox = true; 4653 4649 $(this).data('is_open',false); 4654 4650 $(this).blur().focus(); 4655 4651 }).data( "autocomplete" )._renderItem = function( ul, item ) { 4656 4652 var autocomplete = $(this)[0].element; 4657 4653 4658 //cálculo dinâmico da largura da lista 4659 var minwidth = 450; 4660 var width = (item.label ? item.label.length : (item.value ? item.value.length : (item.mail ? item.mail.length : 30 ))); 4661 width = (is_ie ? width*2 : (is_webkit && !is_mozilla ? width*4 : width*5)) + 30; 4662 if (width < minwidth) 4663 width = minwidth; 4664 4665 ul.css({"min-width":width, "max-height" : "180px", "overflow-y" : "auto", "min-height": "30px"}); 4654 ul.css({"width":'50%',"min-width":'600px', "max-height" : "180px", "overflow-y" : "auto", "min-height": "30px"}); 4666 4655 4667 4656 item.raty = ((item.number_of_messages*10)/topContact) > 1 ? ((item.number_of_messages*10)/topContact) : 1; … … 4753 4742 emQuickSearch(($(this).parents("tr:first").find("textarea").val() ? $(this).parents("tr:first").find("textarea").val() : input_search), "."+$(this).parents("tr:first").attr('class').split("-")[0], ID, undefined, true); 4754 4743 }); 4744 } 4745 4746 /* 4747 Anexa uma mensagem a mensagem sendo enviada. 4748 Parâmetros: 4749 folder_name: nome da pasta na qual a mensagem sendo anexada se encontra. 4750 message_number: id da mensagem sendo anexada. 4751 */ 4752 function attach_message (folder_name, message_number) { 4753 var ID = currentTab; 4754 var fileUploadMSG = $('#fileupload_msg'+ID); 4755 fileUploadMSG.find(' .attachments-list').show(); 4756 var att = new Object(); 4757 4758 4759 4760 var attach = {}; 4761 attach.fileName = onceOpenedHeadersMessages[folder_name][message_number].subject + '.eml'; 4762 attach.fullFileName = onceOpenedHeadersMessages[folder_name][message_number].subject + '.eml'; 4763 if(attach.fileName.length > 20){ 4764 attach.fileName = attach.fileName.substr(0, 17) + "... " + attach.fileName.substr(attach.fileName.length - 9, attach.fileName.length); 4765 } 4766 attach.error = false; 4767 attach.OK = true; 4768 if (folder_name.indexOf('local_messages_') == 0){ 4769 attach.fileSize = formatBytes(onceOpenedHeadersMessages[folder_name][message_number].size); 4770 } else { 4771 attach.fileSize = formatBytes(onceOpenedHeadersMessages[folder_name][message_number].Size); 4772 } 4773 var upload = $(DataLayer.render("../prototype/modules/mail/templates/attachment_add_itemlist.ejs", { 4774 file: attach 4775 })); 4776 $("#content_id_" + currentTab + " .save").button("enable"); 4777 upload.find('.att-box-loading').remove(); 4778 upload.append('<input type="hidden" name="fileId[]" value=\'' + idATT + '\'/>'); 4779 4780 upload.find('.att-box-delete').click(function() 4781 { 4782 $("#content_id_" + currentTab + " .save").button("enable"); 4783 var idAttach = $(this).parent().find('input[name="fileId[]"]').val(); 4784 fileUploadMSG.find(' .attachments-list').find('input[value="' + idAttach + '"]').remove(); 4785 delAttachment(ID, idAttach); 4786 $(this).parent().qtip("destroy"); 4787 $(this).parent().remove(); 4788 if(!fileUploadMSG.find(' .attachments-list').find(".att-box").length) 4789 { 4790 fileUploadMSG.find(' .attachments-list').hide(); 4791 } 4792 }); 4793 4794 var addtip = function(attach){ 4795 fileUploadMSG.find('.attachments-list .att-box:last').qtip( 4796 { 4797 content: DataLayer.render("../prototype/modules/mail/templates/attachment_add_itemlist_tooltip.ejs", { 4798 attach: attach 4799 }), 4800 position: { 4801 corner: { 4802 tooltip: 'bottomMiddle', 4803 target: 'topMiddle' 4804 }, 4805 adjust: { 4806 resize: true, 4807 scroll: true 4808 } 4809 }, 4810 show: { 4811 when: 'mouseover', 4812 // Don't specify a show event 4813 ready: false // Show the tooltip when ready 4814 }, 4815 hide: 'mouseout', 4816 // Don't specify a hide event 4817 style: { 4818 border: { 4819 width: 1, 4820 radius: 5 4821 }, 4822 width: { 4823 min: 75, 4824 max: 1000 4825 }, 4826 padding: 5, 4827 textAlign: 'center', 4828 tip: true, 4829 // Give it a speech bubble tip with automatic corner detection 4830 name: 'blue' // Style it according to the preset 'cream' style 4831 } 4832 }); 4833 } 4834 4835 if(folder_name.indexOf("local_messages_") != 0) 4836 { 4837 att.folder = folder_name; 4838 att.uid = message_number; 4839 att.type = 'imapMSG'; 4840 att.name = Base64.encode(onceOpenedHeadersMessages[folder_name][message_number].subject + '.eml'); 4841 var idATT = JSON.stringify(att); 4842 addAttachment(ID, idATT); 4843 4844 fileUploadMSG.find('.attachments-list').append(upload); 4845 addtip(attach); 4846 } 4847 else 4848 { 4849 var folder_trash = "INBOX"+cyrus_delimiter+special_folders["Trash"]; 4850 expresso_mail_archive.unarchieveToAttach(folder_name, folder_trash, message_number, function(data){ 4851 $.ajax({ 4852 url: "controller.php?action=$this.imap_functions.get_info_msg_archiver", 4853 data: {"idMsgs":data.idsMsg}, 4854 type: 'POST', 4855 async: false, 4856 success: function(data){ 4857 data = JSON.parse(connector.unserialize(data)); 4858 data = data[0]; 4859 att.folder = folder_trash; 4860 att.uid = data.uid; 4861 att.type = 'imapMSG'; 4862 att.name = Base64.encode(onceOpenedHeadersMessages[folder_name][message_number].subject + '.eml'); 4863 var idATT = JSON.stringify(att); 4864 addAttachment(ID, idATT); 4865 fileUploadMSG.find('.attachments-list').append(upload); 4866 addtip(attach); 4867 }, 4868 }); 4869 }); 4870 } 4871 upload.find('.att-box-loading').remove(); 4755 4872 } 4756 4873 … … 4933 5050 $(this).prev().show(); 4934 5051 }); 4935 fileUploadMSG.find(".fileUploadButton, .message-attach-link").button().filter(".fileUploadButton").click(function(){ 4936 fileUploadMSG.find("input:file").trigger("click"); 4937 }); 4938 4939 fileUploadMSG.find("input:file").fileupload({ 5052 5053 5054 fileUploadMSG.find(".button").button().filter(".fileinput-button").find(".ui-button-text").css("margin-top","2px").find("input:file").fileupload({ 4940 5055 //singleFileUploads : true,fileUploadMSG 4941 5056 sequentialUploads: true, … … 5113 5228 }); 5114 5229 }*/ 5115 });/*.css({ 5116 "height" : "20px", 5117 "width": (is_webkit ? "205px" : "100px"), 5118 "border-width": "0 0 0px 0px", 5119 "-moz-transform" : "rotate(-180deg) translate(5px, -0.5px) scale(1.1)", 5120 "-webkit-transform" : "rotate(-180deg) translate(0px, 0px)" 5121 }).end().end().end().*/ 5230 }).css({ 5231 "height" : ($.browser.mozilla ? "15px" : "20px"), 5232 // "width": (is_webkit ? "205px" : "100px"), 5233 "width" : "205px", 5234 "margin-top" : ($.browser.mozilla ? "10px" : "0"), 5235 "margin-right" : (is_mozilla ? "30px" : "0"), 5236 "border-width": "0 0 0px 0px", 5237 "transform" : "rotate(-360deg) translate(5px, -0.5px) scale(1.1)", 5238 "-webkit-transform" : "rotate(-360deg) translate(0px, 0px)" 5239 });/*.end().end().end().*/ 5240 5122 5241 fileUploadMSG.find(".message-attach-link").click(function(){ 5123 5242 jQuery('#message-attach-dialog').html(DataLayer.render("../prototype/modules/attach_message/attach_message.ejs", {})); … … 5149 5268 jQuery.each(selectedMessages[folder_name], function(message_number, message) { 5150 5269 if (message) { 5151 fileUploadMSG.find(' .attachments-list').show(); 5152 var att = new Object(); 5153 att.folder = folder_name; 5154 att.uid = message_number; 5155 att.type = 'imapMSG'; 5156 att.name = Base64.encode(onceOpenedMessages[folder_name][message_number].subject + '.eml'); 5157 var idATT = JSON.stringify(att); 5158 addAttachment( ID , idATT); 5159 var attach = {}; 5160 attach.fileName = onceOpenedMessages[folder_name][message_number].subject + '.eml'; 5161 attach.fullFileName = onceOpenedMessages[folder_name][message_number].subject + '.eml'; 5162 if(attach.fileName.length > 20) 5163 attach.fileName = attach.fileName.substr(0, 17) + "... " + attach.fileName.substr(attach.fileName.length-9, attach.fileName.length); 5164 5165 attach.error = false; 5166 attach.OK = true; 5167 attach.fileSize = formatBytes(onceOpenedMessages[folder_name][message_number].size); 5168 var upload = $(DataLayer.render("../prototype/modules/mail/templates/attachment_add_itemlist.ejs", {file : attach})); 5169 $("#content_id_"+currentTab+" .save").button("enable"); 5170 upload.find('.att-box-loading').remove(); 5171 upload.append('<input type="hidden" name="fileId[]" value=\''+idATT+'\'/>'); 5172 5173 upload.find('.att-box-delete').click(function(){ 5174 $("#content_id_"+currentTab+" .save").button("enable"); 5175 var idAttach = $(this).parent().find('input[name="fileId[]"]').val(); 5176 fileUploadMSG.find(' .attachments-list').find('input[value="'+idAttach+'"]').remove(); 5177 delAttachment(ID,idAttach); 5178 $(this).parent().qtip("destroy"); 5179 $(this).parent().remove(); 5180 if(!fileUploadMSG.find(' .attachments-list').find(".att-box").length){ 5181 fileUploadMSG.find(' .attachments-list').hide(); 5182 } 5183 }); 5184 5185 fileUploadMSG.find('.attachments-list').append(upload); 5186 5187 upload.find('.att-box-loading').remove(); 5188 5189 fileUploadMSG.find('.attachments-list .att-box:last').qtip({ 5190 content: DataLayer.render("../prototype/modules/mail/templates/attachment_add_itemlist_tooltip.ejs", {attach : attach}), 5191 position: { 5192 corner: { 5193 tooltip: 'bottomMiddle', 5194 target: 'topMiddle' 5195 }, 5196 adjust: { 5197 resize: true, 5198 scroll: true 5199 } 5200 }, 5201 show: { 5202 when: 'mouseover', // Don't specify a show event 5203 ready: false // Show the tooltip when ready 5204 }, 5205 hide: 'mouseout', // Don't specify a hide event 5206 style: { 5207 border: { 5208 width: 1, 5209 radius: 5 5210 }, 5211 width: { 5212 min: 75, 5213 max : 1000 5214 }, 5215 padding: 5, 5216 textAlign: 'center', 5217 tip: true, // Give it a speech bubble tip with automatic corner detection 5218 name: 'blue' // Style it according to the preset 'cream' style 5219 } 5220 }); 5270 /* Anexa a mensagem especificada (por folder e id_msg) 5271 na mensagem sendo criada.*/ 5272 attach_message(folder_name, message_number); 5221 5273 } 5222 5274 }); … … 5781 5833 } 5782 5834 5783 function verifyContext(type) { 5784 var folderN = $(".menu-sel").attr("role") ? $(".menu-sel").attr("role") : get_current_folder(); 5785 if(type == "unarchive"){ 5786 expresso_mail_archive.unarchieve(folderN, null, null); 5787 } else { 5788 archive_msgs(folderN,null,null) 5789 } 5790 } 5791 5835 function verifyContext(type) { 5836 var folderN = $(".menu-sel").attr("role") ? $(".menu-sel").attr("role") : get_current_folder(); 5837 if(type == "unarchive"){ 5838 expresso_mail_archive.unarchieve(folderN, null, null); 5839 } else { 5840 archive_msgs(folderN,null,null) 5841 } 5842 } 5843 5792 5844 function draw_footer_box(num_msgs){ 5793 5845 folder = get_current_folder(); … … 5815 5867 ((expresso_offline)?" ":'<span class="message_options_import"><span ' + change_font_color + ' title="'+get_lang("Import")+'" class="message_options" onclick="import_window()">'+get_lang("Import")+'</span></span>'); 5816 5868 5817 5869 5818 5870 //Link arquivar e desarquivar com ação 5819 5871 //MAILARCHIVER -
branches/2.5/expressoMail1_2/js/mail_archiver.js
r8126 r8232 427 427 428 428 var fcaption = ""; 429 430 if(destination_folder.substr(0,5) == 'local'){ 431 expresso_mail_archive.folder_destination = destination_folder.replace("local_messages_",""); 432 } 433 else{ 434 expresso_mail_archive.folder_destination = destination_folder; 435 } 429 430 if(destination_folder.substr(0,5) == 'local'){ 431 expresso_mail_archive.folder_destination = destination_folder.replace("local_messages_",""); 432 } 433 else{ 434 expresso_mail_archive.folder_destination = destination_folder; 435 } 436 436 437 437 438 if(!expresso_mail_archive.archivefolder){ 438 expresso_mail_archive.getFolderInfo(expresso_mail_archive.folder_destination); 439 expresso_mail_archive.getFolderInfo(expresso_mail_archive.folder_destination); 439 440 if(typeof(expresso_mail_archive.folder) != "undefined"){ 440 441 //window.alert('folder.path -> ' + expresso_mail_archive.folder.path); … … 575 576 } 576 577 577 578 579 580 /** 581 *Unarchieve Message 582 * 583 *@author Cassiano Dal Pizzol [cassiano.dalpizzol@serpro.gov.br] 584 * 585 *@param folder Original Folder of the message 586 *@param new_folder The new folder of the message 587 *@param msgs_number id of the messages 588 */ 589 MailArchiver.prototype.unarchieve = function (folder, new_folder, msgs_number){ 590 try{ 591 write_msg(get_lang("Starting to unarchive messages")); 578 MailArchiver.prototype.unarchieveToAttach = function (folder, new_folder, msgs_number, callback){ 579 try{ 580 581 if(typeof callback !== 'function') callback = function(){}; 582 583 if(typeof(expresso_mail_archive.idMsgsToAttach) == "undefined"){ 584 expresso_mail_archive.idMsgsToAttach = new Array(); 585 } 586 //write_msg(get_lang("Starting to unarchive messages")); 592 587 expresso_mail_archive.isArchiveOperation = true; 593 588 if(currentTab.toString().indexOf("_r") != -1){ … … 599 594 600 595 if (parseInt(msgs_number) > 0 || msgs_number.length > 0){ 601 expresso_mail_archive.message_list = new Array(); 602 expresso_mail_archive.CreateMessageList(msgs_number); 603 if((expresso_mail_archive.message_list.length > 0) && (expresso_mail_archive.message_list[0] != '')) { 596 597 expresso_mail_archive.messageToAttach = msgs_number; 598 if(expresso_mail_archive.messageToAttach) { 599 604 600 expresso_mail_archive.unarchivecounter = 0; 605 601 expresso_mail_archive.unarchive_error_counter=0; 606 expresso_mail_archive.getFolderInfo(folder.replace("local_messages_","")); 602 expresso_mail_archive.getFolderInfo(folder.replace("local_messages_","")); 607 603 expresso_mail_archive.unarchievefolder = expresso_mail_archive.folder.name; 608 604 (new_folder != null)?expresso_mail_archive.unarchievenewfolder = new_folder:expresso_mail_archive.unarchievenewfolder='INBOX'; 609 605 610 expresso_mail_archive.unarchieve Handler();606 expresso_mail_archive.unarchieveToAttachHandler(callback); 611 607 612 608 if(currentTab.toString().indexOf("_r") != -1){ … … 628 624 } 629 625 630 /** 631 * 632 *Unarchieve Message Handler 633 * 634 *@author Cassiano Dal Pizzol [cassiano.dalpizzol@serpro.gov.br] 635 * 636 **/ 637 MailArchiver.prototype.unarchieveHandler = function(){ 638 try{ 639 var email = mail_archive_protocol+'://'+mail_archive_host+':'+mail_archive_port+'/mail/' + expresso_mail_archive.session.id +'/'+ expresso_mail_archive.folder.path + '/'+ expresso_mail_archive.message_list[expresso_mail_archive.unarchivecounter] + '.eml'; 626 MailArchiver.prototype.unarchieveToAttachHandler = function(uCallback){ 627 try{ 628 var email = mail_archive_protocol+'://'+mail_archive_host+':'+mail_archive_port+'/mail/' + expresso_mail_archive.session.id +'/'+ expresso_mail_archive.folder.path + '/'+ expresso_mail_archive.messageToAttach + '.eml'; 640 629 641 630 //Creates a new object to unarchive messages. It's a CXF Add-on CORS component … … 647 636 for (var w=0; w < expresso_mail_archive.allcompletemessagesbyfolder.length; w++){ 648 637 649 if(expresso_mail_archive.allcompletemessagesbyfolder[w]["msg_number"] == expresso_mail_archive.message _list[expresso_mail_archive.unarchivecounter]){638 if(expresso_mail_archive.allcompletemessagesbyfolder[w]["msg_number"] == expresso_mail_archive.messageToAttach){ 650 639 var timestamp = expresso_mail_archive.allcompletemessagesbyfolder[w]["timestamp"]; 651 640 … … 702 691 } 703 692 } 693 var id = expresso_mail_archive.messageToAttach; 694 var source = encodeURIComponent(UnarchiveReqHandler.handler.responseText) + "#@#@#@"; 695 var params = 696 "&folder=" + escape(expresso_mail_archive.unarchievenewfolder) + 697 "&source=" + source + 698 "×tamp=" + timestamp + 699 "&madata=true" + 700 "&flags=" + flags + 701 "&id=" + id; 702 703 704 var handler_unarchive = function(data){ 705 expresso_mail_archive.unarchieveToAttachController(data); 706 } 707 write_msg(get_lang("Please, Wait the messages from archieve be ready.")); 708 709 $.ajax({ 710 url: "controller.php?action=$this.imap_functions.unarchive_mail", 711 success: function(data){ 712 data = connector.unserialize(data); 713 expresso_mail_archive.idMsgsToAttach.push(data.idsMsg); 714 handler_unarchive(data); 715 uCallback(data); 716 }, 717 async: false, 718 data: params, 719 type: 'POST', 720 721 }); 722 723 } 724 725 726 UnarchiveReqHandler.handler.open("GET", email, true); 727 if(UnarchiveReqHandler.handler.overrideMimeType){ 728 UnarchiveReqHandler.handler.overrideMimeType("message/rfc822; charset=windows-1252"); 729 } 730 UnarchiveReqHandler.handler.send(); 731 } 732 catch(e){ 733 write_msg(get_lang('Unarchive error: ' + e)); 734 } 735 } 736 737 MailArchiver.prototype.unarchieveToAttachController = function(data){ 738 739 if (data){ 740 if (data.error != "") { 741 expresso_mail_archive.unarchive_error_counter++; 742 } 743 744 } 745 } 746 747 748 /** 749 *Unarchieve Message 750 * 751 *@author Cassiano Dal Pizzol [cassiano.dalpizzol@serpro.gov.br] 752 * 753 *@param folder Original Folder of the message 754 *@param new_folder The new folder of the message 755 *@param msgs_number id of the messages 756 */ 757 MailArchiver.prototype.unarchieve = function (folder, new_folder, msgs_number){ 758 try{ 759 760 var aclShare = false; 761 $.ajax({ 762 url: 'controller.php?' + $.param( { action: '$this.imap_functions.verifyShareFolder', folder: new_folder } ), 763 success: function( data ){ 764 data = connector.unserialize( data ); 765 if(data != null){ 766 if(!data.status){ 767 aclShare = true; 768 } 769 } 770 771 }, 772 async: false 773 }); 774 775 if(aclShare){ 776 write_msg(get_lang("You don't have permission for this operation in this shared folder!")); 777 return false; 778 } 779 780 write_msg(get_lang("Starting to unarchive messages")); 781 expresso_mail_archive.isArchiveOperation = true; 782 if(currentTab.toString().indexOf("_r") != -1){ 783 msgs_number = currentTab.toString().substr(0,currentTab.toString().indexOf("_r")); 784 } 785 786 if(!msgs_number) 787 msgs_number = get_selected_messages(); 788 789 if (parseInt(msgs_number) > 0 || msgs_number.length > 0){ 790 expresso_mail_archive.message_list = new Array(); 791 expresso_mail_archive.CreateMessageList(msgs_number); 792 if((expresso_mail_archive.message_list.length > 0) && (expresso_mail_archive.message_list[0] != '')) { 793 expresso_mail_archive.unarchivecounter = 0; 794 expresso_mail_archive.unarchive_error_counter=0; 795 expresso_mail_archive.getFolderInfo(folder.replace("local_messages_","")); 796 expresso_mail_archive.unarchievefolder = expresso_mail_archive.folder.name; 797 (new_folder != null)?expresso_mail_archive.unarchievenewfolder = new_folder:expresso_mail_archive.unarchievenewfolder='INBOX'; 798 799 expresso_mail_archive.unarchieveHandler(); 800 801 if(currentTab.toString().indexOf("_r") != -1){ 802 delete_border(currentTab,'false'); 803 } 804 } 805 else{ 806 write_msg(get_lang('No selected message.')); 807 } 808 } 809 else 810 write_msg(get_lang('No selected message.')); 811 812 clear_selected_messages(); 813 } 814 catch (e){ 815 write_msg(get_lang('Unarchive error: ' + e)); 816 } 817 } 818 819 /** 820 * 821 *Unarchieve Message Handler 822 * 823 *@author Cassiano Dal Pizzol [cassiano.dalpizzol@serpro.gov.br] 824 * 825 **/ 826 MailArchiver.prototype.unarchieveHandler = function(){ 827 try{ 828 var email = mail_archive_protocol+'://'+mail_archive_host+':'+mail_archive_port+'/mail/' + expresso_mail_archive.session.id +'/'+ expresso_mail_archive.folder.path + '/'+ expresso_mail_archive.message_list[expresso_mail_archive.unarchivecounter] + '.eml'; 829 830 //Creates a new object to unarchive messages. It's a CXF Add-on CORS component 831 var UnarchiveReqHandler = new cxf_cors_request_object(); 832 UnarchiveReqHandler.init(); 833 834 //Both XDomainRequest and XMLHttpRequest L2 supports onload event 835 UnarchiveReqHandler.handler.onload = function(){ 836 for (var w=0; w < expresso_mail_archive.allcompletemessagesbyfolder.length; w++){ 837 838 if(expresso_mail_archive.allcompletemessagesbyfolder[w]["msg_number"] == expresso_mail_archive.message_list[expresso_mail_archive.unarchivecounter]){ 839 var timestamp = expresso_mail_archive.allcompletemessagesbyfolder[w]["timestamp"]; 840 841 //Get local tagged message data 842 var flags = new String(""); 843 844 //Forwarded is special one: marks as "answered" and "draft" 845 if(expresso_mail_archive.allcompletemessagesbyfolder[w]["Forwarded"]){ 846 if(expresso_mail_archive.allcompletemessagesbyfolder[w]["Forwarded"] == 'F') 847 flags += 'A:X'+':'; 848 } 849 else{ 850 //Answered tag 851 if(expresso_mail_archive.allcompletemessagesbyfolder[w]["Answered"]) 852 if(expresso_mail_archive.allcompletemessagesbyfolder[w]["Answered"] == 'A') 853 flags += 'A'+':'; 854 else 855 flags += ':'; 856 else 857 flags += ':'; 858 859 //Draft tag 860 if(expresso_mail_archive.allcompletemessagesbyfolder[w]["Draft"]) 861 if(expresso_mail_archive.allcompletemessagesbyfolder[w]["Draft"] == 'X') 862 flags += 'D'+':'; 863 else 864 flags += ':'; 865 else 866 flags += ':'; 867 } 868 869 //Flagged tag 870 if(expresso_mail_archive.allcompletemessagesbyfolder[w]["Flagged"]) 871 if(expresso_mail_archive.allcompletemessagesbyfolder[w]["Flagged"] == 'F') 872 flags += 'F'+':'; 873 else 874 flags += ':'; 875 else 876 flags += ':'; 877 878 //Unseen tag 879 if(expresso_mail_archive.allcompletemessagesbyfolder[w]["Unseen"]) 880 if(expresso_mail_archive.allcompletemessagesbyfolder[w]["Unseen"] == 'U') 881 flags += 'U'; 882 else 883 flags += ''; 884 else 885 flags += ''; 886 887 //Imap tag hash id 888 flags += "#@#@#@"; 889 890 break; 891 } 892 } 704 893 var id = expresso_mail_archive.message_list[expresso_mail_archive.unarchivecounter]; 705 894 var source = encodeURIComponent(UnarchiveReqHandler.handler.responseText) + "#@#@#@"; … … 717 906 write_msg(get_lang('Unarchiving message %1 of %2', (expresso_mail_archive.unarchivecounter + 1), expresso_mail_archive.message_list.length)); 718 907 719 cExecute ("$this.imap_functions.unarchive_mail&", handler_unarchive, params); 908 //cExecute ("$this.imap_functions.unarchive_mail&", handler_unarchive, params); 909 910 $.ajax({ 911 url: "controller.php?action=$this.imap_functions.unarchive_mail", 912 data: params, 913 type: 'POST', 914 async: false, 915 success: function(data){ 916 handler_unarchive(connector.unserialize(data)); 917 }, 918 }); 919 920 921 720 922 } 721 923 … … 846 1048 expresso_mail_archive.message_list = new Array(); 847 1049 848 expresso_mail_archive.currentfolder = folder.replace("local_messages_",""); 849 850 expresso_mail_archive.listMessages(expresso_mail_archive.currentfolder); 1050 expresso_mail_archive.currentfolder = folder.replace("local_messages_",""); 1051 1052 expresso_mail_archive.listMessages(expresso_mail_archive.currentfolder); 851 1053 852 1054 // This is necessary 'couse we can get a delete operation while an unarchive operation … … 956 1158 expresso_mail_archive.message_list = new Array(); 957 1159 958 expresso_mail_archive.getFolderInfo(expresso_mail_archive.currentfolder); 959 expresso_mail_archive.getFolderInfo(expresso_mail_archive.folder_destination); 960 expresso_mail_archive.listMessages(expresso_mail_archive.currentfolder); 1160 expresso_mail_archive.getFolderInfo(expresso_mail_archive.currentfolder); 1161 expresso_mail_archive.getFolderInfo(expresso_mail_archive.folder_destination); 1162 expresso_mail_archive.listMessages(expresso_mail_archive.currentfolder); 961 1163 962 1164 expresso_mail_archive.resetObject(); … … 1258 1460 if(folderId == 'local_root') 1259 1461 folderId = ""; 1260 var exp_verifyId = RegExp("^messages\_[0-9|a-z]+\-[0-9|a-z|\-]+$"); 1261 if(exp_verifyId.test(folderId)) 1262 folderId = folderId.replace("messages_", ""); 1462 var exp_verifyId = RegExp("^messages\_[0-9|a-z]+\-[0-9|a-z|\-]+$"); 1463 if(exp_verifyId.test(folderId)) 1464 folderId = folderId.replace("messages_", ""); 1263 1465 ArchiveServices.getFolderInfo(expresso_mail_archive.getFolderInfoOperationOK, expresso_mail_archive.getFolderInfoOperationFailure, expresso_mail_archive.session.id, folderId); 1264 1466 } … … 1296 1498 1297 1499 MailArchiver.prototype.deleteAllMessages = function(folderId){ 1298 try{ 1500 try{ 1299 1501 var objfolder = new Object(); 1300 objfolder.folder = folderId; 1502 objfolder.folder = folderId; 1301 1503 1302 1504 var query_data = expresso_mail_archive.queryconfig.query(objfolder); … … 1337 1539 } 1338 1540 var objfolder = new Object(); 1339 var exp_verifyId = RegExp("^messages\_[0-9|a-z]+\-[0-9|a-z|\-]+$"); 1340 if(exp_verifyId.test(folderid)) 1341 folderid = folderid.replace("messages_", ""); 1342 objfolder.folder = folderid; 1541 var exp_verifyId = RegExp("^messages\_[0-9|a-z]+\-[0-9|a-z|\-]+$"); 1542 if(exp_verifyId.test(folderid)) 1543 folderid = folderid.replace("messages_", ""); 1544 objfolder.folder = folderid; 1343 1545 //var testing_data_xml = '<?xml version="1.0" encoding="UTF-8"?><query lowerIndex="0" upperIndex="50"><folder id="'+folderid+'"/><order asc="date"/><order desc="subject"/></query>'; 1344 1546 //var testing_data_json_mapped = '{"query":{"@lowerIndex":"0", "@upperIndex":"50", "folder":[{"@id":"'+folderid+'"}], "order":[{"@asc":"date", "@desc":"subject"}]}}'; 1345 1547 var query_data = expresso_mail_archive.queryconfig.query(objfolder); 1346 expresso_mail_archive.getFolderInfo(folderid); 1548 1549 expresso_mail_archive.getFolderInfo(folderid); 1347 1550 expresso_mail_archive.currentfolder = folderid; 1348 1551 … … 1404 1607 } 1405 1608 1609 1610 MailArchiver.prototype.getMessagesByFolder = function(folderid, searchType){ 1611 try{ 1612 if(searchType == "ALL") 1613 var query_messages = '{"query":{"folder":[{"@id":"'+folderid+'"}], "order":[{"@asc":"date"}]}}'; 1614 else 1615 var query_messages = '{"query":{"folder":[{"@id":"'+folderid+'"}], "tags":[{"@contains":"'+searchType+'"}], "order":[{"@asc":"date"}]}}'; 1616 ArchiveServices.listMessages(expresso_mail_archive.getMessagesByFolderOperationOK, expresso_mail_archive.getMessagesByFolderOperationFailure, expresso_mail_archive.session.id, query_messages); 1617 } 1618 catch (e){ 1619 expresso_mail_archive.getFaultInfo(); 1620 } 1621 } 1622 1623 MailArchiver.prototype.getMessagesByFolderOperationOK = function(returnService){ 1624 var msglist = new Array(); 1625 var msglistcomplete = new Array(); 1626 var msgAll = new Array(); 1627 for(var i=0; i< returnService.getReturn().length; i++){ 1628 //Array montado apenas com ids para tratamento de seleção de mensagens independente de paginação 1629 msglist.push(returnService.getReturn()[i]._id); 1630 1631 msgAll.push(returnService.getReturn()[i]); 1632 1633 //Incremento de contadores para atualização da aba de listagem 1634 if(returnService.getReturn()[i]._tags.indexOf("unseen") != -1){ 1635 expresso_mail_archive.tot_unseen_msgs_tab++; 1636 } 1637 expresso_mail_archive.tot_msgs_tab++; 1638 //Array montado para operação de desarquivamento 1639 var ExpSerialized = expresso_mail_archive.pattern.toExpressoHeader(returnService.getReturn()[i]); 1640 msglistcomplete.push(connector.unserialize(ExpSerialized)); 1641 } 1642 expresso_mail_archive.allmessagesbyfolder = msglist; 1643 expresso_mail_archive.allcompletemessagesbyfolder = msglistcomplete; 1644 expresso_mail_archive.msgAll = msgAll; 1645 } 1646 1647 MailArchiver.prototype.getMessagesByFolderOperationFailure = function(ServiceFault){ 1648 window.alert('listAllmessagesByFolder FALHOU!\n' + ServiceFault.getReturn()); 1649 } 1650 1651 1406 1652 //List all messages by folder given and set a array with all messages ids 1407 1653 MailArchiver.prototype.listAllMessagesByFolder = function(folderid, searchType){ … … 1521 1767 if(msgfound){ 1522 1768 expresso_mail_archive.currentheaders = headerMsg; 1769 expresso_mail_archive.subjectPreview = headerMsg.subject; 1523 1770 return(headerMsg); 1524 1771 } … … 1543 1790 bodies.push(temp); 1544 1791 } 1792 expresso_mail_archive.bodyPreview = temp.getReturn(); 1545 1793 return bodies; 1546 1794 } … … 1548 1796 expresso_mail_archive.getFaultInfo(); 1549 1797 } 1798 } 1799 1800 1801 MailArchiver.prototype.getPreviewToAttach = function(id){ 1802 expresso_mail_archive.getMessageInfo(id); 1803 expresso_mail_archive.getMessageBodies([id]); 1550 1804 } 1551 1805 … … 1624 1878 return; 1625 1879 } 1880 expresso_mail_archive.te = returnService.getReturn(); 1626 1881 var msgBody = returnService.getReturn(); 1627 1882 //var msgHeaders = expresso_mail_archive.getMessageHeaders(expresso_mail_archive.currentmessage); … … 1918 2173 var filters = eval('(' + expresso_mail_archive.queryconfig.pharseSearchFields(fields) + ')'); 1919 2174 2175 2176 1920 2177 if(folderlist.indexOf("#") != -1) 1921 2178 filters.folder = folderlist.substr(0, folderlist.indexOf("#")); … … 1928 2185 1929 2186 expresso_mail_archive.querydata = expresso_mail_archive.search_queryconfig.query(filters); 1930 2187 2188 2189 1931 2190 //var query_data = '<?xml version="1.0" encoding="UTF-8"?><query subject="teste"><folder id="inbox"/><order asc="date"/></query>'; 1932 2191 ArchiveServices.listMessages(expresso_mail_archive.searchOperationOK, expresso_mail_archive.searchOperationFailure, expresso_mail_archive.session.id, expresso_mail_archive.querydata); … … 1962 2221 1963 2222 //expresso_mail_archive.queryresult = msglist; 1964 expresso_mail_archive.search_queryresult = msglist; 2223 expresso_mail_archive.search_queryresult = msglist; 1965 2224 //expresso_mail_archive.messageslisted = msglist2; 1966 2225 expresso_mail_archive.search_message_list = msglist2; … … 2096 2355 var ExpSerialized2 = expresso_mail_archive.pattern.toExpressoHeader(serviceReturn.getReturn()); 2097 2356 var msgitem2 = connector.unserialize(ExpSerialized2); 2357 if(!expresso_mail_archive.messageslisted){ 2358 expresso_mail_archive.messageslisted = []; 2359 } 2098 2360 expresso_mail_archive.messageslisted.push(msgitem2); 2099 2361 expresso_mail_archive.getMessageHeaders(serviceReturn.getReturn().getId()); 2362 2100 2363 } 2101 2364 else{ -
branches/2.5/expressoMail1_2/js/main.js
r8188 r8232 1 // Tempo do auto refresh (em milisegundos)2 1 var time_refresh = 150000; 3 2 … … 152 151 153 152 154 if(preferences.show_name_print_messages == "1") { 155 var getUserName = document.getElementById("user_info"); 156 var userName = getUserName.innerHTML; 157 var position = userName.indexOf("-"); 158 var userName = userName.substring(3, position); 159 cabecalho = '<h4>' + userName; 160 } 161 162 current_folder="INBOX"; 163 164 //MAILARCHIVER-02 165 //Try to get ArchiveServices object directly 166 if(ArchiveServices) 167 expresso_mail_archive.Startup(); 168 //ArchiveServices not runnnig: catch the user preferences to set up message at header 169 else{ 170 if(preferences.use_local_messages=="1") 171 write_msg(get_lang('Sorry, but Mail Archiver does not seems to be running or installed at this workstation. By now, we are turning off local messages!')); 172 } 173 174 //cExecute ("$this.db_functions.get_dropdown_contacts", save_contacts); //Save contacts needs preferences. 175 $.ajax({ 176 async: false, 177 url: "controller.php?" + $.param( {action: "$this.imap_functions.getMessagesIds", 178 folder: get_current_folder(), 179 msg_range_begin: "0", 180 msg_range_end: "0", 181 sort_box_type: "SORTARRIVAL", 182 search_box_type: search_box_type, 183 sort_box_reverse: "1" 184 }), 185 success: function(data){ 186 data = connector.unserialize(data); 187 if(data){ 188 var _data = {}; 189 $.each(data,function(index,value){ 190 if (data[index]){ 191 _data[data[index]] = data[index]; 192 } 193 }); 194 populateSelectedMsgs(_data); 195 } 196 }, 197 beforeSend: function( jqXHR, settings ){ 198 connector.showProgressBar(); 199 }, 200 complete: function( jqXHR, settings ){ 201 connector.hideProgressBar(); 153 if(preferences.show_name_print_messages == "1") { 154 var getUserName = document.getElementById("user_info"); 155 var userName = getUserName.innerHTML; 156 var position = userName.indexOf("-"); 157 var userName = userName.substring(3, position); 158 cabecalho = '<h4>' + userName; 159 } 160 161 current_folder="INBOX"; 162 163 //MAILARCHIVER-02 164 //Try to get ArchiveServices object directly 165 if(ArchiveServices) 166 expresso_mail_archive.Startup(); 167 //ArchiveServices not runnnig: catch the user preferences to set up message at header 168 else{ 169 if(preferences.use_local_messages=="1") 170 write_msg(get_lang('Sorry, but Mail Archiver does not seems to be running or installed at this workstation. By now, we are turning off local messages!')); 171 } 172 173 // cExecute ("$this.db_functions.get_dropdown_contacts", save_contacts); //Save contacts needs preferences. 174 175 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); 176 177 if(preferences.hide_folders == "1") 178 Element('divAppboxHeader').innerHTML = title_app_menu; 179 180 //Desbilitado limpeza de lixeira por request. Ticket #3253 181 //if (preferences.delete_trash_messages_after_n_days != 0) 182 /// cExecute ("$this.imap_functions.automatic_trash_cleanness&before_date="+preferences.delete_trash_messages_after_n_days+"&cyrus_delimiter="+cyrus_delimiter, handler_automatic_trash_cleanness); 183 184 //if(preferences.outoffice == "1") 185 // 186 187 //Troca da forma de construção de menu para o plugin jquery.contextMenu 188 //ConstructMenuTools(); 189 //MAILARCHIVER-00 190 //if ( (preferences.use_local_messages==1) && (expresso_local_messages.is_offline_installed()) ) //Precisa ser feito após a renderização da caixa de emails 191 //check_mail_in_queue(); 192 193 // Insere a applet de criptografia 194 if (preferences.use_signature_digital_cripto == '1'){ 195 loadApplet(); 196 } 197 // Fim da inserção da applet 198 cExecute("$this.imap_functions.get_folders_list&onload=true", update_menu); 199 //update_menu(Folder.getList(false)); 200 201 if($.cookie('collapse_folders') == "true"){ 202 if(!is_ie) 203 $("#folderscol").addClass( "hidden"); 204 else 205 $("#folderscol").hide(); 206 $(".collapse_folders").addClass("ui-icon ui-icon-triangle-1-e").children().attr('title', "Expandir"); 207 refresh(); 208 resizeWindow(); 209 } 210 else{ 211 $(".collapse_folders").addClass("ui-icon ui-icon-triangle-1-w").children().attr('title', "Ocultar"); 212 refresh(); 213 resizeWindow(); 214 } 215 216 $(".collapse_folders_td").attr('title', "Ocultar/Expandir").click(function(){ 217 if($("#folderscol").css("display") != "none"){ 218 if(!is_ie) 219 $("#folderscol").addClass( "hidden"); 220 else 221 $("#folderscol").hide(); 222 223 $(".collapse_folders").removeClass("ui-icon-triangle-1-w"); 224 $(".collapse_folders").addClass("ui-icon-triangle-1-e"); 225 $(".collapse_folders").parent().attr('title', "Expandir"); 226 $.cookie('collapse_folders', "true"); 227 refresh(); 228 resizeWindow(); 229 }else{ 230 if(!is_ie) 231 $("#folderscol").removeClass( "hidden"); 232 else 233 $("#folderscol").show(); 234 $(".collapse_folders").removeClass("ui-icon-triangle-1-e"); 235 $(".collapse_folders").addClass("ui-icon-triangle-1-w"); 236 $(".collapse_folders").parent().attr('title', "Ocultar"); 237 $.cookie('collapse_folders', "false"); 238 refresh(); 239 resizeWindow(); 202 240 } 203 }); 204 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); 205 206 if(preferences.hide_folders == "1") 207 Element('divAppboxHeader').innerHTML = title_app_menu; 208 209 //Desbilitado limpeza de lixeira por request. Ticket #3253 210 //if (preferences.delete_trash_messages_after_n_days != 0) 211 /// cExecute ("$this.imap_functions.automatic_trash_cleanness&before_date="+preferences.delete_trash_messages_after_n_days+"&cyrus_delimiter="+cyrus_delimiter, handler_automatic_trash_cleanness); 212 213 //if(preferences.outoffice == "1") 214 // 215 216 //Troca da forma de construção de menu para o plugin jquery.contextMenu 217 //ConstructMenuTools(); 218 //MAILARCHIVER-00 219 //if ( (preferences.use_local_messages==1) && (expresso_local_messages.is_offline_installed()) ) //Precisa ser feito após a renderização da caixa de emails 220 //check_mail_in_queue(); 221 222 // Insere a applet de criptografia 223 if (preferences.use_signature_digital_cripto == '1'){ 224 loadApplet(); 225 } 226 // Fim da inserção da applet 227 cExecute("$this.imap_functions.get_folders_list&onload=true", update_menu); 228 229 if($.cookie('collapse_folders') == "true"){ 230 if(!is_ie) 231 $("#folderscol").addClass( "hidden"); 232 else 233 $("#folderscol").hide(); 234 $(".collapse_folders").addClass("ui-icon ui-icon-triangle-1-e").children().attr('title', "Expandir"); 235 refresh(); 236 resizeWindow(); 237 } 238 else{ 239 $(".collapse_folders").addClass("ui-icon ui-icon-triangle-1-w").children().attr('title', "Ocultar"); 240 refresh(); 241 resizeWindow(); 242 } 243 244 $(".collapse_folders_td").attr('title', "Ocultar/Expandir").click(function(){ 245 if($("#folderscol").css("display") != "none"){ 246 if(!is_ie) 247 $("#folderscol").addClass( "hidden"); 248 else 249 $("#folderscol").hide(); 250 251 $(".collapse_folders").removeClass("ui-icon-triangle-1-w"); 252 $(".collapse_folders").addClass("ui-icon-triangle-1-e"); 253 $(".collapse_folders").parent().attr('title', "Expandir"); 254 $.cookie('collapse_folders', "true"); 255 refresh(); 256 resizeWindow(); 257 }else{ 258 if(!is_ie) 259 $("#folderscol").removeClass( "hidden"); 260 else 261 $("#folderscol").show(); 262 $(".collapse_folders").removeClass("ui-icon-triangle-1-e"); 263 $(".collapse_folders").addClass("ui-icon-triangle-1-w"); 264 $(".collapse_folders").parent().attr('title', "Ocultar"); 265 $.cookie('collapse_folders', "false"); 266 refresh(); 267 resizeWindow(); 268 } 269 resizeWindow(); 270 271 }).hover( 272 function(){ 273 $(this).addClass("collapse_folders_td_over"); 274 }, 275 function(){ 276 $(this).removeClass("collapse_folders_td_over"); 277 } 278 ); 279 280 if(parseInt(preferences.use_dynamic_contacts)){ 281 updateDynamicContact(); 282 } 283 284 285 var handler_automatic_trash_cleanness = function(data) 286 { 241 resizeWindow(); 242 243 }).hover( 244 function(){ 245 $(this).addClass("collapse_folders_td_over"); 246 }, 247 function(){ 248 $(this).removeClass("collapse_folders_td_over"); 249 } 250 ); 251 252 if(parseInt(preferences.use_dynamic_contacts)){ 253 updateDynamicContact(); 254 } 255 256 257 var handler_automatic_trash_cleanness = function(data) 258 { 287 259 if (data != false){ 288 260 write_msg(data.length +' '+ Element('txt_clear_trash').value); … … 295 267 // Get cyrus delimiter 296 268 cyrus_delimiter = Element('cyrus_delimiter').value; 297 298 cExecute ("phpgwapi.browser.isMobile", function( data ){299 mobile_device = ( ( data.constructor == Boolean ) ? data : ( data === 'true' ) );300 });301 269 302 270 cExecute("$this.imap_functions.get_folders_list&onload=true", update_menu); … … 595 563 if(Element("border_id_" + id_msg_read)) { 596 564 alternate_border(id_msg_read); 597 resizeWindow(); 565 resizeWindow(); 598 566 } 599 567 else { 600 568 var border_id = create_border(msg_info.subject, id_msg_read); 601 if(border_id )569 if(border_id && border_id != "maximo") 602 570 { 603 571 openTab.type[border_id] = 2; … … 661 629 662 630 } 663 if (msg_info.showImg) 664 { 665 $("#body_"+id_msg_read).html(msg_info.body); 666 $('#show_img_link_'+id_msg_read).remove(); 667 } 631 if (msg_info.showImg) 632 { 633 $("#body_"+id_msg_read).html(msg_info.body); 634 $('#show_img_link_'+id_msg_read).remove(); 635 } 668 636 //Change msg class to read. 669 637 if (!msg_is_read(ID)) … … 705 673 if(differenceOfNewCriteria > 0){ 706 674 for(var i=data.length - differenceOfNewCriteria; i < data.length; i++){ 707 var msg_folder = data[i].msg_folder; 708 var msg_number = data[i].msg_number; 675 var msg_folder = data[i].msg_folder; 676 var msg_number = data[i].msg_number; 709 677 desktopNotification.sentNotification("",get_lang("Filter criteria"), truncate(new Date(data[i].udate).toString('dd/MM HH:mm') + ' - ' + data[i].from+' - '+data[i].subject, 75)); 710 desktopNotification.showNotification(function(){ 711 cExecute ("$this.imap_functions.removeFlagMessagesFilter&folder="+msg_folder+"&msg_number="+msg_number, function(){}); 712 }, function(){ 678 desktopNotification.showNotification(function(){ 679 cExecute ("$this.imap_functions.removeFlagMessagesFilter&folder="+msg_folder+"&msg_number="+msg_number, function(){}); 680 }, function(){ 713 681 window.focus(); 714 682 this.cancel(); … … 721 689 function refresh(alert_new_msg, notifyPermission){ 722 690 691 //Não deixa atualizar caso o usuario esteja em uma aba de nova mesnagem , reponder ou encaminhar; 692 //Evita o travamento da escrita no CKEDITOR. 693 if(typeof(currentTab) !== 'undefined' && currentTab.toString().indexOf("_r_") === -1 && currentTab !== 0 ) 694 return; 695 723 696 getFromAlertRules(); 724 697 var handler_refresh = function(data){ 725 handlerMessageFilter = function (data) { 726 notificationFilter(data, notifyPermission); 727 alarmFollowupflagged('filtersAlarms', data); 728 729 } 730 /* Busca nas pastas indexadas para ver se há novas mensagens com a flag $FilteredMessage */ 731 cExecute ("$this.imap_functions.getFlaggedAlertMessages&folders="+fromRules, handlerMessageFilter); 698 699 if(preferences['use_alert_filter_criteria'] == "1") 700 { 701 var handlerMessageFilter = function (data) { 702 notificationFilter(data, notifyPermission); 703 alarmFollowupflagged('filtersAlarms', data); 704 705 } 706 /* Busca nas pastas indexadas para ver se há novas mensagens com a flag $FilteredMessage */ 707 cExecute ("$this.imap_functions.getFlaggedAlertMessages&folders="+fromRules, handlerMessageFilter); 708 } 732 709 733 710 if(data['msg_range_end']) … … 801 778 over : function(a, b){ 802 779 //SETA BORDA EM VOLTA DA PASTA 780 $(b.helper).find(".draggin-folder,.draggin-mail").css("color", "green"); 803 781 over = $(this); 804 782 $(this).addClass("folder-over"); … … 813 791 } 814 792 }, 815 out : function(){ 793 out : function(a,b){ 794 816 795 //RETIRA BORDA EM VOLTA DA PASTA 796 $(b.helper).find(".draggin-folder,.draggin-mail").css("color", ""); 817 797 $(this).removeClass("folder-over"); 818 798 }, … … 1005 985 1006 986 var userTrashFolder = ''; 1007 1008 if (arguments.length <= 6 ) show_success_msg = true;987 988 if (arguments.length <= 6 && typeof(show_success_msg) == "undefined") show_success_msg = true; 1009 989 if (folder == 'null') folder = current_folder; 1010 990 … … 1013 993 var arrayFolder = folder.split(cyrus_delimiter); 1014 994 userTrashFolder = 'user'+cyrus_delimiter+arrayFolder[1]+cyrus_delimiter+special_folders['Trash']; 1015 var has_folder = false;//Folder.get( userTrashFolder, false ); 1016 var folders = DataLayer.get("folder"); 1017 $.each(folders,function(index,value){ 1018 if(value && value.id == userTrashFolder)1019 has_folder = true; 1020 }); 1021 995 var has_folder = false;//Folder.get( userTrashFolder, false ); 996 var folders = DataLayer.get("folder"); 997 $.each(folders,function(index,value){ 998 if(value && value.id == userTrashFolder) 999 has_folder = true; 1000 }); 1001 1022 1002 if(!has_folder){ 1023 1003 create_new_folder(special_folders['Trash'], 'user'+cyrus_delimiter+arrayFolder[1]); … … 1097 1077 data = connector.unserialize( data ); 1098 1078 1099 if( data ) 1100 show_msg( data ); 1079 if( data ){ 1080 data.openSameBorder = true; 1081 show_msg( data ); 1082 } 1101 1083 }, 1102 1084 beforeSend: function( jqXHR, settings ){ … … 1147 1129 params_to_delete += "&search_box_type="+search_box_type; 1148 1130 params_to_delete += "&sort_box_reverse="+sort_box_reverse; 1131 1149 1132 cExecute ("$this.imap_functions.delete_msgs", handler_delete_msgs, params_to_delete); 1150 1133 } … … 1359 1342 return false; 1360 1343 } 1344 1361 1345 mail_msg = ( Element("divScrollMain_"+numBox) ) ? Element("divScrollMain_"+numBox).firstChild.firstChild : Element("divScrollMain_0").firstChild.firstChild; 1346 1347 var showMsg = function(){ 1348 1349 //Se pref. usar mensagens locais ativada e não for operação de arquivamento exibe mensagem de remoção. 1350 if(preferences.use_local_messages == 1){ 1351 if(!expresso_mail_archive.isArchiveOperation){ 1352 if (data.msgs_number.length == 1 || typeof(data.msgs_number) == 'string' ) 1353 write_msg(get_lang("The message was moved to folder ") + lang_folder(data.new_folder_name)); 1354 else 1355 write_msg(get_lang("The messages were moved to folder ") + lang_folder(data.new_folder_name)); 1356 } 1357 } else { 1358 if (data.msgs_number.length == 1 || typeof(data.msgs_number) == 'string' ) 1359 write_msg(get_lang("The message was moved to folder ") + lang_folder(data.new_folder_name)); 1360 else 1361 write_msg(get_lang("The messages were moved to folder ") + lang_folder(data.new_folder_name)); 1362 } 1363 } 1362 1364 1363 1365 if (openTab.type[currentTab] > 1) … … 1394 1396 proxy_mensagens.get_msg(previous_msg,folder,null,show_msg); 1395 1397 } 1396 } 1398 } 1397 1399 } 1398 1400 //se houver pagina anterior a paginação deve ser refeita … … 1453 1455 mail_msg.removeChild(msg_to_delete); 1454 1456 } 1455 1457 if (preferences.use_shortcuts == '1' && msg_to_delete && !msg_to_delete.previousSibling){ 1458 if( $("#tbody_box .current_selected_shortcut_msg").length == 0 ){ 1459 select_msg('null','reload_msg','null'); 1460 } 1461 } 1456 1462 // Update Box BgColor 1457 1463 var box = Element("tbody_box"); … … 1464 1470 Element('tot_m').innerHTML = parseInt(Element('tot_m').innerHTML) - 1; 1465 1471 } 1472 1473 showMsg(); 1466 1474 return; 1467 1475 } … … 1508 1516 } 1509 1517 1510 //Se pref. usar mensagens locais ativada e não for operação de arquivamento exibe mensagem de remoção. 1511 if(preferences.use_local_messages == 1){ 1512 if(!expresso_mail_archive.isArchiveOperation){ 1513 if (data.msgs_number.length == 1) 1514 write_msg(get_lang("The message was moved to folder ") + lang_folder(data.new_folder_name)); 1515 else 1516 write_msg(get_lang("The messages were moved to folder ") + lang_folder(data.new_folder_name)); 1517 } 1518 } else { 1519 if (data.msgs_number.length == 1) 1520 write_msg(get_lang("The message was moved to folder ") + lang_folder(data.new_folder_name)); 1521 else 1522 write_msg(get_lang("The messages were moved to folder ") + lang_folder(data.new_folder_name)); 1523 } 1518 showMsg(); 1524 1519 1525 1520 if (data.border_ID.indexOf('r') != -1){ … … 1550 1545 1551 1546 try{ 1552 if (proxy_mensagens.is_local_folder(Element('input_folder_'+currentTab).getAttribute('value')) && !border_ID) { 1553 alert(get_lang("You cant manipulate local messages on search")); 1554 return; 1555 } 1547 if(Element('input_folder_'+currentTab)) 1548 if (proxy_mensagens.is_local_folder(Element('input_folder_'+currentTab).getAttribute('value')) && !border_ID) { 1549 alert(get_lang("You cant manipulate local messages on search")); 1550 return; 1551 } 1556 1552 } catch (e) {} 1557 1553 //Validação para recuperar o id caso não seja aba de listagem … … 1599 1595 //expresso_mail_archive.moveMessages(new_folder.substr(6), msgs_number); 1600 1596 expresso_mail_archive.moveMessages(new_folder.replace('local_messages_', ''), msgs_number); 1601 if(currentTab != 0) 1602 delete_border(border_ID);1597 if(currentTab != 0) 1598 delete_border(border_ID); 1603 1599 } 1604 1600 else{ … … 1682 1678 } 1683 1679 var hasFolder = false; 1684 $.each(fromRules, function(index, value) { 1685 if(value == folder){ 1686 hasFolder = true; 1687 cExecute ("$this.imap_functions.removeFlagMessagesFilter&folder="+folder+"&msg_number="+msgs_number, handler_removeFlag); 1688 return false; 1689 } 1690 }); 1680 if(preferences['use_alert_filter_criteria'] == "1") 1681 { 1682 $.each(fromRules, function(index, value) { 1683 if(value == folder){ 1684 hasFolder = true; 1685 cExecute ("$this.imap_functions.removeFlagMessagesFilter&folder="+folder+"&msg_number="+msgs_number, handler_removeFlag); 1686 return false; 1687 } 1688 }); 1689 } 1691 1690 if(!hasFolder){ 1692 1691 handler_removeFlag(); … … 2149 2148 2150 2149 function new_message_to(email) { 2151 var new_border_ID = new_message('new','null'); 2152 if (!new_border_ID){ 2153 var msgId; 2154 setTimeout(function(){ 2155 msgId = $('#border_tr td.menu-sel').attr('id').toString(); 2156 content = $("#content_id_"+msgId.substr(msgId.lastIndexOf("_")+1,msgId.length)); 2157 /*Envio de email para um grupo*/ 2158 if (email.indexOf('@') == -1){ 2159 var groups = REST.get('/groups'); 2160 $.each(normalizeContacts(groups.collection.itens),function(index,group){ 2161 if (group.name.toLocaleLowerCase() == email.toLocaleLowerCase()){ 2162 email = group.id; 2163 } 2164 }); 2165 draw_email_box(email, content.find('.to').filter('textarea:first'),"G"); 2166 } 2167 else 2168 draw_reply_boxes_by_field("to",email,content); 2169 },500); 2170 } 2171 else{ 2172 var content = $("#content_id_"+new_border_ID);2173 if (email.indexOf('@') == -1){ 2174 var groups = REST.get('/groups'); 2175 $.each(normalizeContacts(groups.collection.itens),function(index,group){ 2176 if (group.name.toLocaleLowerCase() == email.toLocaleLowerCase()){ 2177 email = group.id; 2178 } 2179 }); 2180 draw_email_box(email, content.find('.to').filter('textarea:first'),"G"); 2181 } 2182 else 2183 draw_reply_boxes_by_field("to",email,content); 2184 } 2150 var new_border_ID = new_message('new','null'); 2151 if (!new_border_ID){ 2152 var msgId; 2153 setTimeout(function(){ 2154 msgId = $('#border_tr td.menu-sel').attr('id').toString(); 2155 content = $("#content_id_"+msgId.substr(msgId.lastIndexOf("_")+1,msgId.length)); 2156 /*Envio de email para um grupo*/ 2157 if (email.indexOf('@') == -1){ 2158 var groups = REST.get('/groups'); 2159 $.each(normalizeContacts(groups.collection.itens),function(index,group){ 2160 if (group.name.toLocaleLowerCase() == email.toLocaleLowerCase()){ 2161 email = group.id; 2162 } 2163 }); 2164 draw_email_box(email, content.find('.to').filter('textarea:first'),"G"); 2165 } 2166 else 2167 draw_reply_boxes_by_field("to",email,content); 2168 },500); 2169 } 2170 else{ 2171 var content = $("#content_id_"+new_border_ID); 2172 if (email.indexOf('@') == -1){ 2173 var groups = REST.get('/groups'); 2174 $.each(normalizeContacts(groups.collection.itens),function(index,group){ 2175 if (group.name.toLocaleLowerCase() == email.toLocaleLowerCase()){ 2176 email = group.id; 2177 } 2178 }); 2179 draw_email_box(email, content.find('.to').filter('textarea:first'),"G"); 2180 } 2181 else 2182 draw_reply_boxes_by_field("to",email,content); 2183 } 2185 2184 } 2186 2185 … … 3397 3396 /* Lista de palavras que vão ser procuradas no corpo do email, referente às variantes da palavra anexo em português, inglês e espanhol. */ 3398 3397 if(language == "pt-br") //Português brasileiro 3399 var words = ['anexo', 'anexos', 'anexada', 'anexado', 'anexei', 'anexando', 'anexaste', 'anexastes', 'anexamos', 'anexaram'];3400 3398 var words = ['anexando', 'anexos', 'anexadas', 'anexados', 'anexei', 'anexaste', 'anexastes', 'anexamos', 'anexaram', 'anexas', 'anexado', 'anexada', 'anexo', 'anexa']; 3399 else if(language == "es-es") //Espanhol 3401 3400 var words = ['anexo','adjunto', 'adjuntos', 'adjuntado','adjuntamos']; 3402 3401 else //Inglês ('en') 3403 var words = ['attach', 'attachment', 'attached', 'annex', 'appending'];3402 var words = ['attach', 'attachment', 'attached', 'annex', 'appending', 'appendage', 'annexe', 'appendix']; 3404 3403 3405 3404 if($('#fileupload_msg'+ID).find('.att-box').length == 0 && preferences.alert_message_attachment == '1' ) { … … 3456 3455 function send_valided_message(ID, folder, folder_name) 3457 3456 { 3458 3459 3460 3461 3462 3463 3464 3465 3457 if (preferences.auto_save_draft == 1) 3458 autoSaveControl.status[ID] = true; 3459 3460 var content = $("#content_id_"+ID); 3461 var save_link = $("#content_id_"+ID).find(".save"); 3462 var onClick = save_link.onclick; 3463 save_link.onclick = ''; 3464 save_link.button({disabled: true}); 3466 3465 3467 3466 var _subject = trim(content.find(".subject").val()); … … 3478 3477 $.each(array, function(index, value){ 3479 3478 stringReply += $(value).find("input").val() + ","; 3480 }); 3479 }); 3481 3480 var stringToEmail = ""; 3482 3481 draw_email_box(content.find(".to-tr").find("textarea:first").val() || content.find(".to-tr").find("input:visible").val(), content.find(".to-tr").find("textarea:first")); … … 3513 3512 }); 3514 3513 } 3515 stringEmail += 3514 stringEmail += stringCCEmail; 3516 3515 3517 3516 var mailData = new Object(); … … 3534 3533 mailData.msg_forward_from = $(content).find('[name="msg_forward_from"]').val(); 3535 3534 mailData.msg_reply_from = $(content).find('[name="msg_reply_from"]').val(); 3536 3537 if ($(content).find('select[name="input_from"]').val()) 3538 mailData.input_from = $(content).find('select[name="input_from"]').val(); 3539 3540 3541 if(stringEmail != ""){ 3542 $.ajax({ 3543 url: "controller.php?action=$this.imap_functions.send_mail", 3544 data: mailData, 3545 type: 'POST', 3546 3547 beforeSend: function(jqXHR, settings){ 3548 3549 write_msg( get_lang( 'Sending the message...' ) ); 3550 $(content).find('button.send').button('option', 'disabled', true); 3551 3552 3553 }, 3554 success: function(data){ 3555 send_message_return(connector.unserialize(data),ID); 3556 }, 3557 error: function(){ 3558 write_msg(get_lang( 'Error trying to send the message. Retry in a few seconds...' ) ); 3559 $(content).find('button.send').button('option', 'disabled', false); 3560 var interval = setInterval(function(){ 3561 send_valided_message(ID,folder,folder_name); 3562 clearInterval(interval); 3563 },15000); 3564 return; 3565 } 3566 }); 3535 3536 if ($(content).find('select[name="input_from"]').val()) 3537 mailData.input_from = $(content).find('select[name="input_from"]').val(); 3538 3539 if(stringEmail != ""){ 3540 $.ajax({ 3541 url: "controller.php?action=$this.imap_functions.send_mail", 3542 data: mailData, 3543 type: 'POST', 3544 async: false, 3545 beforeSend: function(jqXHR, settings){ 3546 write_msg( get_lang( 'Sending the message...' ) ); 3547 $(content).find('button.send').button('option', 'disabled', true); 3548 }, 3549 success: function(data){ 3550 send_message_return(connector.unserialize(data),ID); 3551 }, 3552 error: function(){ 3553 write_msg(get_lang( 'Error trying to send the message. Retry in a few seconds...' ) ); 3554 $(content).find('button.send').button('option', 'disabled', false); 3555 var interval = setInterval(function(){ 3556 send_valided_message(ID,folder,folder_name); 3557 clearInterval(interval); 3558 },15000); 3559 return; 3560 } 3561 }); 3567 3562 }else{ 3568 write_msg(get_lang("message without receiver")); 3569 return; 3570 } 3571 3572 3563 write_msg(get_lang("message without receiver")); 3564 } 3573 3565 } 3574 3566 … … 3765 3757 case "unseen": 3766 3758 set_msg_as_unread(msgs[j]+'_s'+id_border, true); 3759 set_msg_as_unread(msgs[j], true); // Atualiza msg na aba principal. 3767 3760 Element("search_"+id_border+"_check_box_message_"+msgs[j]).checked = false; 3768 3761 break; 3769 3762 case "seen": 3770 3763 set_msg_as_read(msgs[j]+'_s'+id_border, true); 3764 set_msg_as_read(msgs[j], true); //Atualiza msg na aba principal. 3771 3765 Element("search_"+id_border+"_check_box_message_"+msgs[j]).checked = false; 3772 3766 break; … … 3787 3781 } 3788 3782 3789 draw_tree_folders( );3783 draw_tree_folders(folders); 3790 3784 Element('chk_box_select_all_messages_search').checked = false; 3791 3785 refresh(); … … 3878 3872 Element("check_box_message_" + msgs_to_set[i]).checked = false; 3879 3873 3880 // remove a flag $FilteredMessage da mensagem ao ser marcada como lida 3881 $.each(fromRules, function(index, value) { 3882 if(value == folder){ 3883 cExecute ("$this.imap_functions.removeFlagMessagesFilter&folder="+folder+"&msg_number="+msgs_to_set, function(){}); 3884 return false; 3885 } 3886 }); 3887 3874 if(preferences['use_alert_filter_criteria'] == "1") 3875 { 3876 // remove a flag $FilteredMessage da mensagem ao ser marcada como lida 3877 $.each(fromRules, function(index, value) { 3878 if(value == folder){ 3879 cExecute ("$this.imap_functions.removeFlagMessagesFilter&folder="+folder+"&msg_number="+msgs_to_set, function(){}); 3880 return false; 3881 } 3882 }); 3883 } 3888 3884 break; 3889 3885 case "flagged": … … 4455 4451 update_quota(get_current_folder()); 4456 4452 draw_new_tree_folder(); 4457 draw_tree_labels(); 4453 if( preferences['use_followupflags_and_labels'] == "1" ) 4454 draw_tree_labels(); 4458 4455 if (data){ 4459 4456 if(typeof(data) == "object"){ … … 4514 4511 //tree_folders.getNodeById(mount_url_folder(["INBOX",special_folders["Spam"]]))._refresh(); 4515 4512 draw_new_tree_folder(); 4516 draw_tree_labels(); 4513 if( preferences['use_followupflags_and_labels'] == "1" ) 4514 draw_tree_labels(); 4517 4515 update_quota(get_current_folder()); 4518 4516 if (data){ … … 4552 4550 } 4553 4551 4554 function buildExportArchiver(msgsArchive, name_box){4555 4556 var hand_export = function(data){4557 if(!data){4558 write_msg(get_lang('Error compressing messages (ZIP). Contact the administrator.'))4559 }else if(data["empty_folder"] || data == "empty_folder"){4560 write_msg(get_lang("The selected folder is empty."));4561 }else4562 download_attachments(null, null, data, null,null, get_current_folder().split("_")[2] +'.zip');4563 }4564 4565 var array = new Array();4566 4567 for(var i =0; i < msgsArchive.length; i++){4568 eachMsg = {4569 'ContentType' : msgsArchive[i].ContentType,4570 'from' : { 'email' : msgsArchive[i].from.email, 'full' : msgsArchive[i].from.full, 'name' : msgsArchive[i].from.name},4571 'msg_sample' : msgsArchive[i].msg_sample,4572 'subject' : msgsArchive[i].subject,4573 'to' : { 'email' : msgsArchive[i].to.email, 'full' : msgsArchive[i].to.full, 'name' : msgsArchive[i].to.name},4574 'toaddress2' : msgsArchive[i].toaddress2,4575 'msg_number' : msgsArchive[i].msg_number,4576 'date' : new Date(msgsArchive[i].timestamp).toString()4577 };4578 array.push(eachMsg);4579 }4580 4581 $.ajax({4582 type: "POST",4583 url: "controller.php?action=$this.exporteml.export_all_byLocalFolder",4584 data: { folder: name_box, type: "msg_local", messages : array}4585 }).done(function(msg) {4586 hand_export(msg.split('"')[1]);4587 });4588 }4589 4590 4552 function export_all_selected_msgs(){ 4591 4553 if(get_current_folder().split("_")[0] == "local"){ … … 4596 4558 expresso_mail_archive.getSomeMsgs([get_selected_messages()]); 4597 4559 } 4560 4561 } else { 4598 4562 4599 buildExportArchiver(expresso_mail_archive.getSomeMsg, get_current_folder().split("_")[2]);4600 4601 } else {4602 4603 4563 if (openTab.type[currentTab] > 1){ 4604 4564 source_msg(currentTab,openTab.imapBox[currentTab]); … … 4635 4595 filename = data[1]+'.eml'; 4636 4596 } 4637 4638 if(typeof data == "object") 4639 download_attachments(null, null, data[0], null,null,filename); 4640 else 4641 download_attachments(null, null, data, null,null,filename); 4597 4598 if(typeof data == "object") 4599 download_attachments(null, null, data[0], null,null,filename); 4600 else 4601 download_attachments(null, null, data, null,null,filename); 4642 4602 } 4643 4603 } … … 4879 4839 write_msg(get_lang('You must wait while the messages will be imported...')); 4880 4840 4881 var local_folder = input_hidden.attr("value"); //recupera a pasta selecionada 4882 if(local_folder.indexOf("local_") == 0){ //verifica se a pasta selecionada é uma pasta local 4883 4884 var fdata = local_folder.substr(15, local_folder.length); //recupera somente a estrutura da pasta ou o id 4885 expresso_mail_archive.getFolderInfo(fdata); //recuperar a estrutura da pasta, 4886 //para realizar a importação de mensagens 4887 fdata = expresso_mail_archive.folder.path; 4888 4889 //o mailarchiver não provê um serviço para a importação de mensagens nas pastas locais, 4890 //mas sim uma modal, da qual são extraídas as informações e as urls para submitar os dados 4891 //para o arquivamento de mensagens em pastas locais. 4892 var url_src = mail_archive_protocol + '://' + mail_archive_host + ':' + mail_archive_port + '/arcserv/import?prt=' + mail_archive_protocol + '&por=' + mail_archive_port+ '&fid='+ encodeURIComponent(fdata) + '&sid=' + expresso_mail_archive.session.id; 4893 var _html = DataLayer.render(url_src); 4894 var regex_url = RegExp('\<iframe(.)*src=\"([^\"]*)"(.)*\>'); 4895 var obj_params = $.parseQuery( regex_url.exec(_html)[2].split('?')[1] || '' ); 4896 $(formSend).append('<input id="ma_import_flat" type="checkbox" value="false" name="flat" style="display:none"> ' + 4897 '<input id="sessionId" type="hidden" value="'+obj_params['sessvalue']+'" name="sessionId">' + 4898 '<input id="base" type="hidden" value="'+obj_params['basevalue']+'" name="base">' + 4899 '<input id="lang" type="hidden" value="'+obj_params['langvalue']+'" name="lang">'); 4900 4901 var importEmailsLocalDialog = $('#importEmailsLocal'); 4902 importEmailsLocalDialog.css("overflow","hidden"); 4903 importEmailsLocalDialog.dialog( 4904 { 4905 autoOpen : false, 4906 height : 200, 4907 width : 350, 4908 resizable : false, 4909 title : get_lang('Local Archive'), 4910 modal : true, 4911 buttons : [ 4912 { 4913 text : get_lang("Close"), 4914 click : function() 4915 { 4916 importEmailsLocalDialog.dialog("close").dialog("destroy"); 4917 } 4918 } 4919 ] 4920 }); 4921 4922 importEmailsLocalDialog.html('<iframe frameborder="0" scrolling="no" id="frameResult" name="frameResult" ></iframe>') 4923 $(formSend).attr("action", mail_archive_protocol + '://' + mail_archive_host + ':' + mail_archive_port + '/arcserv/import'); 4924 $(formSend).attr("target", "frameResult"); 4925 $(formSend).submit(); 4926 importEmailsLocalDialog.dialog( "open" ); 4927 if(typeof(shortcut) != 'undefined') 4841 var local_folder = input_hidden.attr("value"); //recupera a pasta selecionada 4842 if(local_folder.indexOf("local_") == 0){ //verifica se a pasta selecionada é uma pasta local 4843 var fdata = local_folder.substr(15, local_folder.length); //recupera somente a estrutura da pasta ou o id 4844 expresso_mail_archive.getFolderInfo(fdata); //recuperar a estrutura da pasta, 4845 //para realizar a importação de mensagens 4846 fdata = expresso_mail_archive.folder.path; 4847 4848 //o mailarchiver não provê um serviço para a importação de mensagens nas pastas locais, 4849 //mas sim uma modal, da qual são extraídas as informações e as urls para submitar os dados 4850 //para o arquivamento de mensagens em pastas locais. 4851 var url_src = mail_archive_protocol + '://' + mail_archive_host + ':' + mail_archive_port + '/arcserv/import?prt=' + mail_archive_protocol + '&por=' + mail_archive_port+ '&fid='+ encodeURIComponent(fdata) + '&sid=' + expresso_mail_archive.session.id; 4852 var _html = DataLayer.render(url_src); 4853 var regex_url = RegExp('\<iframe(.)*src=\"([^\"]*)"(.)*\>'); 4854 var obj_params = $.parseQuery( regex_url.exec(_html)[2].split('?')[1] || '' ); 4855 $(formSend).append('<input id="ma_import_flat" type="checkbox" value="false" name="flat" style="display:none"> ' + 4856 '<input id="sessionId" type="hidden" value="'+obj_params['sessvalue']+'" name="sessionId">' + 4857 '<input id="base" type="hidden" value="'+obj_params['basevalue']+'" name="base">' + 4858 '<input id="lang" type="hidden" value="'+obj_params['langvalue']+'" name="lang">'); 4859 4860 var importEmailsLocalDialog = $('#importEmailsLocal'); 4861 importEmailsLocalDialog.css("overflow","hidden"); 4862 importEmailsLocalDialog.dialog( 4863 { 4864 autoOpen : false, 4865 height : 200, 4866 width : 350, 4867 resizable : false, 4868 title : get_lang('Local Archive'), 4869 modal : true, 4870 buttons : [ 4871 { 4872 text : get_lang("Close"), 4873 click : function() 4874 { 4875 importEmailsLocalDialog.dialog("close").dialog("destroy"); 4876 } 4877 } 4878 ] 4879 }); 4880 4881 importEmailsLocalDialog.html('<iframe frameborder="0" scrolling="no" id="frameResult" name="frameResult" ></iframe>') 4882 $(formSend).attr("action", mail_archive_protocol + '://' + mail_archive_host + ':' + mail_archive_port + '/arcserv/import'); 4883 $(formSend).attr("target", "frameResult"); 4884 $(formSend).submit(); 4885 importEmailsLocalDialog.dialog( "open" ); 4886 if(typeof(shortcut) != 'undefined') 4928 4887 shortcut.disabled = false; 4929 } else { 4930 cExecuteForm('$this.imap_functions.import_msgs', formSend , handler_return ); 4931 } 4932 4888 } else { 4889 cExecuteForm('$this.imap_functions.import_msgs', formSend , handler_return ); 4890 } 4891 4933 4892 } 4934 4893 } … … 5439 5398 if(data.append == 1) 5440 5399 { 5441 proxy_mensagens.get_msg(data.msg_number,data.msg_folder,false,show_msg,false); 5400 proxy_mensagens.get_msg(data.msg_number,data.msg_folder,false,function (data) { 5401 if (onceOpenedHeadersMessages[data.msg_folder] == undefined) 5402 { 5403 onceOpenedHeadersMessages[data.msg_folder] = []; 5404 }; 5405 onceOpenedHeadersMessages[data.msg_folder][data.msg_number] = data; 5406 show_msg(data); 5407 },false); 5442 5408 partMsgs.push(data.msg_number); 5443 5409 } -
branches/2.5/expressoMail1_2/js/messages_controller.js
r8128 r8232 12 12 if(this.is_local_folder(folder)) { 13 13 //MAILARCHIVER-01 14 var baseFolder = folder.replace('local_messages_', ''); 14 var baseFolder = folder.replace('local_messages_', ''); 15 15 var tree_name; 16 16 var drawinginfo = {}; -
branches/2.5/expressoMail1_2/js/rich_text_editor.js
r8166 r8232 130 130 cRichTextEditor.prototype.getSignaturesOptions = function() { 131 131 132 133 132 if(RichTextEditor.signatures !== false) 133 return RichTextEditor.signatures; 134 134 135 135 var signatures = RichTextEditor.normalizerSignature(this.fromJSON( preferences.signatures )); … … 138 138 for( key in signatures ) 139 139 if( !signature_types[key] ) 140 signatures[key] = signatures[key].replace( /\n/g, "<br>" ); 141 142 RichTextEditor.signatures = signatures; 143 return signatures; 144 145 } 146 cRichTextEditor.prototype.normalizerSignature = function(values) { 147 var value = {}; 148 for (key in values){ 149 value[RichTextEditor.isEncoded64(key) ? RichTextEditor.decode64(key) : key] = values[key]; 150 } 151 return value; 152 153 } 154 155 /*Verifica se a string input esta em Base64*/ 156 cRichTextEditor.prototype.isEncoded64 = function(input){ 157 var baseStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; 158 var encoded = true; 159 if ( (input.length % 4) != 0) 160 return false; 161 for(var i=0; i<input.length; i++){ 162 if ( baseStr.indexOf(input[i]) < 0 ){ 163 encoded = false; 164 break; 165 } 166 } 167 return encoded; 140 signatures[key] = signatures[key].replace( /\n/g, "<br>" ); 141 142 RichTextEditor.signatures = signatures; 143 return signatures; 144 145 } 146 cRichTextEditor.prototype.normalizerSignature = function(values) { 147 148 var value = {}; 149 150 for (key in values){ 151 152 value[RichTextEditor.isEncoded64(key) ? RichTextEditor.decode64(key) : key] = values[key]; 153 } 154 155 return value; 156 157 } 158 159 /*Verifica se a string input esta em Base64*/ 160 cRichTextEditor.prototype.isEncoded64 = function(input){ 161 var baseStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; 162 var encoded = true; 163 if ( (input.length % 4) != 0) 164 return false; 165 for(var i=0; i<input.length; i++){ 166 if ( baseStr.indexOf(input[i]) < 0 ){ 167 encoded = false; 168 break; 169 } 170 } 171 return encoded; 168 172 } 169 173 170 174 cRichTextEditor.prototype.getSignatureDefault = function() { 171 172 173 174 175 }175 176 if(RichTextEditor.signatures === false){ 177 RichTextEditor.signatures = RichTextEditor.getSignaturesOptions(); 178 preferences.signature_default = preferences.signature; 179 } 176 180 177 if(!RichTextEditor.signatures || !preferences.signature_default) 178 { 179 preferences.use_signature = "0"; //Desabilita o uso da assinatura 180 return ''; 181 } 182 if (RichTextEditor.isEncoded64(preferences.signature_default)) 183 preferences.signature_default = RichTextEditor.decode64(preferences.signature_default); 184 return unescape(preferences.signature_default); 185 186 } 187 181 if(!RichTextEditor.signatures || !preferences.signature_default) 182 { 183 preferences.use_signature = "0"; //Desabilita o uso da assinatura 184 return ''; 185 } 186 if (RichTextEditor.isEncoded64(preferences.signature_default)) 187 preferences.signature_default = RichTextEditor.decode64(preferences.signature_default); 188 return unescape(preferences.signature_default); 189 190 } 188 191 189 192 … … 216 219 { 217 220 autoSaveControl.status[id] = true; 218 autoSaveControl.timer[id] = window.setInterval( "autoSave( "+id+")" ,autosave_time);221 autoSaveControl.timer[id] = window.setInterval( "autoSave(\""+id+"\")" ,autosave_time); 219 222 220 223 CKEDITOR.instances[inst].document.on('keydown', function(event){ -
branches/2.5/expressoMail1_2/js/search.js
r7760 r8232 568 568 $(td).click(function(event, ui){ 569 569 var messageClickedId = $(this).attr('id').match(/td_message_followup_search_([\d]+)/)[1]; 570 571 var loading = $('tr[role="'+messageClickedId+'_'+mailbox+'"] #td_message_followup_search_' + messageClickedId).find(".flag-edited") 572 .find('img[alt=Carregando]'); 573 574 //Verificar se está carregando a bandeira. 575 //Caso esteja ele sai da função até que seja carregado. 576 if( loading.length ) { 577 return false; 578 } 579 580 var followupColor = $('tr[role="'+messageClickedId+'_'+mailbox+'"] #td_message_followup_search_' + messageClickedId).find(".flag-edited").css('backgroundColor'); 581 570 582 571 583 var followupColor = $('tr[role="'+messageClickedId+'_'+mailbox+'"] #td_message_followup_search_' + messageClickedId).find(".flag-edited").css('backgroundColor'); … … 607 619 608 620 $('tr[role="'+messageClickedId+'_'+mailbox+'"] #td_message_followup_search_' + messageClickedId).find(".flag-edited") 609 .css({"background-image":"url(../prototype/modules/mail/img/flagEditor.png)"}); 621 .css({"background-image":"url(../prototype/modules/mail/img/flagEditor.png)"}) 622 .find('img').remove();; 610 623 611 624 if (fail) { … … 613 626 var isCurrentFolder = current_folder == mailbox ? '#td_message_followup_' + messageClickedId + ', ' : ''; 614 627 $(isCurrentFolder + 'tr[role="'+messageClickedId+'_'+mailbox+'"] #td_message_followup_search_' + messageClickedId).find(".flag-edited").css("background", "#CCCCCC"); 628 629 $('#td_message_followup_search_' + messageClickedId).find(".flag-edited") 630 .append("<img src='../prototype/modules/mail/img/flagEditor.png'/>"); 631 615 632 MsgsCallbackFollowupflag[fail](); 616 633 return false; … … 619 636 if(current_folder == mailbox){ 620 637 $('#td_message_followup_' + messageClickedId + ', ' + 621 'tr[role="'+messageClickedId+'_'+mailbox+'"] #td_message_followup_search_' + messageClickedId).attr('title', get_lang('Follow up')).find(".flag-edited").css("background", aux.followupflagged.backgroundColor); 638 'tr[role="'+messageClickedId+'_'+mailbox+'"] #td_message_followup_search_' + messageClickedId).attr('title', get_lang('Follow up')).find(".flag-edited").css("background", aux.followupflagged.backgroundColor); 639 640 $('tr[role="'+messageClickedId+'_'+mailbox+'"] #td_message_followup_search_' + messageClickedId).attr('title', get_lang('Follow up')).find(".flag-edited").css("background", aux.followupflagged.backgroundColor) 641 .append("<img src='../prototype/modules/mail/img/flagEditor.png'/>"); 622 642 }else{ 623 $('tr[role="'+messageClickedId+'_'+mailbox+'"] #td_message_followup_search_' + messageClickedId).attr('title', get_lang('Follow up')).find(".flag-edited").css("background", aux.followupflagged.backgroundColor); 643 $('tr[role="'+messageClickedId+'_'+mailbox+'"] #td_message_followup_search_' + messageClickedId).attr('title', get_lang('Follow up')).find(".flag-edited").css("background", aux.followupflagged.backgroundColor) 644 .append("<img src='../prototype/modules/mail/img/flagEditor.png'/>"); 624 645 } 625 646 updateCacheFollowupflag(messageClickedId, mailbox, true); … … 634 655 DataLayer.remove('followupflagged', flagged[0].id ); 635 656 DataLayer.commit(false, false, function(){ 636 $('tr[role="'+messageClickedId+'_'+mailbox+'"] #td_message_followup_search_' + messageClickedId).find(".flag-edited") 637 .css({" background-image":"url(../prototype/modules/mail/img/flagEditor.png)"});657 $('tr[role="'+messageClickedId+'_'+mailbox+'"] #td_message_followup_search_' + messageClickedId).find(".flag-edited").html('<img src="../prototype/modules/mail/img/flagEditor.png">') 658 .css({"width":"8px","height":"6px"/*,"background-image":"url(../prototype/modules/mail/img/flagEditor.png)"*/}); 638 659 if(current_folder == mailbox){ 639 660 updateCacheFollowupflag(messageClickedId, mailbox, false); … … 651 672 652 673 $('tr[role="'+messageClickedId+'_'+mailbox+'"] #td_message_followup_search_' + messageClickedId).find(".flag-edited") 653 .css({"background-image":"url(../prototype/modules/mail/img/flagEditor.png)"}); 674 .css({"background-image":"url(../prototype/modules/mail/img/flagEditor.png)"}) 675 .append("<img src='../prototype/modules/mail/img/flagEditor.png'/>"); 654 676 } 655 677 }); … … 657 679 } else { 658 680 $('tr[role="'+messageClickedId+'_'+mailbox+'"] #td_message_followup_search_' + messageClickedId).find(".flag-edited") 659 .css({"background-image":"url(../prototype/modules/mail/img/flagEditor.png)"}); 660 $('tr[role="'+messageClickedId+'_'+mailbox+'"] #td_message_followup_search_' + messageClickedId).find(".flag-edited").css("background", followupColor); 661 $(this).parents('[role="'+messageClickedId+'_'+mailbox+'"]').attr('class', 'selected_msg').find(':checkbox').trigger('click'); 681 .css({"background-image":"url(../prototype/modules/mail/img/flagEditor.png)"}).find('img').remove(); 682 683 $('tr[role="'+messageClickedId+'_'+mailbox+'"] #td_message_followup_search_' + messageClickedId).find(".flag-edited").css("background", followupColor) 684 .append("<img src='../prototype/modules/mail/img/flagEditor.png'/>"); 685 686 //Pega id do checkbox 687 var id = $(this).parents('[role="'+messageClickedId+'_'+mailbox+'"]').attr('class', 'selected_msg').find(':checkbox').attr('id'); 688 689 //verifica se o checkbox já está selecionada 690 if($('#' + id).attr('checked') != 'checked') 691 $(this).parents('[role="'+messageClickedId+'_'+mailbox+'"]').attr('class', 'selected_msg').find(':checkbox').trigger('click'); 692 693 updateSelectedMsgs(true,messageClickedId); 662 694 configureFollowupflag(); 663 695 } … … 676 708 if (aux.labels) { 677 709 //td1 = '<img src="../prototype/modules/mail/img/tag.png">'; 678 $(td 1).css({'background-image':'url(../prototype/modules/mail/img/mail-sprites.png)','background-position': '0 -1711px',"margin-left":"0",'margin-top':'3px','background-repeat':'no-repeat'});710 $(td).css({'background-image':'url(../prototype/modules/mail/img/mail-sprites.png)','margin-left': '0px', 'margin-top':'3px', 'background-position': '0px -1706px', 'background-repeat':'no-repeat no-repeat'}); 679 711 updateLabelsColumn(aux) 680 712 } else { … … 829 861 over : function(a, b){ 830 862 //SETA BORDA EM VOLTA DA PASTA 863 $(b.helper).find(".draggin-folder,.draggin-mail").css("color", "green"); 831 864 over = $(this); 832 865 $(this).addClass("folder-over"); … … 841 874 } 842 875 }, 843 out : function( ){876 out : function(a,b){ 844 877 //RETIRA BORDA EM VOLTA DA PASTA 878 $(b.helper).find(".draggin-folder,.draggin-mail").css("color", ""); 845 879 $(this).removeClass("folder-over"); 846 880 }, … … 882 916 return $(DataLayer.render('../prototype/modules/mail/templates/draggin_box.ejs', {texto : $(this).find(".td_msg_search_subject").text(), type: "messages"})); 883 917 }, 884 cursorAt: { cursor: "crosshair", top: -5, left: -5},918 cursorAt: {top: 5, left: 56}, 885 919 refreshPositions: true , 886 920 scroll: true, -
branches/2.5/expressoMail1_2/js/shortcut.js
r8087 r8232 209 209 210 210 } 211 if (currentTab && currentTab == 0 && code == 13){ 212 e.stopPropagation(); 213 e.preventDefault(); 214 } 211 if (currentTab && currentTab == 0 && code == 13){ 212 e.stopPropagation(); 213 e.preventDefault(); 214 } 215 if ((openTab.type[currentTab] == 2) && code == 13){ 216 e.preventDefault(); 217 e.stopPropagation(); 218 } 215 219 } 216 220 this.all_shortcuts[shortcut_combination] = { … … 279 283 proxy_mensagens.delete_msgs(current_folder, get_selected_messages(), 'null'); 280 284 }else{ 281 if (e.target.className.indexOf("box") == -1) 282 proxy_mensagens.delete_msgs(openTab.imapBox[currentTab], currentTab.substring(0, selMessageShortcut.indexOf("_r")), 'null'); 285 if (e.target.className.indexOf("box") == -1) 286 proxy_mensagens.delete_msgs(openTab.imapBox[currentTab], currentTab.substring(0, selMessageShortcut.indexOf("_r")), 'null'); 283 287 } 284 288 } -
branches/2.5/expressoMail1_2/js/wfolders.js
r7426 r8232 48 48 click : function() 49 49 { 50 winSaveFile.dialog("close"),dialog("destroy"); 50 winSaveFile.dialog("close"); 51 winSaveFile.dialog("destroy"); 51 52 } 52 53 }, … … 134 135 cWFolders.prototype.makeWindow = function(border_id, type) 135 136 { 136 if(typeof (currentTab) == "string" && currentTab.indexOf("local") != -1){ 137 alert("Impossível manipular mensagens locais a partir de uma busca. Isso é permitido apenas para mensagens não locais."); 138 return true; 137 if(type == "move_to"){ 138 if( (currentTab == 0) || (currentTab.toString().indexOf("search") >= 0)){ 139 140 //Verifica em qual aba o usuário está 141 var selected_msg = (currentTab == 0) ? get_selected_messages() : get_selected_messages_search(); 142 143 if ((parseInt(selected_msg) > 0 || selected_msg.length > 0)||(type != "move_to")){ 144 this.load( border_id, type, false); 145 }else 146 write_msg(get_lang('No selected message.')); 147 } else{ 148 if(typeof (currentTab) == "string" && currentTab.indexOf("local") != -1){ 149 alert("Impossível manipular mensagens locais a partir de uma busca. Isso é permitido apenas para mensagens não locais."); 150 return true; 151 } 152 this.load( border_id, type, false); 153 } 154 }else { 155 if(typeof (currentTab) == "string" && currentTab.indexOf("local") != -1){ 156 alert("Impossível manipular mensagens locais a partir de uma busca. Isso é permitido apenas para mensagens não locais."); 157 return true; 158 } 159 this.load( border_id, type, false); 139 160 } 140 this.load( border_id, type, false); 141 } 161 } 142 162 143 163 /* Build the Object */ -
branches/2.5/expressoMail1_2/setup/phpgw_pt-br.lang
r8117 r8232 972 972 MailArchiver user logged out expressoMail1_2 pt-br Usuário desconectado do MailArchiver 973 973 Error trying to send the message. Retry in a few seconds... expressoMail1_2 pt-br Erro ao tentar enviar a mensagem. Nova tentativa em alguns segundos... 974 Create filter from message expressoMail1_2 pt-br Criar filtro a partir da mensagem 974 975 Sending the message... expressoMail1_2 pt-br Enviando a mensagem... 975 Local Archive expressoMail1_2 pt-br Arquivamento Local 976 Please, Wait the messages from archieve be ready. expressoMail1_2 pt-br Por favor, Aguarde as mensagens arquivadas ficarem prontas. 977 take on this option to regard the message body in the search. expressoMail1_2 pt-br Considerar o corpo da mensagem como filtro na busca 978 take off this option to disregard the message body in the search. expressoMail1_2 pt-br Desconsiderar o corpo da mensagem como filtro na busca 979 Local Archive expressoMail1_2 pt-br Arquivamento Local -
branches/2.5/expressoMail1_2/setup/setup.inc.php
r7516 r8232 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.5. 0';15 $setup_info['expressoMail1_2']['version'] = '2.5.1'; 16 16 $setup_info['expressoMail1_2']['app_order'] = 2; 17 17 $setup_info['expressoMail1_2']['tables'][] = 'phpgw_certificados'; … … 46 46 $setup_info['expressoMail1_2']['depends'][] = array( 47 47 'appname' => 'phpgwapi', 48 'versions' => Array('2.5. 0')48 'versions' => Array('2.5.1.1') 49 49 ); 50 50 -
branches/2.5/expressoMail1_2/setup/tables_update.inc.php
r7516 r8232 330 330 331 331 $test[] = '2.4.8.2'; 332 function expressoMail1_2_upgrade2_4_8_2() { 333 $GLOBALS['setup_info']['expressoMail1_2']['currentver'] = '2.5.0'; 334 return $GLOBALS['setup_info']['expressoMail1_2']['currentver']; 335 } 336 332 function expressoMail1_2_upgrade2_4_8_2() { 333 $GLOBALS['setup_info']['expressoMail1_2']['currentver'] = '2.5.0'; 334 return $GLOBALS['setup_info']['expressoMail1_2']['currentver']; 335 } 336 337 $test[] = '2.5.0'; 338 function expressoMail1_2_upgrade2_5_0() { 339 $GLOBALS['setup_info']['expressoMail1_2']['currentver'] = '2.5.1'; 340 return $GLOBALS['setup_info']['expressoMail1_2']['currentver']; 341 } 337 342 ?> -
branches/2.5/expressoMail1_2/templates/default/index.tpl
r8113 r8232 209 209 <div class="expressomail-module-container" style="display: none;"></div> 210 210 <div id="importEmails" style="display:none;padding:5px;"></div> 211 <div id="importEmailsLocal" style="display:none;padding:5px;"></div> 211 <div id="importEmailsLocal" style="display:none;padding:5px;"></div> 212 212 <div id="sendFileMessages" style="display:none;"></div> 213 213 <div id="quickAddContact" style="display:none;"></div> -
branches/2.5/expressoMail1_2/templates/default/main.css
r7762 r8232 1245 1245 font-weight : bold; 1246 1246 padding-right : 5px; 1247 padding-left : 25px; 1247 padding-left : 5px; 1248 padding-top : 2px; 1248 1249 font-family : Lucida Grande, Lucida Sans, Arial, sans-serif; 1249 1250 font-size : 11px; … … 1255 1256 background-position: 0 -923px; 1256 1257 background-repeat:no-repeat; 1257 padding-left : 20px; 1258 padding-right : 5px; 1259 padding-left : 5px; 1260 padding-top : 2px; 1258 1261 color : red; 1259 1262 text-align: right; 1260 1263 font-weight : bold; 1261 padding-right : 5px;1262 1264 } 1263 1265 … … 1641 1643 top: 585px; 1642 1644 } 1645 1646 @media screen and (max-width: 1100px){ 1647 #span_options, #span_D span 1648 { 1649 font-size: 0.8333em; /*10/12px*/ 1650 } 1651 } -
branches/2.5/filemanager/setup/setup.inc.php
r7516 r8232 14 14 $setup_info['filemanager']['name'] = 'filemanager'; 15 15 $setup_info['filemanager']['title'] = 'Filemanager'; 16 $setup_info['filemanager']['version'] = '2.5. 0';16 $setup_info['filemanager']['version'] = '2.5.1'; 17 17 $setup_info['filemanager']['app_order'] = 6; 18 18 $setup_info['filemanager']['enable'] = 1; … … 28 28 $setup_info['filemanager']['maintainer'] .= 'Coordenador do Projeto : Nilton Emilio Buhrer Neto<br/><br/>'; 29 29 30 $setup_info['filemanager']['tables'][] = 'phpgw_vfs';31 30 $setup_info['filemanager']['tables'][] = 'phpgw_vfs_quota'; 32 31 $setup_info['filemanager']['tables'][] = 'phpgw_filemanager_notification'; … … 48 47 ( 49 48 'appname' => 'phpgwapi', 50 'versions' => array('2.5. 0')49 'versions' => array('2.5.1.1') 51 50 ); 52 51 ?> -
branches/2.5/header.inc.php.template
r7503 r8232 119 119 $GLOBALS['phpgw_info']['server']['versions']['current_header'] = $setup_info['phpgwapi']['versions']['current_header']; 120 120 unset($setup_info); 121 $GLOBALS['phpgw_info']['server']['versions']['header'] = '2.5. 0';121 $GLOBALS['phpgw_info']['server']['versions']['header'] = '2.5.1'; 122 122 /* This is a fix for NT */ 123 123 if(!isset($GLOBALS['phpgw_info']['flags']['noapi']) || !$GLOBALS['phpgw_info']['flags']['noapi'] == True) -
branches/2.5/help/enviasugestao.php
r3024 r8232 24 24 $params['input_to'] = $GLOBALS['phpgw_info']['server']['sugestoes_email_to']; 25 25 $params['input_cc'] = $GLOBALS['phpgw_info']['server']['sugestoes_email_cc']; 26 $params['input_ cc'] = $GLOBALS['phpgw_info']['server']['sugestoes_email_bcc'];26 $params['input_bcc'] = $GLOBALS['phpgw_info']['server']['sugestoes_email_bcc']; 27 27 $params['input_subject'] = lang("Suggestions"); 28 $params['body'] = $_POST['body'];28 $params['body'] = base64_encode($_POST['body']); 29 29 $params['type'] = 'textplain'; 30 30 $GLOBALS['phpgw']->preferences->read_repository(); -
branches/2.5/help/setup/setup.inc.php
r7517 r8232 13 13 $setup_info['help']['name'] = 'help'; 14 14 $setup_info['help']['title'] = 'User Manual and Help Page'; 15 $setup_info['help']['version'] = '2.5. 0';15 $setup_info['help']['version'] = '2.5.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.5. 0')28 'versions' => Array('2.5.1.1') 29 29 ); 30 30 ?> -
branches/2.5/jabberit_messenger/setup/setup.inc.php
r7516 r8232 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.5. 0';10 $setup_info['jabberit_messenger']['version'] = '2.5.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.5. 0')29 'versions' => Array('2.5.1.1') 30 30 ); 31 31 ?> -
branches/2.5/listAdmin/setup/setup.inc.php
r7516 r8232 9 9 $setup_info['listAdmin']['name'] = 'listAdmin'; 10 10 $setup_info['listAdmin']['title'] = 'Mailman Admin'; 11 $setup_info['listAdmin']['version'] = '2.5. 0';11 $setup_info['listAdmin']['version'] = '2.5.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', '2.5.0')32 'versions' => Array('2.5.1.1') 33 33 ); 34 34 ?> -
branches/2.5/login.php
r6714 r8232 58 58 { 59 59 $accountInfo = $GLOBALS['phpgw']->accounts->read_repository(); 60 session_id( $_COOKIE[ 'sessionid' ]);60 isset($_COOKIE[ 'sessionid' ]) ? session_id($_COOKIE[ 'sessionid' ]) : session_id(); 61 61 session_start(); 62 63 62 //Carregando na sessão configurações do usuario usado na nova API. 64 63 $_SESSION['wallet']['user']['uid'] = $accountInfo['account_lid']; -
branches/2.5/mobile/inc/class.ui_home.inc.php
r4358 r8232 4 4 var $imap_functions; 5 5 var $db; 6 var $bocalendar;6 //var $bocalendar; 7 7 var $bo_mobilemail; 8 8 var $common; … … 22 22 $this->imap_functions = CreateObject('expressoMail1_2.imap_functions'); 23 23 $this->db = CreateObject('phpgwapi.db'); 24 $this->bocalendar = CreateObject('calendar.bocalendar');24 //$this->bocalendar = CreateObject('calendar.bocalendar'); 25 25 $this->bo_mobilemail = CreateObject('mobile.bo_mobilemail'); 26 26 } … … 84 84 $this->template->set_var('quota_used', $this->common->borkb($total_quota["quota_used"]*1024)); 85 85 $this->template->set_var('quota_limit', $this->common->borkb($total_quota["quota_limit"]*1024)); 86 86 /* 87 87 //pegando os eventos do dia atual 88 88 $year = $this->bocalendar->year; … … 116 116 } 117 117 118 118 */ 119 119 120 120 if($GLOBALS['phpgw']->session->appsession('mobile.layout','mobile')=="mini_desktop") { -
branches/2.5/mobile/index.php
r7655 r8232 69 69 70 70 if( array_key_exists('expressoMail1_2',$GLOBALS['phpgw_info']['user']['apps']) === FALSE || 71 array_key_exists('contactcenter',$GLOBALS['phpgw_info']['user']['apps']) === FALSE ||72 array_key_exists('calendar',$GLOBALS['phpgw_info']['user']['apps']) === FALSE ) {71 array_key_exists('contactcenter',$GLOBALS['phpgw_info']['user']['apps']) === FALSE /*|| 72 array_key_exists('calendar',$GLOBALS['phpgw_info']['user']['apps']) === FALSE*/) { 73 73 $GLOBALS['phpgw']->session->phpgw_setcookie('lem', null); 74 74 $GLOBALS['phpgw']->session->phpgw_setcookie('pem', null); -
branches/2.5/mobile/mobile_header.inc.php
r4277 r8232 43 43 break; 44 44 case mobilecalendar: 45 $link = "ui_mobilecalendar.index"; 45 // $link = "ui_mobilecalendar.index"; 46 $link = "ui_home.index"; 46 47 break; 47 48 case mobilecc: -
branches/2.5/mobile/setup/setup.inc.php
r7516 r8232 14 14 $setup_info['mobile']['name'] = 'mobile'; 15 15 $setup_info['mobile']['title'] = 'Expresso Mini'; 16 $setup_info['mobile']['version'] = '2.5. 0';16 $setup_info['mobile']['version'] = '2.5.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.5. 0')41 'versions' => Array('2.5.1.1') 42 42 ); 43 43 ?> -
branches/2.5/mobile/templates/default/home_index.tpl
r5043 r8232 54 54 {personal_folders_box} 55 55 </span> 56 < dd>56 <!--<dd> 57 57 <div class="limpar_div resultado-titulo"> 58 58 <label> … … 64 64 </div> 65 65 </dd> 66 {commitments_box}66 {commitments_box}--> 67 67 <dd> 68 68 <div class="limpar_div resultado-titulo"> -
branches/2.5/news_admin/setup/setup.inc.php
r7516 r8232 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.5. 0';16 $setup_info['news_admin']['version'] = '2.5.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.5. 0')33 'versions' => Array('2.5.1.1') 34 34 ); 35 35 -
branches/2.5/news_admin/setup/tables_update.inc.php
r7516 r8232 80 80 } 81 81 82 $test[] = '2.4.1'; 83 function news_admin_upgrade2_4_1() 84 { 85 $GLOBALS['setup_info']['news_admin']['currentver'] = '2.4.2'; 86 return $GLOBALS['setup_info']['news_admin']['currentver']; 87 } 82 $test[] = '2.4.1'; 83 function news_admin_upgrade2_4_1() 84 { 85 $GLOBALS['setup_info']['news_admin']['currentver'] = '2.4.2'; 86 return $GLOBALS['setup_info']['news_admin']['currentver']; 87 } 88 88 89 $test[] = '2.4.2'; 89 90 91 92 93 90 function news_admin_upgrade2_4_2() 91 { 92 $GLOBALS['setup_info']['news_admin']['currentver'] = '2.5.0'; 93 return $GLOBALS['setup_info']['news_admin']['currentver']; 94 } 94 95 96 $test[] = '2.5.0'; 97 function news_admin_upgrade2_5_0() 98 { 99 $GLOBALS['setup_info']['news_admin']['currentver'] = '2.5.1'; 100 return $GLOBALS['setup_info']['news_admin']['currentver']; 101 } 95 102 ?> -
branches/2.5/phpgwapi/inc/class.preferences.inc.php
r7655 r8232 567 567 $value = $this->db->db_addslashes(serialize($value)); // this addslashes is for the database 568 568 $app = $this->db->db_addslashes($app); 569 569 if ($this->db->Type == "pgsql" && isset($value['signature'])){ 570 $value['signature'] = pg_escape_string($value['signature']); 571 } 570 572 $this->db->query($sql = "INSERT INTO phpgw_preferences" 571 573 . " (preference_owner,preference_app,preference_value)" -
branches/2.5/phpgwapi/setup/setup.inc.php
r7917 r8232 14 14 $setup_info['phpgwapi']['name'] = 'phpgwapi'; 15 15 $setup_info['phpgwapi']['title'] = 'API'; 16 $setup_info['phpgwapi']['version'] = '2.5.1 ';17 $setup_info['phpgwapi']['versions']['current_header'] = '2.5. 0';16 $setup_info['phpgwapi']['version'] = '2.5.1.0'; 17 $setup_info['phpgwapi']['versions']['current_header'] = '2.5.1'; 18 18 $setup_info['phpgwapi']['enable'] = 3; 19 19 $setup_info['phpgwapi']['app_order'] = 1; … … 41 41 $setup_info['phpgwapi']['tables'][] = 'phpgw_history_log'; 42 42 $setup_info['phpgwapi']['tables'][] = 'phpgw_async'; 43 44 45 46 -
branches/2.5/phpgwapi/setup/tables_baseline.inc.php
r2 r8232 108 108 'sessionid' => array('type' => 'varchar', 'precision' => 30), 109 109 'loginid' => array('type' => 'varchar', 'precision' => 30), 110 'ip' => array('type' => 'varchar', 'precision' => 30),110 'ip' => array('type' => 'varchar', 'precision' => 255), 111 111 'li' => array('type' => 'int', 'precision' => 4), 112 112 'lo' => array('type' => 'int', 'precision' => 4) -
branches/2.5/phpgwapi/setup/tables_update.inc.php
r7917 r8232 20 20 $GLOBALS['setup_info']['phpgwapi']['currentver'] = '1.0.0.008'; 21 21 return $GLOBALS['setup_info']['phpgwapi']['currentver']; 22 23 22 } 24 23 … … 28 27 $GLOBALS['setup_info']['phpgwapi']['currentver'] = '2.0.0.pre-alpha'; 29 28 return $GLOBALS['setup_info']['phpgwapi']['currentver']; 30 31 29 } 32 30 … … 176 174 return $GLOBALS['setup_info']['phpgwapi']['currentver']; 177 175 } 178 $test[] = '2.4.2'; 179 function phpgwapi_upgrade2_4_2() 180 { 181 $GLOBALS['setup_info']['phpgwapi']['currentver'] = '2.5.0'; 182 return $GLOBALS['setup_info']['phpgwapi']['currentver']; 183 } 184 185 $test[] = '2.5.0'; 186 function phpgwapi_upgrade2_5_0() 187 { 188 $GLOBALS['setup_info']['phpgwapi']['currentver'] = '2.5.1'; 189 global $setup_info,$phpgw_setup; 190 $phpgw_setup->oProc->query("ALTER TABLE phpgw_access_log ALTER COLUMN ip TYPE character varying(255) "); 191 192 return $GLOBALS['setup_info']['phpgwapi']['currentver']; 193 } 194 195 176 $test[] = '2.4.2'; 177 function phpgwapi_upgrade2_4_2() 178 { 179 $GLOBALS['setup_info']['phpgwapi']['currentver'] = '2.5.0'; 180 return $GLOBALS['setup_info']['phpgwapi']['currentver']; 181 } 182 183 $test[] = '2.5.0'; 184 function phpgwapi_upgrade2_5_0() 185 { 186 $GLOBALS['setup_info']['phpgwapi']['currentver'] = '2.5.1'; 187 global $setup_info,$phpgw_setup; 188 $phpgw_setup->oProc->query("ALTER TABLE phpgw_access_log ALTER COLUMN ip TYPE character varying(255) "); 189 190 return $GLOBALS['setup_info']['phpgwapi']['currentver']; 191 } 192 193 $test[] = '2.5.1'; 194 function phpgwapi_upgrade2_5_1() 195 { 196 global $phpgw_setup; 197 198 $phpgw_setup->oProc->query( 'select * from information_schema.tables where table_name= \'phpgw_vfs\''); 199 if( !$phpgw_setup->oProc->next_record() ) 200 { 201 $phpgw_setup->oProc->CreateTable('phpgw_vfs', array( 202 'fd' => array( 203 'file_id' => array('type' => 'auto','nullable' => False), 204 'owner_id' => array('type' => 'int','precision' => '4','nullable' => False), 205 'createdby_id' => array('type' => 'int','precision' => '4'), 206 'modifiedby_id' => array('type' => 'int','precision' => '4'), 207 'created' => array('type' => 'timestamp','nullable' => False,'default' => '1970-01-01'), 208 'modified' => array('type' => 'timestamp'), 209 'size' => array('type' => 'int','precision' => '4'), 210 'mime_type' => array('type' => 'varchar','precision' => '64'), 211 'deleteable' => array('type' => 'char','precision' => '1','default' => 'Y'), 212 'comment' => array('type' => 'varchar','precision' => '255'), 213 'app' => array('type' => 'varchar','precision' => '25'), 214 'directory' => array('type' => 'varchar','precision' => '255'), 215 'name' => array('type' => 'varchar','precision' => '128','nullable' => False), 216 'link_directory' => array('type' => 'varchar','precision' => '255'), 217 'link_name' => array('type' => 'varchar','precision' => '128'), 218 'version' => array('type' => 'varchar','precision' => '30','nullable' => False,'default' => '0.0.0.0'), 219 'content' => array('type' => 'longtext') 220 ) 221 )); 222 } 223 224 $GLOBALS['setup_info']['phpgwapi']['currentver'] = '2.5.1.0'; 225 return $GLOBALS['setup_info']['phpgwapi']['currentver']; 226 } 196 227 ?> -
branches/2.5/phpgwapi/templates/default/css/azul.css
r7531 r8232 154 154 { 155 155 background: url( ../../../../phpgwapi/templates/default/images/logo_expresso.jpg ) no-repeat 0 3px; 156 /*background: url( ../../../../phpgwapi/templates/default/images/logo_expresso.png ) no-repeat 0 3px;*/ 156 157 } 157 158 … … 178 179 { 179 180 background-image: url(../../../../phpgwapi/templates/default/images/back_app.png); 181 /*background-image: url(../../../../phpgwapi/templates/default/images/back_app_1.png);*/ 180 182 } 181 183 … … 183 185 { 184 186 background-image: url( ../../../../phpgwapi/templates/default/images/back_app_over.png ); 187 /*background-image: url( ../../../../phpgwapi/templates/default/images/back_app_over_1.png );*/ 185 188 } 186 189 … … 188 191 { 189 192 background-image: url( ../../../../phpgwapi/templates/default/images/back_app_out.png ); 193 /*background-image: url( ../../../../phpgwapi/templates/default/images/back_app_out_1.png );*/ 190 194 } 191 195 … … 203 207 { 204 208 background-image: url( ../../../../phpgwapi/templates/default/images/fundo_topo.png ); 209 /*background-image: url( ../../../../phpgwapi/templates/default/images/fundo_topo_2.png );*/ 205 210 } 206 211 -
branches/2.5/phpgwapi/templates/default/css/base.css
r5754 r8232 262 262 .logo_expresso 263 263 { 264 width: 191px; 264 /*width: 191px;*/ 265 width: 273px; 265 266 } 266 267 -
branches/2.5/phpgwapi/templates/default/navbar.tpl
r4463 r8232 87 87 88 88 <div class="toolbar" id="toolbar" style="visibility:hidden"> 89 <table border="0" height="50px" width=" 100%" cellpadding=0 cellspacing=0><tr>89 <table border="0" height="50px" width="93%" cellpadding=0 cellspacing=0><tr> 90 90 <td class="logo_expresso"> <br></td> 91 91 <td align="center"> -
branches/2.5/phpgwapi/templates/news/login.tpl
r5159 r8232 1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">2 < HTML>1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> 2 <html> 3 3 <!-- BEGIN login_form --> 4 <HEAD> 5 <META http-equiv="Content-Type" content="text/html; charset={charset}"> 6 <META name="AUTHOR" content="dGroupWare http://www.eGroupWare.org"> 7 <META NAME="description" CONTENT="{website_title} login screen, working environment powered by eGroupWare"> 8 <META NAME="ROBOTS" CONTENT="NOINDEX, NOFOLLOW"> 9 <META NAME="keywords" CONTENT="{website_title} login screen, eGroupWare, groupware, groupware suite"> 10 {login_css} 11 <TITLE>{website_title} - {lang_login}</TITLE> 12 <script src="./phpgwapi/templates/{template}/js/hash.js" type="text/javascript"></script> 13 <script src="./phpgwapi/templates/{template}/js/news.js" type="text/javascript"></script> 14 <script language="Javascript"> 15 <!-- 16 17 function setLogin(){ 18 if( document.flogin.organization != null) 19 document.flogin.login.value = document.flogin.organization.value+'-'+document.flogin.user.value; 20 else 21 document.flogin.login.value = document.flogin.user.value; 22 } 23 24 function getLogin(){ 25 var cookie = '{cookie}'; 26 if( document.flogin.organization != null) 27 document.flogin.user.value= cookie.substring(cookie.indexOf('-')+1,cookie.length); 28 else 29 document.flogin.user.value= cookie; 30 31 if(document.flogin.user.value == '') { 32 if(document.flogin.organization != null) 33 document.flogin.organization.focus(); 34 else 35 document.flogin.user.focus(); 36 } 37 else 38 document.flogin.passwd.focus(); 39 } 40 41 function openWindow(newWidth,newHeight,link) { 42 newScreenX = screen.width - newWidth; 43 newScreenY = 0; 44 Window1=window.open('{dir_root}'+link,'',"width="+newWidth+",height="+newHeight+",screenX="+newScreenX+",left="+newScreenX+",screenY="+newScreenY+",top="+newScreenY+",toolbar=no,scrollbars=yes,resizable=no"); 45 } 46 var opened = false, vkb = null, text = null; 47 var userstr = navigator.userAgent.toLowerCase(); 48 var safari = (userstr.indexOf('applewebkit') != -1); 49 var gecko = (userstr.indexOf('gecko') != -1) && !safari; 50 function loadvkbd(){ 51 if(typeof(VKeyboard) == 'function') 52 keyb_change(); 53 else 54 { 55 vkbdscript=document.createElement('SCRIPT'); 56 vkbdscript.src="phpgwapi/js/jscode/vkboards.js"; 57 vkbdscript.onload = keyb_change; 58 if(gecko || window.opera || safari) 59 vkbdscript.onload = keyb_change; 60 else 61 setTimeout('keyb_change()',3000); 62 document.body.appendChild(vkbdscript); 63 } 64 } 65 66 var opened = false, vkb = null, text = null; 67 68 function keyb_change() 69 { 70 opened = !opened; 71 72 if(opened && !vkb) 73 { 74 vkb = new VKeyboard("keyboard", // container's id 75 keyb_callback, // reference to the callback function 76 false, // create the arrow keys or not? (this and the following params are optional) 77 false, // create up and down arrow keys? 78 false, // reserved 79 false, // create the numpad or not? 80 "", // font name ("" == system default) 81 "14px", // font size in px 82 "#FFF", // font color 83 "#F00", // font color for the dead keys 84 "#83a6ce", // keyboard base background color 85 "#28599e", // keys' background color 86 "#DDD", // background color of switched/selected item 87 "#777", // border color 88 "#CCC", // border/font color of "inactive" key (key with no value/disabled) 89 "#83a6ce", // background color of "inactive" key (key with no value/disabled) 90 "#F77", // border color of the language selector's cell 91 true, // show key flash on click? (false by default) 92 "#CC3300", // font color during flash 93 "#FF9966", // key background color during flash 94 "#CC3300", // key border color during flash 95 false, // embed VKeyboard into the page? 96 true, // use 1-pixel gap between the keys? 97 0); // index(0-based) of the initial layout 98 } 99 else 100 vkb.Show(opened); 101 102 text = document.getElementById("passwd"); 103 text.focus(); 104 if (!(gecko || window.opera || safari)) 105 { 106 document.getElementById('keyboard').style.left = "0px"; 107 document.getElementById('rodape').style.zIndex="-100"; 108 } 109 110 } 111 // Callback function: 112 function keyb_callback(ch) 113 { 114 var val = text.value; 115 116 switch(ch) 117 { 118 case "BackSpace": 119 var min = (val.charCodeAt(val.length - 1) == 10) ? 2 : 1; 120 text.value = val.substr(0, val.length - min); 121 break; 122 123 case "Enter": 124 document.getElementById('loginForm').submit(); 125 break; 126 127 default: 128 text.value += ch; 129 } 130 } 131 function setRange(ctrl, start, end){ 132 } 133 var news = new News({public_news}); 134 --> 135 </script> 136 </HEAD> 137 <body scroll="no" style="overflow:hidden" onLoad="javascript:getLogin();news.start(4000)" bgcolor="#ffffff"> 138 <form id="loginForm" name="flogin" method="post" action="{login_url}" {autocomplete}> 139 <div id="conteudo"> 140 <div style="position: absolute; top:0px; right: 10px;"><span class="login_label">{lang_language} </span>{select_language}</div> 141 <div align="center"> 142 <div id="conteudo_corpo"> 143 <div id="superior"> 144 <div id="news"> 145 <div id="news_block"> 146 <b><div id="news_subject"></div></b><div id="news_content"></div> 4 <head> 5 <title>{website_title} - {lang_login}</title> 6 <meta http-equiv="Content-Type" content="text/html; charset={charset}"> 7 <meta name="AUTHOR" content="dGroupWare http://www.eGroupWare.org"> 8 <meta NAME="description" CONTENT="{website_title} login screen, working environment powered by eGroupWare"> 9 <meta NAME="ROBOTS" CONTENT="NOINDEX, NOFOLLOW"> 10 <meta NAME="keywords" CONTENT="{website_title} login screen, eGroupWare, groupware, groupware suite"> 11 <link rel="stylesheet" type="text/css" href="./phpgwapi/templates/news/css/login.css"/> 12 <link rel="stylesheet" type="text/css" href="./prototype/plugins/jquery/jquery-ui.css" /> 13 <link rel="stylesheet" type="text/css" href="./prototype/plugins/jquery.keyboard/jquery.keypad.css"> 14 <!-- JavaScript --> 15 <script type="text/javascript" src="./prototype/plugins/jquery/jquery.min.js"></script> 16 <script type="text/javascript" src="./prototype/plugins/jquery/jquery-ui.min.js"></script> 17 <script type="text/javascript" src="./prototype/plugins/jquery/jquery-ui.custom.min.js"></script> 18 <script type="text/javascript" src="./prototype/plugins/ejs/ejs.js"></script> 19 <script type="text/javascript" src="./prototype/plugins/ejs/ejs_production.js"></script> 20 <script type="text/javascript" src="./prototype/plugins/ejs/view.js"></script> 21 <script type="text/javascript" src="./prototype/plugins/jquery.cycle/jquery.cycle.js"></script> 22 <script type="text/javascript" src="./prototype/plugins/jquery.keyboard/jquery.keypad.js"></script> 23 <script type="text/javascript" src="./prototype/plugins/jquery.keyboard/jquery.keypad-pt-BR.js"></script> 24 <script type="text/javascript" src="./phpgwapi/templates/news/js/slider.js"></script> 25 <script type="text/javascript" src="./phpgwapi/templates/news/js/loginExpresso.js"></script> 26 </head> 27 <body> 28 <div id="container"> 29 <div id="main"> 30 <div id="login"> 31 <h1 id="logo-expresso">Expresso Livre</h1> 32 <form id="loginForm" name="flogin" method="post" action="{login_url}" {autocomplete}> 33 <input type="hidden" name="passwd_type" value="text"> 34 <input type="hidden" name="account type" value="u"> 35 <input type="hidden" name="login"> 36 <input type="hidden" name="show_kbd" value="{show_kbd}"> 37 <div style="display:{show_organization}"> 38 <label for="organizacao">Organização</label> 39 <select name="organizacao" id="organizacao">{select_organization}</select> 40 </div> 41 <div id="captcha"> 42 {captcha} 43 </div> 44 <label for="user">{lang_username}</label> 45 <input type="text" name="user" id="user" value="{cookie}"/> 46 <label for="passwd">{lang_password}</label> 47 <input type="password" name="passwd" id="passwd" value=""/> 48 <br/> 49 <input type="submit" name="submitit" id="submitit" value="{lang_login}" onclick="loginExpresso.setLogin();" /> 50 </form> 51 <div id="keyboard"></div> 52 <div id="msg-login" class="sucesso" style="display:none;">{cd}</div> 147 53 </div> 148 <img onmouseover="this.className='news_button_over'" onmouseout="this.className='news_button'" class="news_button" onclick="javascript:news.update('previous')" title="{lang_previous}" src="./phpgwapi/templates/{template}/images/player-previous.png"/> 149 <img onmouseover="this.className='news_button_over'" onmouseout="this.className='news_button'" class="news_button" onclick="javascript:news.pause()" title="{lang_pause}" src="./phpgwapi/templates/{template}/images/player-pause.png" id="img_player_pause" /> 150 <img onmouseover="this.className='news_button_over'" onmouseout="this.className='news_button'" style="display:none" class="news_button" onclick="javascript:news.pause()" title="{lang_resume}" src="./phpgwapi/templates/{template}/images/player-resume.png" id="img_player_resume" /> 151 <img onmouseover="this.className='news_button_over'" onmouseout="this.className='news_button'" class="news_button" onclick="javascript:news.update('next')" title="{lang_next}" src="./phpgwapi/templates/{template}/images/player-next.png"/> 54 <div id="informacao-login"></div> 152 55 </div> 153 <div id="login"> 154 <div align="center"> 155 <input type="hidden" name="passwd_type" value="text"> 156 <input type="hidden" name="account type" value="u"> 157 <input type="hidden" name="login"> 158 <div id="caixa_login"> 159 <div id="reflexo"> 160 <div class="titulo_login">Expresso Livre</div> 161 <div id="mensagem" class="msgInicial" >{cd}<br>{lang_message}</div> 162 {action} 163 <div id="conteudo_login" style="display:{show};">{select_organization} 164 <div class="login_label"> 165 <label for="usuario">{lang_username}</label> 166 <br /> 167 <input class="input" type="text" maxlength="70" size="20" name="user" id="user" value=""> 168 </div> 169 170 <div class="login_label"> 171 <label for="senha">{lang_password}</label> 172 <br /> 173 <input class="input" type="password" maxlength="50" size="20" name="passwd" id="passwd" value=""> 174 <div id="keyboard"></div> 175 </div> 176 {captcha} 177 178 <input value="{lang_login}" name="submitit" class="button" onclick="javascript:setLogin()" type="submit" style="margin-top:10px"/> 179 <img style="display:{show_kbd};" src="phpgwapi/templates/default/images/keyboard.png" alt="virtualkeyboard" title="virtualkeyboard" onclick="loadvkbd()" /> 180 </div> 181 <div id="alterna_login"> 182 {link_alterna_login} 183 </div> 184 </div> 185 <div id="rodape_login"> 186 <div class="ajuda" style="display:{display_help}"> 187 <img src="./phpgwapi/templates/{template}/images/help.png"/> 188 <a title="{lang_help}" target="help" href="./help.php?lang={lang}">{lang_help}</a> 189 </div> 190 </div> 191 </div> 192 </form> 193 </div> 194 </div> 195 </div> 196 <div id="inferior"><br /> 197 <div id="rodape"> 198 <table align="center" cellspacing="0" cellpadding="0" border="0"> 199 <tr> 200 <td> 201 <table border="0" cellpadding="0" cellspacing="0" width="300px"> 202 <tbody> 203 <tr> 204 <td>{logo_config} 205 <br><a title="Projeto Expresso Livre" target="_blank" href="http://www.expressolivre.org/">Expresso Livre</a> {version} 206 {ultima_rev} 207 <br><a title="eGroupWare" target="_blank" href="http://www.egroupware.org/"> Powered by eGroupWare </a></div></td> 208 </tr> 209 </tbody> 210 </table> 211 </td> 212 </tr> 213 </table> 214 </div> 215 </div> 216 </div> 217 </div> 218 </div> 219 <div>{applet}</div> 220 </body></html> 56 <center> 57 <div id="footer"> 58 <ul id="footer-logos"> 59 <li><a href="http://www.pr.gov.br/" class="logo-governo">Governo do Paraná</a></li> 60 <li> 61 <a href="http://www.pr.gov.br/" class="logo-celepar">Celepar - Tecnologia da Informação e Comunicação do Paraná</a> 62 <span id="info-deploy"><a title="Projeto Expresso Livre" target="_blank" href="http://www.expressolivre.org/">Expresso Livre</a> {version} {ultima_rev}<br />Powered by <a title="eGroupWare" target="_blank" href="http://www.egroupware.org/">eGroupWare</a> 63 </span> 64 </li> 65 </ul> 66 </div> 67 </center> 68 </div> 69 <div>{applet}</div> 70 </body> 71 </html> -
branches/2.5/phpgwapi/templates/news/login_news.php
r7681 r8232 12 12 \**************************************************************************/ 13 13 14 function check_logoutcode($code) 15 { 16 switch($code) 17 { 18 case 1: 19 return lang('You have been successfully logged out'); 20 21 case 2: 22 return lang('Sorry, your login has expired'); 23 24 case 4: 25 return lang('Cookies are required to login to this site.'); 26 27 case 5: 28 return '<font color="FF0000">' . lang('Bad login or password') . '</font>'; 29 30 case 6: 31 return '<font color="FF0000">' . lang('Your password has expired, and you do not have access to change it') . '</font>'; 32 33 case 98: 34 return '<font color="FF0000">' . lang('Account is expired') . '</font>'; 35 36 case 99: 37 return '<font color="FF0000">' . lang('Blocked, too many attempts(%1)! Retry in %2 minute(s)',$GLOBALS['phpgw_info']['server']['num_unsuccessful_id'],$GLOBALS['phpgw_info']['server']['block_time']) . '</font>'; 38 case 200: 39 //return '<font color="FF0000">' . lang('Invalid code') . '</font>'; 40 return '<font color="FF0000">' . lang('Bad login or password') . '</font>'; 41 break; 42 case 10: 43 $GLOBALS['phpgw']->session->phpgw_setcookie('sessionid'); 44 $GLOBALS['phpgw']->session->phpgw_setcookie('kp3'); 45 $GLOBALS['phpgw']->session->phpgw_setcookie('domain'); 46 47 //fix for bug php4 expired sessions bug 48 if($GLOBALS['phpgw_info']['server']['sessions_type'] == 'php4') 49 { 50 $GLOBALS['phpgw']->session->phpgw_setcookie(PHPGW_PHPSESSID); 51 } 52 53 return '<font color="#FF0000">' . lang('Your session could not be verified.') . '</font>'; 54 55 default: 56 return ''; 57 } 58 } 59 60 $ifMobile = false; 61 $browser = CreateObject('phpgwapi.browser'); 62 switch ( $browser->get_platform() ) 63 { 64 case browser::PLATFORM_IPHONE: 65 case browser::PLATFORM_IPOD: 66 case browser::PLATFORM_IPAD: 67 case browser::PLATFORM_BLACKBERRY: 68 case browser::PLATFORM_NOKIA: 69 case browser::PLATFORM_ANDROID: 70 $ifMobile = true; 71 break; 72 } 73 74 if( $ifMobile && $_GET['dont_redirect_if_moble'] != 1 ) 75 { 76 $GLOBALS['phpgw']->redirect_link('/mobile/login.php'); 77 } 78 else 79 { 14 require_once "logout_code.php"; 15 80 16 /* Program starts here */ 81 17 if($GLOBALS['phpgw_info']['server']['auth_type'] == 'http' && isset($_SERVER['PHP_AUTH_USER'])) … … 94 30 # Apache + mod_ssl style SSL certificate authentication 95 31 # Certificate (chain) verification occurs inside mod_ssl 96 if( $GLOBALS['phpgw_info']['server']['auth_type'] == 'sqlssl' && isset($_SERVER['SSL_CLIENT_S_DN']) && !isset($_GET['cd']))32 if( $GLOBALS['phpgw_info']['server']['auth_type'] == 'sqlssl' && isset($_SERVER['SSL_CLIENT_S_DN']) && !isset($_GET['cd']) ) 97 33 { 98 34 # an X.509 subject looks like: … … 113 49 # login will be set here if the user logged out and uses a different username with 114 50 # the same SSL-certificate. 115 if( !isset($_POST['login'])&&isset($sslattributes['Email']))51 if( !isset($_POST['login']) && isset($sslattributes['Email']) ) 116 52 { 117 53 $login = $sslattributes['Email']; … … 127 63 if( isset( $_GET[ 'cd' ] ) && ( $_GET['cd']=='1' || $_GET['cd'] == 10 ) ) 128 64 { 129 $_SESSION['contador'] = 0; 130 } 131 132 if(isset($passwd_type) || $_POST['submitit_x'] || $_POST['submitit_y'] || $submit) 133 { 134 65 $_SESSION['contador_captcha'] = 0; 66 } 67 68 if( isset($passwd_type) || $_POST['submitit_x'] || $_POST['submitit_y'] || $submit ) 69 { 135 70 // Primeiro testa o captcha....se houver...... 136 if($GLOBALS['phpgw_info']['server']['captcha']==1) 137 { 138 if($_SESSION['contador'] > $GLOBALS['phpgw_info']['server']['num_badlogin']) 139 { 140 if ($_SESSION['CAPTCHAString'] != trim(strtoupper($_POST['codigo']))) 141 { 142 if(!$_GET['cd']) 143 { 144 $_GET['cd'] = '200'; 145 } 146 } 147 unset($_SESSION['CAPTCHAString']); 148 } 149 } 150 if($_POST['user']) { 151 if($GLOBALS['phpgw_info']['server']['use_prefix_organization']) { 152 $common = CreateObject('phpgwapi.common'); 153 $ldap_conn = $common->ldapConnect(); 154 $justthese = array("uid"); 155 $filter="(&(phpgwAccountType=u)(uid=".$_POST['user']."))"; 156 $ldap_search = ldap_search($ldap_conn, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese); 157 $ldap_info = ldap_get_entries($ldap_conn, $ldap_search); 71 if( $GLOBALS['phpgw_info']['server']['captcha'] == 1 ) 72 { 73 if( $_SESSION['contador_captcha'] > $GLOBALS['phpgw_info']['server']['num_badlogin'] ) 74 { 75 if ($_SESSION['CAPTCHAString'] != trim(strtoupper($_POST['codigo']))) 76 { 77 if(!$_GET['cd']) 78 { 79 $_GET['cd'] = '200'; 80 } 81 } 82 83 unset($_SESSION['CAPTCHAString']); 84 } 85 } 86 87 if( $_POST['user'] ) 88 { 89 if($GLOBALS['phpgw_info']['server']['use_prefix_organization']) 90 { 91 $common = CreateObject('phpgwapi.common'); 92 $ldap_conn = $common->ldapConnect(); 93 $justthese = array("uid"); 94 $filter = "(&(phpgwAccountType=u)(uid=".$_POST['user']."))"; 95 $ldap_search = ldap_search($ldap_conn, $GLOBALS['phpgw_info']['server']['ldap_context'], $filter, $justthese); 96 $ldap_info = ldap_get_entries($ldap_conn, $ldap_search); 97 158 98 ldap_close($ldap_conn); 159 if ($ldap_info['count'] != 0) { 99 100 if( $ldap_info['count'] != 0 ) 101 { 160 102 $_POST['login'] = $_POST['user']; 161 103 } 162 104 } 163 105 else 106 { 164 107 $_POST['login'] = $_POST['user']; 165 } 108 } 109 } 110 166 111 if(getenv('REQUEST_METHOD') != 'POST' && $_SERVER['REQUEST_METHOD'] != 'POST' && 167 112 !isset($_SERVER['PHP_AUTH_USER']) && !isset($_SERVER['SSL_CLIENT_S_DN'])) 168 113 { 169 170 171 172 114 if(!$_GET['cd']) 115 { 116 $_GET['cd'] = '5'; 117 } 173 118 } 174 119 175 120 // don't get login data again when $submit is true 176 if( $submit == false)121 if( $submit == false ) 177 122 { 178 123 $login = $_POST['login']; 179 124 } 180 125 181 if( strstr($login,'@') === False && isset($_POST['logindomain']))126 if( strstr($login,'@') === False && isset($_POST['logindomain']) ) 182 127 { 183 128 $login .= '@' . $_POST['logindomain']; … … 188 133 } 189 134 190 If(!$_GET['cd']) 135 if( !$_GET['cd'] ) 136 { 191 137 $GLOBALS['sessionid'] = $GLOBALS['phpgw']->session->create(strtolower($login),$passwd,$passwd_type,'u'); 192 193 if(!isset($GLOBALS['sessionid']) || ! $GLOBALS['sessionid']) 138 } 139 140 if( !isset($GLOBALS['sessionid']) || ! $GLOBALS['sessionid'] ) 194 141 { 195 142 If(!$_GET['cd']) $_GET['cd'] = $GLOBALS['phpgw']->session->cd_reason; … … 197 144 else 198 145 { 199 if ($_POST['lang'] && preg_match('/^[a-z]{2}(-[a-z]{2}){0,1}$/',$_POST['lang']) &&200 $_POST['lang'] != $GLOBALS['phpgw_info']['user']['preferences']['common']['lang'] )146 if( $_POST['lang'] && preg_match('/^[a-z]{2}(-[a-z]{2}){0,1}$/',$_POST['lang']) && 147 $_POST['lang'] != $GLOBALS['phpgw_info']['user']['preferences']['common']['lang'] ) 201 148 { 202 149 $GLOBALS['phpgw']->preferences->add('common','lang',$_POST['lang'],'session'); … … 207 154 $GLOBALS['phpgw']->translation->autoload_changed_langfiles(); 208 155 } 156 209 157 $forward = isset($_GET['phpgw_forward']) ? urldecode($_GET['phpgw_forward']) : @$_POST['phpgw_forward']; 210 if (!$forward) 158 159 if ( !$forward ) 211 160 { 212 161 $extra_vars['cd'] = 'yes'; … … 217 166 list($forward,$extra_vars) = explode('?',$forward,2); 218 167 } 219 if ($GLOBALS['phpgw_info']['server']['use_https'] != 2) 220 { 221 //Modificacao feita para que o Expresso redirecione para o primeiro proxy caso haja um encadeamento de mais de um proxy. 222 //$forward = 'http://'.$_SERVER['HTTP_HOST'].($GLOBALS['phpgw']->link($forward.'?cd=yes')); 223 $forward = 'http://' . nearest_to_me() . $GLOBALS['phpgw']->link($forward.'?cd=yes'); 224 echo "<script language='Javascript1.3'>location.href='".$forward."'</script>"; 225 } 226 else 227 { 228 $GLOBALS['phpgw']->redirect_link($forward,$extra_vars); 229 } 230 } 231 } 232 //else // ================================================================================= 233 //{ 234 $valor_contador = $_SESSION['contador']; 235 $valor_contador = $valor_contador + 1; 236 $_SESSION['contador'] = $valor_contador; 237 // !!! DONT CHANGE THESE LINES !!! 238 // If there is something wrong with this code TELL ME! 239 // Commenting out the code will not fix it. (jengo) 240 if(isset($_COOKIE['last_loginid'])) 241 { 242 $accounts = CreateObject('phpgwapi.accounts'); 243 $prefs = CreateObject('phpgwapi.preferences', $accounts->name2id($_COOKIE['last_loginid'])); 244 245 if($prefs->account_id) 246 { 247 $GLOBALS['phpgw_info']['user']['preferences'] = $prefs->read_repository(); 248 } 249 } 250 251 $_GET['lang'] = addslashes($_GET['lang']); 252 if ($_GET['lang']) 253 { 254 $GLOBALS['phpgw_info']['user']['preferences']['common']['lang'] = $_GET['lang']; 255 } 256 elseif(!isset($_COOKIE['last_loginid']) || !$prefs->account_id) 257 { 258 // If the lastloginid cookies isn't set, we will default to the first language, 259 // the users browser accepts. 260 list($lang) = explode(',',$_SERVER['HTTP_ACCEPT_LANGUAGE']); 261 /* 262 if(strlen($lang) > 2) 263 { 264 $lang = substr($lang,0,2); 265 } 266 */ 267 $GLOBALS['phpgw_info']['user']['preferences']['common']['lang'] = $lang; 268 } 269 #print 'LANG:' . $GLOBALS['phpgw_info']['user']['preferences']['common']['lang'] . '<br>'; 270 271 $GLOBALS['phpgw']->translation->init(); // this will set the language according to the (new) set prefs 272 $GLOBALS['phpgw']->translation->add_app('login'); 273 $GLOBALS['phpgw']->translation->add_app('loginscreen'); 274 if(lang('loginscreen_message') == 'loginscreen_message*') 275 { 276 $GLOBALS['phpgw']->translation->add_app('loginscreen','en'); // trying the en one 277 } 278 if(lang('loginscreen_message') != 'loginscreen_message*') 279 { 280 $tmpl->set_var('lang_message',stripslashes(lang('loginscreen_message'))); 281 } 282 //} 283 284 if($GLOBALS['phpgw_info']['server']['use_prefix_organization']) 285 { 168 169 if( $GLOBALS['phpgw_info']['server']['use_https'] != 2 ) 170 { 171 //Modificacao feita para que o Expresso redirecione para o primeiro proxy caso haja um encadeamento de mais de um proxy. 172 //$forward = 'http://'.$_SERVER['HTTP_HOST'].($GLOBALS['phpgw']->link($forward.'?cd=yes')); 173 $forward = 'http://' . nearest_to_me() . $GLOBALS['phpgw']->link($forward.'?cd=yes'); 174 echo "<script language='Javascript1.3'>location.href='".$forward."'</script>"; 175 } 176 else 177 { 178 $GLOBALS['phpgw']->redirect_link($forward,$extra_vars); 179 } 180 } 181 } 182 183 // Incrementar Contador para o Uso do Captcha 184 $_SESSION['contador_captcha']++; 185 186 // !!! DONT CHANGE THESE LINES !!! 187 // If there is something wrong with this code TELL ME! 188 // Commenting out the code will not fix it. (jengo) 189 if( isset( $_COOKIE['last_loginid'] ) ) 190 { 191 $accounts = CreateObject('phpgwapi.accounts'); 192 193 $prefs = CreateObject('phpgwapi.preferences', $accounts->name2id($_COOKIE['last_loginid'])); 194 195 if($prefs->account_id) 196 { 197 $GLOBALS['phpgw_info']['user']['preferences'] = $prefs->read_repository(); 198 } 199 } 200 201 $_GET['lang'] = addslashes($_GET['lang']); 202 203 if ($_GET['lang']) 204 { 205 $GLOBALS['phpgw_info']['user']['preferences']['common']['lang'] = $_GET['lang']; 206 } 207 elseif(!isset($_COOKIE['last_loginid']) || !$prefs->account_id) 208 { 209 // If the lastloginid cookies isn't set, we will default to the first language, 210 // the users browser accepts. 211 list($lang) = explode(',',$_SERVER['HTTP_ACCEPT_LANGUAGE']); 212 $GLOBALS['phpgw_info']['user']['preferences']['common']['lang'] = $lang; 213 } 214 215 $GLOBALS['phpgw']->translation->init(); // this will set the language according to the (new) set prefs 216 $GLOBALS['phpgw']->translation->add_app('login'); 217 $GLOBALS['phpgw']->translation->add_app('loginscreen'); 218 219 // OUs LDAP 220 $show_Organization = "none"; 221 222 if( $GLOBALS['phpgw_info']['server']['use_prefix_organization'] ) 223 { 224 $show_Organization = "block"; 225 286 226 $obj_organization = CreateObject('phpgwapi.sector_search_ldap'); 227 287 228 $organizations = $obj_organization->organization_search($GLOBALS['phpgw_info']['server']['ldap_context']); 288 289 $organizations_count = count($organizations); 290 for ($i=0; $i<$organizations_count; ++$i) 229 230 for ($i=0; $i<count($organizations); $i++) 291 231 { 292 232 $tmp_array[strtolower($organizations[$i])] = $organizations[$i]; … … 294 234 295 235 $arrayOrganization = $tmp_array; 236 296 237 ksort($arrayOrganization); 297 238 298 foreach($arrayOrganization 299 as $organization_name => $organization_vars) 239 foreach($arrayOrganization as $organization_name => $organization_vars) 300 240 { 301 241 $organization_select .= '<option value="' . $organization_name . '"'; 302 242 303 if( $organization_name == $_COOKIE['last_organization'])243 if( $organization_name == $_COOKIE['last_organization'] ) 304 244 { 305 245 $organization_select .= ' selected'; … … 307 247 $organization_select .= '>' . $organization_vars . "</option>\n"; 308 248 } 309 $organization_select = '<div class="login_label"><label>'.lang("organization") 310 .'</label><br><select name="organization">' 311 .$organization_select.'</select></div>'; 249 312 250 $tmpl->set_var('select_organization',$organization_select); 313 251 } 252 253 $tmpl->set_var( 'show_organization', $show_Organization ); 314 254 315 255 $domain_select = ' '; 256 316 257 $last_loginid = $_COOKIE['last_loginid']; 317 if($GLOBALS['phpgw_info']['server']['show_domain_selectbox']) 258 259 if( $GLOBALS['phpgw_info']['server']['show_domain_selectbox'] ) 318 260 { 319 261 $domain_select = "<select name=\"logindomain\">\n"; 262 320 263 foreach($GLOBALS['phpgw_domain'] as $domain_name => $domain_vars) 321 264 { … … 333 276 { 334 277 reset($GLOBALS['phpgw_domain']); 278 335 279 list($default_domain) = each($GLOBALS['phpgw_domain']); 336 280 … … 340 284 } 341 285 } 286 342 287 $tmpl->set_var('select_domain',$domain_select); 343 288 344 foreach($_GET as $name => $value)345 { 346 if( preg_match('/phpgw_/',$name))289 foreach($_GET as $name => $value) 290 { 291 if(ereg('phpgw_',$name)) 347 292 { 348 293 $extra_vars .= '&' . $name . '=' . urlencode($value); … … 350 295 } 351 296 352 if 297 if( is_string( $extra_vars ) ) 353 298 { 354 299 $extra_vars = '?' . substr($extra_vars,1); … … 364 309 $config_reg = $cnf_reg->config_data; 365 310 366 if($config_reg[ 'enable_registration']=='True' && $config_reg['register_link']=='True')311 if($config_reg[enable_registration]=='True' && $config_reg[register_link]=='True') 367 312 { 368 313 $reg_link=' <a href="registration/">'.lang('Not a user yet? Register now').'</a><br/>'; … … 370 315 371 316 $template = $GLOBALS['phpgw_info']['login_template_set']; 317 372 318 $GLOBALS['phpgw_info']['server']['template_set'] = $template; 373 319 … … 387 333 $tmpl->set_var('template_set', $template); 388 334 389 // loads the template's login.css 390 // and then the theme's login.css (if any) 391 $template_dir = $GLOBALS['phpgw_info']['server']['webserver_url'] . '/phpgwapi/templates/' . $template; 392 $login_dir = $template_dir . '/login.css'; 393 $login_css = "<link href='" . $login_dir . "' rel='stylesheet' type='text/css' />"; 394 $login_dir = $template_dir . '/themes/' . $GLOBALS['phpgw_info']['user']['preferences']['common']['theme'] . '/login.css'; 395 if(file_exists('./'.$login_dir)) 396 { 397 $login_css .= "<link href='" . $login_dir . "' rel='stylesheet' type='text/css' />"; 398 } 399 $tmpl->set_var('login_css',$login_css); 400 401 $GLOBALS['phpgw']->translation->add_app('loginhelp',$_GET['lang']); 402 403 if(lang('loginhelp_message') != 'loginhelp_message*' && trim(lang('loginhelp_message')) != ""){ 404 $tmpl->set_var('lang_help',lang("Help")); 405 } 406 else 407 $tmpl->set_var('display_help','none'); 408 409 $tmpl->set_var('bg_color',($GLOBALS['phpgw_info']['server']['login_bg_color']?$GLOBALS['phpgw_info']['server']['login_bg_color']:'FFFFFF')); 410 $tmpl->set_var('bg_color_title',($GLOBALS['phpgw_info']['server']['login_bg_color_title']?$GLOBALS['phpgw_info']['server']['login_bg_color_title']:'486591')); 411 412 if($GLOBALS['phpgw_info']['server']['use_frontend_name']) 413 $tmpl->set_var('frontend_name', " - ".$GLOBALS['phpgw_info']['server']['use_frontend_name']); 414 415 if (substr($GLOBALS['phpgw_info']['server']['login_logo_file'],0,4) == 'http') 416 { 417 $var['logo_file'] = $GLOBALS['phpgw_info']['server']['login_logo_file']; 418 } 419 else 420 { 421 $var['logo_file'] = $GLOBALS['phpgw']->common->image('phpgwapi',$GLOBALS['phpgw_info']['server']['login_logo_file']?$GLOBALS['phpgw_info']['server']['login_logo_file']:'logo'); 422 } 423 $var['logo_url'] = $GLOBALS['phpgw_info']['server']['login_logo_url']?$GLOBALS['phpgw_info']['server']['login_logo_url']:'http://www.eGroupWare.org'; 424 if (substr($var['logo_url'],0,4) != 'http') 425 { 426 $var['logo_url'] = 'http://'.$var['logo_url']; 427 } 428 $var['logo_title'] = $GLOBALS['phpgw_info']['server']['login_logo_title']?$GLOBALS['phpgw_info']['server']['login_logo_title']:'www.eGroupWare.org'; 429 $tmpl->set_var($var); 430 431 if (!@$GLOBALS['phpgw_info']['server']['login_virtual_keyboard']) 432 $tmpl->set_var('show_kbd','none'); 433 434 if (@$GLOBALS['phpgw_info']['server']['login_show_language_selection']) 435 { 436 $select_lang = '<select name="lang" onchange="'."location.href=location.href+(location.search?'&':'?')+'lang='+this.value".'">'; 437 $langs = $GLOBALS['phpgw']->translation->get_installed_langs(); 438 uasort($langs,'strcasecmp'); 439 foreach ($langs as $key => $name) // if we have a translation use it 440 { 441 $select_lang .= "\n\t".'<option value="'.$key.'"'.($key == $GLOBALS['phpgw_info']['user']['preferences']['common']['lang'] ? ' selected="1"' : '').'>'.$name.'</option>'; 442 } 443 $select_lang .= "\n</select>\n"; 444 $tmpl->set_var(array( 445 'lang_language' => lang('Language'), 446 'select_language' => $select_lang, 447 )); 448 } 449 else 450 { 451 $tmpl->set_block('login_form','language_select'); 452 $tmpl->set_var('language_select',''); 453 } 335 // Keyboard Virtual 336 $tmpl->set_var('show_kbd',$GLOBALS['phpgw_info']['server']['login_virtual_keyboard']); 454 337 455 338 $tmpl->set_var('autocomplete', ($GLOBALS['phpgw_info']['server']['autocomplete_login'] ? 'autocomplete="off"' : '')); … … 458 341 if($GLOBALS['phpgw_info']['server']['captcha'] && $_GET['cd']!='300' ) 459 342 { 460 $aux_captcha = '<input type="hidden" name="' . session_name() . '" value="' . session_id() . '" >'; 461 // setcookie(session_name(),base64_encode(session_convert($key_convert . session_id(),$key_convert)),0); 462 if($valor_contador > $GLOBALS['phpgw_info']['server']['num_badlogin']) 463 { 464 $aux_captcha = '<div class="login_label" > 465 <img id="id_captcha" src="./security/captcha.php?' . session_name() . '=' . session_id() . '" title="'.lang('Security code').'" alt="'.lang('Security code').'" style="position:static;"> 466 <input class="input" type="text" maxlength="50" size="20" name="codigo" id="codigo" value="" > 467 <input type="hidden" name="' . session_name() . '" value="' . session_id() . '" > 468 </div>'; 469 } 470 } 471 $tmpl->set_var('captcha',$aux_captcha); 343 $aux_captcha = '<input type="hidden" name="'.session_name().'" value="'.session_id().'">'; 344 345 if( $_SESSION['contador_captcha'] > $GLOBALS['phpgw_info']['server']['num_badlogin'] ) 346 { 347 $aux_captcha = '<div>' 348 .'<img id="id_captcha" src="./security/captcha.php?' . session_name() . '=' . session_id() . '" title="'.lang('Security code').'" alt="'.lang('Security code').'" style="position:static;">' 349 .'<input class="input" type="text" maxlength="50" size="15" name="codigo" id="codigo" value="" >' 350 .'<input type="hidden" name="' . session_name() . '" value="' . session_id() . '" >' 351 .'</div>'; 352 } 353 354 $tmpl->set_var('captcha',$aux_captcha); 355 } 472 356 473 357 // Testa se deve incluir applet para login com certificado...... 474 if ( $_GET['cd']=='300' && $GLOBALS['phpgw_info']['server']['certificado']==1)358 if ( $_GET['cd']=='300' && $GLOBALS['phpgw_info']['server']['certificado'] == 1 ) 475 359 { 476 360 //Zera o Cookie contador, responsavel pelo captcha 477 $_SESSION['contador'] = 0; 478 $valor_contador = 0; 479 $link_alterna_login = '<img src="phpgwapi/templates/news/images/warning.gif"/><a href="login.php">' . lang('Access without Digital Certificate') . '</a>'; 361 $_SESSION['contador_captcha'] = 0; 362 $link_alterna_login = '<img src="phpgwapi/templates/default/images/warning.gif"/><a href="login.php">' . lang('Access without Digital Certificate') . '</a>'; 480 363 $tmpl->set_var('show','none'); 481 $tmpl->set_var('action','<div id="action"><img style="border:0px;margin:31px 0px 58px 0px;" src="phpgwapi/templates/ news/images/acao.gif" /></div>');364 $tmpl->set_var('action','<div id="action"><img style="border:0px;margin:31px 0px 58px 0px;" src="phpgwapi/templates/default/images/acao.gif" /></div>'); 482 365 // gera parametro com tokens suportados .... 483 366 $var_tokens = ''; 484 for($ii = 1; $ii < 11; ++$ii) 367 368 for($ii = 1; $ii < 11; $ii++) 485 369 { 486 370 if($GLOBALS['phpgw_info']['server']['test_token' . $ii . '1']) … … 492 376 $var_tokens = 'ePass2000Lx;/usr/lib/libepsng_p11.so,ePass2000Win;c:/windows/system32/ngp11v211.dll'; 493 377 } 494 $param1 = " 495 '<param name=\"token\" value=\"" . substr($var_tokens,0,strlen($var_tokens)) . "\"> ' + 496 "; 497 $param2 = " 498 'token=\"" . substr($var_tokens,0,strlen($var_tokens)) . "\" ' + 499 "; 378 379 $param1 = "'<param name=\"token\" value=\"" . substr($var_tokens,0,strlen($var_tokens)) . "\">'+"; 380 $param2 = "'token=\"" . substr($var_tokens,0,strlen($var_tokens)) . "\" ' +"; 500 381 501 382 $cod_applet = 502 503 /* // com debug ativado504 '<script type="text/javascript">505 if (navigator.userAgent.match(\'MSIE\')){506 document.write(\'<object style="display:yes;width:0;height:0;vertical-align:bottom;" id="login_applet" \' +507 \'classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93"> \' +508 \'<param name="type" value="application/x-java-applet;version=1.5"> \' +509 \'<param name="code" value="LoginApplet.class"> \' +510 \'<param name="locale" value="' . $lang . '"> \' +511 \'<param name="mayscript" value="true"> \' + '512 . $param1513 . ' \'<param name="archive" value="ExpressoCertLogin.jar,ExpressoCert.jar,commons-httpclient-3.1.jar,commons-logging-1.1.1.jar,commons-codec-1.3.jar,bcmail-jdk15-142.jar,mail.jar,activation.jar,bcprov-jdk15-142.jar"> \' +514 \'<param name="debug" value="true"> \' +515 \'</object>\');516 }517 else {518 document.write(\'<embed style="display:yes;width:0;height:0;vertical-align:bottom;" id="login_applet" code="LoginApplet.class" locale="' . $lang . '"\' +519 \'archive="ExpressoCertLogin.jar,ExpressoCert.jar,commons-httpclient-3.1.jar,commons-logging-1.1.1.jar,commons-codec-1.3.jar,bcmail-jdk15-142.jar,mail.jar,activation.jar,bcprov-jdk15-142.jar" \' + '520 . $param2521 . ' \'type="application/x-java-applet;version=1.5" debug= "true" mayscript > \' +522 \'<noembed> \' +523 \'No Java Support. \' +524 \'</noembed> \' +525 \'</embed> \');526 }527 </script>';528 */529 383 // sem debug ativado 530 384 '<script type="text/javascript"> … … 553 407 </script>'; 554 408 555 556 } 557 409 } 558 410 else 559 411 { … … 561 413 { 562 414 $tmpl->set_var('show','yes'); 563 $link_alterna_login = '<img src="phpgwapi/templates/ news/images/lock1_icon.gif"/><a title="' . lang('Link to use digital certificate') . '" href="login.php?cd=300">' . lang('Logon with my digital certificate') . '</a>';415 $link_alterna_login = '<img src="phpgwapi/templates/default/images/lock1_icon.gif"/><a title="' . lang('Link to use digital certificate') . '" href="login.php?cd=300">' . lang('Logon with my digital certificate') . '</a>'; 564 416 } 565 417 $tmpl->set_var('lang_username',lang('username')); 566 418 $tmpl->set_var('action',''); 567 419 $cod_applet = ''; 568 569 420 } 570 421 571 422 $tmpl->set_var('applet',$cod_applet); 572 423 $tmpl->set_var('link_alterna_login',$link_alterna_login); 573 574 // Load News from NewsAdmin module - BEGIN 575 define('PHPGW_TEMPLATE_DIR','./phpgwapi/templates/'.$GLOBALS['phpgw_info']['login_template_set']); 576 $news = CreateObject('news_admin.uinews'); 577 $public_news = $news->bo->get_all_public_news(); 578 rsort($public_news); 579 $newslist = array(); 580 foreach($public_news as $i => $news){ 581 $newslist[] = array_map('utf8_encode', $news); 582 } 583 $tmpl->set_var('public_news',json_encode($newslist)); 584 $tmpl->set_var('lang_previous',lang('Previous')); 585 $tmpl->set_var('lang_next',lang('Next')); 586 $tmpl->set_var('lang_pause',lang('Pause')); 587 $tmpl->set_var('lang_resume',lang('Resume')); 588 589 // Load News from NewsAdmin module - END 590 424 591 425 $tmpl->set_var('dir_root', 'http://' . nearest_to_me() . '/'); 592 426 if(is_file(dirname( __FILE__ ) . '/../../../infodist/ultima-revisao-svn.php')) … … 594 428 if(isset($ultima_revisao)) $tmpl->set_var('ultima_rev','<br>' . $ultima_revisao); 595 429 596 // Adiciona c ódigo personalizado de outro template430 // Adiciona código personalizado de outro template 597 431 // que esteja utilizando o login_default.php 598 if(is_file('.'.$template_dir.'/login.inc.php')) { 432 if(is_file('.'.$template_dir.'/login.inc.php')) 433 { 599 434 include_once('.'.$template_dir.'/login.inc.php'); 600 435 } 601 436 602 437 $tmpl->pfp('loginout','login_form'); 603 }604 438 605 439 ?> 606 -
branches/2.5/preferences/changepassword.php
r3296 r8232 108 108 $GLOBALS['phpgw']->template->set_var('lang_change',lang('Change')); 109 109 $GLOBALS['phpgw']->template->set_var('lang_cancel',lang('Cancel')); 110 $GLOBALS['phpgw']->template->set_var('cancel_action' , $GLOBALS['phpgw']->link('/preferences/')); 110 111 $GLOBALS['phpgw']->template->set_var('form_action',$GLOBALS['phpgw']->link('/preferences/changepassword.php')); 111 112 -
branches/2.5/preferences/setup/setup.inc.php
r7516 r8232 13 13 $setup_info['preferences']['name'] = 'preferences'; 14 14 $setup_info['preferences']['title'] = 'Preferences'; 15 $setup_info['preferences']['version'] = '2.5. 0';15 $setup_info['preferences']['version'] = '2.5.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.5. 0')30 'versions' => Array('2.5.1.1') 31 31 ); 32 32 ?> -
branches/2.5/prototype/api/datalayer.js
r6444 r8232 657 657 658 658 } 659 660 if( typeof DataLayer.storage.cache[':diff'] != 'object') 661 DataLayer.storage.cache[':diff'] = {}; 662 659 663 }, 660 664 -
branches/2.5/prototype/api/templates/foldertree.ejs
r8113 r8232 4 4 Inbox: {name:'Caixa de Entrada', classe:'inbox'}, 5 5 }; 6 specialFolders[outboxfolder] = {name: 'Caixa de Saída', classe:'outbox'}; 7 specialFolders[trashfolder] = {name:'Lixeira', classe:'trash'}; 8 specialFolders[draftsfolder] = {name:'Rascunhos', classe:'drafts'}; 9 specialFolders[spamfolder] = {name:'Spam', classe:'spam'}; 10 specialFolders[sentfolder] = {name:'Enviados', classe:'sent'}; 6 specialFolders[outboxfolder] = {name: 'Caixa de Saída', classe:'outbox'}; 7 specialFolders[trashfolder] = {name:'Lixeira', classe:'trash'}; 8 specialFolders[draftsfolder] = {name:'Rascunhos', classe:'drafts'}; 9 specialFolders[spamfolder] = {name:'Spam', classe:'spam'}; 10 specialFolders[sentfolder] = {name:'Enviados', classe:'sent'}; 11 11 12 12 function recursive_forest(array_trees) -
branches/2.5/prototype/config/calendarSignature.ini
r7958 r8232 14 14 deepnessFindCalendarSignature = modules/calendar/interceptors/DBMapping.php 15 15 createDefaultGroup = modules/calendar/interceptors/DBMapping.php 16 17 [before.read] 18 calendarSignatureSecurity = modules/calendar/interceptors/DBMapping.php 19 20 [before.find] 21 calendarSignatureSecurity = modules/calendar/interceptors/DBMapping.php 16 17 [before.read] 18 calendarSignatureSecurity = modules/calendar/interceptors/DBMapping.php 19 20 [before.find] 21 calendarSignatureSecurity = modules/calendar/interceptors/DBMapping.php 22 22 23 23 [after.read] -
branches/2.5/prototype/config/schedulable.ini
r7958 r8232 17 17 18 18 [before.find] 19 schedulableSecurity = modules/calendar/interceptors/DBMapping.php 19 schedulableSecurity = modules/calendar/interceptors/DBMapping.php 20 20 findDeepnessOne = modules/calendar/interceptors/DBMapping.php 21 21 findSchedulable = modules/calendar/interceptors/DBMapping.php … … 35 35 createHistoric = modules/calendar/interceptors/DBMapping.php 36 36 37 [before.read] 38 schedulableSecurity = modules/calendar/interceptors/DBMapping.php 39 37 [before.read] 38 schedulableSecurity = modules/calendar/interceptors/DBMapping.php 39 40 40 [after.read] 41 41 deepnessReadEvent = modules/calendar/interceptors/DBMapping.php … … 44 44 deleteSchedulable = modules/calendar/interceptors/DBMapping.php 45 45 deleteEvent = modules/calendar/interceptors/Notifications.php 46 46 47 47 48 48 [PostgreSQL.mapping] -
branches/2.5/prototype/modules/attach_message/attach_message.css
r5831 r8232 36 36 #mailpreview_container {margin:5px;padding:0px;height:220px; width:907px; float:left; margin:5px 5px 5px 5px;} 37 37 #mailpreview_container .ui-tabs-panel {height:183px;overflow:auto;padding:0px; width:905px;} 38 /*#mailpreview_tabs { max-height: 20px; }*/ 38 #mailpreview_tabs { max-height: 25px; } 39 39 #buttons-container {text-align: right;margin:5px 5px 5px 5px;float:right;} 40 40 #selected_messages_counter {text-align:right;padding:0;} -
branches/2.5/prototype/modules/attach_message/attach_message.js
r7543 r8232 216 216 for (var message in selectedMessages[folder]) { 217 217 if (selectedMessages[folder][message]) { 218 byte_size += parseInt(onceOpened Messages[folder][message].size);218 byte_size += parseInt(onceOpenedHeadersMessages[folder][message].size); 219 219 total_messages++; 220 220 } … … 227 227 var msgAttacherGrid = $("#message_attacher_grid"), msgsTotal = $("#selected_messages_number"); 228 228 var lastLoadedMessages = []; 229 var onceOpenedMessages = [];230 229 var selectedMessages = {}; 231 230 var selectedFolder = {}; 232 231 232 function mount_children_localfolders_list(folder){ 233 folder.children = new Array(); 234 folder.id_search = folder.id; 235 folder.id = 'local_messages_'+folder.id, 236 folder.commonName = folder.name, 237 folder.parentId = folder.parentid, 238 folder.type = 'localFolder', 239 folder.name = folder.id, 240 folder.messageCount = { 241 total: folder.messages, 242 unseen: folder.unseen 243 } 244 245 if(folder.haschild){ 246 expresso_mail_archive.getFoldersList(folder.id_search); 247 folder.children = expresso_mail_archive.folders; 248 249 for(var i = 0; i < folder.children.length; i++){ 250 mount_children_localfolders_list(folder.children[i]); 251 } 252 253 } 254 } 233 255 function adaptOffline( data ) 234 256 { … … 254 276 255 277 return( data ); 256 257 } 278 } 279 280 function archive_flag( flagObj ){ 281 282 var flags = {}; 283 var returns = ''; 284 285 $.each( flagObj.tag , function(i, flag){ 286 flags[ flag['@value'] ] = true; 287 }); 288 289 returns += (flags['seen'] ? '0,' : '1,') ; 290 returns += (flags['answered'] && !flags['forwarded'] ? '1,' : '0,') ; 291 returns += (flags['forwarded'] ? '1,' : '0,') ; 292 returns += (flags['flagged'] || flags['importance_high'] ? '1,' : '0,') ; 293 returns += '0,0'; 294 295 return returns; 296 } 297 298 function archive_flag_search( flagObj ){ 299 var flags = {}; 300 var returns = ''; 301 302 flagObj = flagObj.split(""); 303 $.each( flagObj , function(i, flag){ 304 flags[ flag ] = true; 305 }); 306 307 returns += (flags['U'] ? '1,' : '0,') ; 308 returns += (flags['A'] && !flags['X'] ? '1,' : '0,') ; 309 returns += (flags['X'] ? '1,' : '0,') ; 310 returns += (flags['F'] ? '1,' : '0,') ; 311 returns += '0,0'; 312 313 return returns; 314 } 315 258 316 259 317 $mailpreview_tabs_label_length = 15; … … 271 329 var tree2 = new Array(); 272 330 var tree3 = new Array(); 331 332 if(preferences.use_local_messages == 1){ 333 if(expresso_mail_archive.folders && !expresso_offline && expresso_mail_archive.enabled == true) { //MailArchive 334 //pega pastas locais do mailarchiver e insere no array de pastas 335 expresso_mail_archive.getFoldersList("home"); 336 treeFolders = expresso_mail_archive.folders; 337 338 for(var i=0; i<treeFolders.length; i++ ){ 339 mount_children_localfolders_list(treeFolders[i]); 340 } 341 342 for(var i = 0; i < treeFolders.length; i++){ 343 data.push(treeFolders[i]); 344 } 345 } 346 } 347 273 348 for (var i=0; i<data.length; i++) { 274 349 … … 286 361 } 287 362 else if (/^local_messages/.test(data[i].id)) { 288 if (!unorphanize(tree3, data[i])) {289 data[i].children = new Array();290 363 tree3.push(data[i]); 291 }292 364 } 293 365 … … 299 371 .find("#foldertree").treeview() 300 372 .click(function(event){ 373 301 374 //request new selected folder messages 302 375 var target = $(event.target); … … 325 398 var grid = $("#message_attacher_grid"), offlineCase = ""; 326 399 327 if( !targetId.indexOf( 'local_messages/' ) ) 328 offlineCase = ":offline"; 329 330 331 grid.jqGrid('setGridParam',{url:BASE_PATH + 'REST.php'+offlineCase+'?q=folder/'+targetId.replace(dashes, '.')+'/message'}) 332 .trigger("reloadGrid") 333 .jqGrid('setCaption', '<span class="'+child.attr('class')+'">'+child.attr('title')+'</span>'); 400 if(targetId.indexOf( 'local_messages' ) == 0){ 401 //Entrar caso: Clicar em uma pasta que seja do arquivamento local 402 targetId = targetId.split("_")[2]; 403 404 expresso_mail_archive.getMessagesByFolder(targetId,"ALL"); 405 406 msgAll = expresso_mail_archive.msgAll; 407 408 var msgs = new Array(); 409 var from = ''; 410 var flag = ''; 411 412 $.each(msgAll, function(i, msg){ 413 from = $.parseJSON(msg['_from']); 414 415 if(!from){ 416 from = {"mailbox":{"name":"null","route":"null","localPart":"null","domain":"null"}}; 417 } 418 419 flag = $.parseJSON(msg['_tags']); 420 id = msg['_id']; 421 422 var message = {}; 423 424 425 message['msg_number'] = id; 426 message['flags'] = archive_flag( flag ); 427 message['from.name'] = from['mailbox']['@name']; 428 message['subject'] = msg['_subject']; 429 message['timestamp'] = msg['_receivedDate']; 430 message['size'] = msg['_size']; 431 message['id'] = id; 432 msgs.push( message ); 433 434 }); 435 436 grid.jqGrid("clearGridData", true); 437 grid.jqGrid('setGridParam',{datatype: "local",data: msgs}) 438 .trigger("reloadGrid") 439 .jqGrid('setCaption', '<span class="'+child.attr('class')+'">'+child.attr('title')+'</span>'); 440 441 } else { 442 if( !targetId.indexOf( 'local_messages/' ) ) 443 offlineCase = ":offline"; 444 445 grid.jqGrid('setGridParam',{datatype: "json", url:BASE_PATH + 'REST.php'+offlineCase+'?q=folder/'+targetId.replace(dashes, '.')+'/message'}) 446 .trigger("reloadGrid") 447 .jqGrid('setCaption', '<span class="'+child.attr('class')+'">'+child.attr('title')+'</span>'); 448 } 334 449 }) 335 450 .find('span:first-child'); 336 $('span.folder.inbox'). addClass('selected');451 $('span.folder.inbox').parents(".ui-dialog").find("li#INBOX span").addClass('selected'); 337 452 selectedFolder = { 338 453 id: firstFolder.parent().attr('id'), … … 360 475 ], 361 476 jsonReader : { 362 root:"rows", 477 root: function(obj){ 478 obj['data'] = {}; 479 obj.data = {rows : obj.rows}; 480 if(obj.rows){ 481 if(!obj.rows[0].flag){ 482 var msgs = []; 483 $.each(obj.rows, function(i, msg){ 484 flag = msg['flags']; 485 id = msg['msg_number']; 486 var message = {}; 487 488 message['msg_number'] = id; 489 message['flags'] = flag; 490 message['to'] = { 491 name: msg['toaddress2'], 492 email: msg['toaddress2'] 493 }; 494 495 if(msg['from'] != undefined && msg['header']['from'] != undefined){ 496 message['from'] = { 497 'email' : msg['from']['email'], 498 'name' : msg['header']['from']['name'] 499 } 500 }else{ 501 message['from'] = { 502 'email' : '', 503 'name' : 'Rascunho' 504 } 505 } 506 //message['from']['name'] = msg['from']['name']; 507 message['subject'] = msg['subject'] ? msg['subject'] : "(sem assunto)"; 508 message['timestamp'] = parseInt(msg['timestamp']); 509 message['size'] = msg['size']; 510 message['id'] = id; 511 msgs.push( message ); 512 }); 513 obj['data'] = {}; 514 obj.data = {rows : msgs}; 515 } 516 } 517 return obj.data.rows; 518 }, 363 519 page: "page", 364 520 total: "total", … … 367 523 id: "0" 368 524 }, 525 hidegrid:false, 369 526 rowNum:10, 370 527 rowList:[10,25,50], … … 377 534 loadComplete: function(data) { 378 535 lastLoadedMessages = data.rows; 379 536 $("#mailgrid-container").find(".loading").hide(); 537 380 538 // aplica o contador 381 539 jQuery('.timable').each(function (i) { … … 401 559 402 560 }, 403 onSelectRow: function (id, selected) { 404 var message = false; 405 for (var i=0; i<lastLoadedMessages.length; i++){ 406 if (lastLoadedMessages[i].msg_number == id) { 407 message = lastLoadedMessages[i]; 408 break; 409 } 410 } 411 412 var tabPanelTemplateId = 'mailpreview_tab_' + selectedFolder.id.replace(/[.\/]/g, '_') + '_' + message.msg_number; 413 var tabPanelTemplateId = tabPanelTemplateId.replace(/[\s\/]/g, '-'); 414 415 if (selected) { 416 if (onceOpenedMessages[selectedFolder.id] && onceOpenedMessages[selectedFolder.id][message.msg_number]) { 417 if (!selectedMessages[selectedFolder.id]) 418 selectedMessages[selectedFolder.id] = {}; 419 420 selectedMessages[selectedFolder.id][message.msg_number] = true; 421 $('#mailpreview-container').unblock(); 422 423 var tabPanelTemplateLabel = html_entities(onceOpenedMessages[selectedFolder.id][message.msg_number].subject); 424 if (tabPanelTemplateLabel.length > $mailpreview_tabs_label_length + 3) 425 tabPanelTemplateLabel = tabPanelTemplateLabel.substring(0, $mailpreview_tabs_label_length) + '...'; 426 427 if (!$('#' + tabPanelTemplateId).length) { 428 $mailpreview_tabs.tabs("add", '#' + tabPanelTemplateId, tabPanelTemplateLabel) 429 .find('.message.empty-container').hide().end() 430 .find('#' + tabPanelTemplateId).html(onceOpenedMessages[selectedFolder.id][message.msg_number].body); 431 } else { 432 $mailpreview_tabs.tabs('select', '#' + tabPanelTemplateId) 433 .find('#' + tabPanelTemplateId + ', [href="#' + tabPanelTemplateId + '"]').removeClass('preview-message-unselected'); 434 } 435 436 } else { 437 jQuery('#mailpreview_container').block({ 438 message: '<div id="loading-content"><div class="image"></div></div>', 439 css: { 440 backgroundImage: 'url('+BASE_PATH+'modules/attach_message/images/loading.gif)', 441 backgroundRepeat: 'no-repeat', 442 backgroundPosition: 'center', 443 backgroundColor: 'transparent', 444 width: '32px', 445 height: '32px', 446 border:'none' 447 }, 448 overlayCSS: { 449 backgroundColor: '#CCC', 450 opacity: 0.5 451 } 452 }); 453 454 var offlineCase = ""; 455 456 if( !selectedFolder.id.indexOf( 'local_messages/' ) ) 457 offlineCase = ":offline"; 458 459 if (!selectedMessages[selectedFolder.id]) 460 selectedMessages[selectedFolder.id] = {}; 461 selectedMessages[selectedFolder.id][message.msg_number] = true; 462 $.ajax({ 463 accepts: 'text/html', 464 url: BASE_PATH + 'REST.php'+offlineCase+'?q=folder/'+selectedFolder.id.replace(dashes, '.')+'/message/'+id, 465 dataType: 'json', 466 success: function( mail_preview ){ 467 //selectedMessagesCount(); 468 if (!onceOpenedMessages[selectedFolder.id]) 469 onceOpenedMessages[selectedFolder.id] = {}; 470 onceOpenedMessages[selectedFolder.id][message.msg_number] = jQuery.extend(true, message, mail_preview); 471 472 $('#mailpreview_container').unblock(); 473 474 var tabPanelTemplateLabel = html_entities(onceOpenedMessages[selectedFolder.id][message.msg_number].subject); 475 if (tabPanelTemplateLabel.length > $mailpreview_tabs_label_length + 3) 476 tabPanelTemplateLabel = tabPanelTemplateLabel.substring(0, $mailpreview_tabs_label_length) + '...'; 477 selectedMessagesCount(); 478 479 if (!$('#' + tabPanelTemplateId).length) { 480 $mailpreview_tabs.tabs("add", '#' + tabPanelTemplateId, tabPanelTemplateLabel) 481 .find('.message.empty-container').hide().end() 482 .find('#' + tabPanelTemplateId).html(onceOpenedMessages[selectedFolder.id][message.msg_number].body) 483 .prepend( 484 '<div class="mailpreview-message-info">' + 485 get_lang('Subject') + ': ' + 486 html_entities(onceOpenedMessages[selectedFolder.id][message.msg_number].subject) + 487 '</div>' 488 ) 489 .find('[class^="ExpressoCssWrapper"]').addClass("mailpreview-message-body"); 490 } else { 491 $mailpreview_tabs.tabs('select', '#' + tabPanelTemplateId) 492 .find('#' + tabPanelTemplateId + ', [href="#' + tabPanelTemplateId + '"]').removeClass('preview-message-unselected'); 493 } 494 } 495 }); 496 } 497 } else { 498 /** 499 * if you wants to remove tab on unselect message, 500 * but still needs to uselect message on remove tab. 501 * 502 */ 503 /* 504 if ($('#' + tabPanelTemplateId).length) { 505 $mailpreview_tabs.tabs('remove', '#' + tabPanelTemplateId); 506 } 507 */ 508 selectedMessages[selectedFolder.id][message.msg_number] = false; 509 $mailpreview_tabs.find('#' + tabPanelTemplateId + ', [href="#' + tabPanelTemplateId + '"]').addClass('preview-message-unselected'); 510 } 511 512 if (onceOpenedMessages[selectedFolder.id] && onceOpenedMessages[selectedFolder.id][message.msg_number]) 513 selectedMessagesCount(); 514 }, 561 onSelectRow: function(id, selected) 562 { 563 /* Funções auxiliares:*/ 564 565 /* 566 Marca a mensagem como selecionada no grid de anexar mensagena. 567 Parâmetros: 568 folder: folder em que a mensagem a ser selecionada se encontra. 569 msg_number: id da mensagem a ser selecionada. 570 */ 571 var mark_as_selected = function (folder, msg_number) { 572 if(!selectedMessages[folder]) 573 { 574 selectedMessages[folder] = {}; 575 } 576 selectedMessages[folder][msg_number] = true; 577 } 578 579 /* 580 Adiciona uma mensagem ao cache de mensagens. 581 cache: vetor de cache de mensagens. 582 msg: mensagem a ser armazenada. 583 */ 584 var add_msg_to_cache = function (cache, msg) { 585 if(!cache[selectedFolder.id]) 586 { 587 cache[selectedFolder.id] = {}; 588 } 589 cache[selectedFolder.id][msg.msg_number] = msg; 590 } 591 592 /* 593 Adiciona uma aba de preview para cada mensagem selecionada. 594 subject: assunto da mensagem. 595 body: corpo da mensagem. 596 */ 597 var add_preview_tab = function (subject, body) { 598 // Trunca o assunto, para caber na aba de preview: 599 var tabPanelTemplateLabel = html_entities(subject); 600 if(tabPanelTemplateLabel.length > $mailpreview_tabs_label_length + 3) 601 { 602 tabPanelTemplateLabel = tabPanelTemplateLabel.substring(0, $mailpreview_tabs_label_length) + '...'; 603 } 604 605 // Se a aba não tiver sido adicionada: 606 if(!$('#' + tabPanelTemplateId).length) 607 { 608 // adiciona-a: 609 $mailpreview_tabs 610 .tabs("add", '#' + tabPanelTemplateId, tabPanelTemplateLabel) 611 .find('.message.empty-container') 612 .hide() 613 .end() 614 .find('#' + tabPanelTemplateId) 615 .html(body) 616 .prepend('<div class="mailpreview-message-info">' + get_lang('Subject') + ': ' + html_entities(subject) + '</div>') 617 .find('[class^="ExpressoCssWrapper"]') 618 .addClass("mailpreview-message-body"); 619 } 620 else 621 { 622 // Senão, só a seleciona: 623 $mailpreview_tabs 624 .tabs('select', '#' + tabPanelTemplateId) 625 .find('#' + tabPanelTemplateId + ', [href="#' + tabPanelTemplateId + '"]') 626 .removeClass('preview-message-unselected'); 627 } 628 } 629 630 var message = false; 631 for(var i = 0; i < lastLoadedMessages.length; i++) 632 { 633 if(lastLoadedMessages[i].msg_number == id) 634 { 635 message = lastLoadedMessages[i]; 636 break; 637 } 638 } 639 var tabPanelTemplateId = 'mailpreview_tab_' + selectedFolder.id.replace(/[.\/]/g, '_') + '_' + message.msg_number; 640 var tabPanelTemplateId = tabPanelTemplateId.replace(/[\s\/]/g, '-'); 641 642 if(selected) 643 { 644 // Se a já mensagem (com preview) já estiver no cache: 645 if(onceOpenedHeadersMessages[selectedFolder.id] && onceOpenedHeadersMessages[selectedFolder.id][message.msg_number] && onceOpenedHeadersMessages[selectedFolder.id][message.msg_number].body) 646 { 647 648 mark_as_selected(selectedFolder.id, message.msg_number); 649 650 add_preview_tab( 651 onceOpenedHeadersMessages[selectedFolder.id][message.msg_number].subject, 652 onceOpenedHeadersMessages[selectedFolder.id][message.msg_number].body 653 ); 654 } 655 else // Mensagem não está no cache: 656 { 657 jQuery('#mailpreview_container').block( 658 { 659 message: '<div id="loading-content"><div class="image"></div></div>', 660 css: { 661 backgroundImage: 'url(' + BASE_PATH + 'modules/attach_message/images/loading.gif)', 662 backgroundRepeat: 'no-repeat', 663 backgroundPosition: 'center', 664 backgroundColor: 'transparent', 665 width: '32px', 666 height: '32px', 667 border: 'none' 668 }, 669 overlayCSS: { 670 backgroundColor: '#CCC', 671 opacity: 0.5 672 } 673 }); 674 675 mark_as_selected(selectedFolder.id, message.msg_number); 676 677 // Se for mensagem local: 678 if(selectedFolder['id'].indexOf("local_messages_") != -1) 679 { 680 expresso_mail_archive.getPreviewToAttach(id); 681 682 var body = expresso_mail_archive.bodyPreview; 683 var subject = expresso_mail_archive.subjectPreview; 684 685 add_preview_tab(subject, body); 686 687 $('#mailpreview_container').unblock(); 688 689 add_msg_to_cache(onceOpenedHeadersMessages, message); 690 } 691 else 692 { 693 proxy_mensagens.get_msg(id, selectedFolder.id, '', function (data) { 694 message = $.extend(true, message, data); 695 696 add_preview_tab(message.subject, message.body); 697 698 $('#mailpreview_container').unblock(); 699 700 add_msg_to_cache(onceOpenedHeadersMessages, message); 701 702 703 }) 704 } 705 } 706 } 707 else 708 { 709 /** 710 * if you wants to remove tab on unselect message, 711 * but still needs to uselect message on remove tab. 712 * 713 */ 714 selectedMessages[selectedFolder.id][message.msg_number] = false; 715 $mailpreview_tabs 716 .find('#' + tabPanelTemplateId + ', [href="#' + tabPanelTemplateId + '"]') 717 .addClass('preview-message-unselected'); 718 } 719 720 selectedMessagesCount(); 721 }, 722 515 723 caption: '<span class="'+selectedFolder['class']+'">'+selectedFolder.name+'</span>' 516 724 }); 517 //.jqGrid('navGrid','#message_attacher_grid_pager',{edit:false,add:false,del:false}); 725 726 var search_local_messsages = function(param, folder){ 727 if(preferences.use_local_messages != 0) 728 { 729 folder = folder.split("_")[2]; 730 731 var local_folders = []; 732 expresso_mail_archive.search_queryresult = null; 733 734 local_folders.push(folder); 735 736 tmp = []; 737 738 groupResult = []; 739 expresso_mail_archive.search(local_folders, "SUBJECT " + "<=>" +url_encode(param) + "##"); 740 groupResult.push( expresso_mail_archive.search_queryresult ); 741 expresso_mail_archive.search(local_folders, "FROM " + "<=>" + url_encode(param) + "##"); 742 groupResult.push( expresso_mail_archive.search_queryresult ); 743 expresso_mail_archive.search(local_folders, "TO " + "<=>" + url_encode(param) + "##"); 744 groupResult.push( expresso_mail_archive.search_queryresult ); 745 expresso_mail_archive.search(local_folders, "CC " + "<=>" + url_encode(param) + "##"); 746 groupResult.push( expresso_mail_archive.search_queryresult ); 747 748 if($("#gbox_message_attacher_grid .attach-message-search-checkbox").is(":checked")){ 749 expresso_mail_archive.search(local_folders, "BODY " + "<=>" + url_encode(param) + "##"); 750 groupResult.push( expresso_mail_archive.search_queryresult ); 751 } 752 753 754 $.each(groupResult, function(i, result){ 755 if(result != null){ 756 757 var existsMessage = true; 758 759 $.each(result, function(i, each){ 760 761 $.each(tmp, function(i, ids){ 762 763 if(each.msg_number == ids.msg_number){ 764 765 existsMessage = false; 766 return false; 767 768 } 769 770 }); 771 772 if(existsMessage) tmp.push(each); 773 }); 774 775 } 776 }); 777 778 779 if(tmp == null) 780 { 781 tmp = new Object(); 782 tmp.length = 0; 783 } 784 785 msgs = []; 786 787 $.each(tmp, function(i, msg){ 788 789 flag = msg['flag']; 790 id = msg['msg_number']; 791 792 var message = {}; 793 794 var stamp = msg['timestamp']; 795 stamp = stamp.toString() + "000"; 796 stamp = parseInt(stamp); 797 798 message['msg_number'] = id; 799 message['flags'] = archive_flag_search(flag);//"1,1,1,1,1,1";// 800 message['from.name'] = msg['from']; 801 message['subject'] = msg['subject']; 802 message['timestamp'] = stamp; 803 message['size'] = msg['size']; 804 message['id'] = id; 805 msgs.push( message ); 806 }); 807 return msgs; 808 } 809 } 810 var search_imap_messages = function(param, folder){ 811 var grid = $("#message_attacher_grid"); 812 813 DataLayer.storage.cache = {}; 814 if( $(".attach-message-search-checkbox:checked").length > 0 ){ 815 var filters = [ 816 [ 817 'from', 818 '*', 819 param 820 ], 821 [ 822 'OR', 823 'to', 824 '*', 825 param 826 ], 827 [ 828 'OR', 829 'subject', 830 '*', 831 param 832 ], 833 [ 834 'OR', 835 'folder', 836 '*', 837 folder 838 ], 839 [ 840 'OR', 841 'body', 842 '*', 843 param 844 ] 845 ]; 846 }else{ 847 var filters = [ 848 [ 849 'from', 850 '*', 851 param 852 ], 853 [ 854 'OR', 855 'to', 856 '*', 857 param 858 ], 859 [ 860 'OR', 861 'subject', 862 '*', 863 param 864 ], 865 [ 866 'OR', 867 'folder', 868 '*', 869 folder 870 ] 871 ]; 872 } 873 874 var data = DataLayer.get( 'message', { filter: filters, criteria: { properties: { context: { folder: folder } } } }, true ); 875 876 if(DataLayer.criterias['message:jqGridSearch']){ 877 delete DataLayer.criterias['message:jqGridSearch']; 878 } 879 880 DataLayer.register( 'criterias', 'message:jqGridSearch', function( crit ){ 881 crit.properties = { context: { folder: folder } }; 882 883 return { filter: [ "msgNumber", "IN", data ], criteria: crit }; 884 }); 885 if(typeof(data) == 'object'){ 886 grid.jqGrid("clearGridData", true); 887 grid.jqGrid('setGridParam',{datatype: "json", url: 'message:jqGridSearch'}).trigger("reloadGrid"); 888 889 }else{ 890 $("#mailgrid-container").find(".loading").hide(); 891 grid.jqGrid("clearGridData", true); 892 } 893 } 894 895 var search_messages = function(param){ 896 var grid = $("#message_attacher_grid"); 897 var folder = $("#foldertree li span.selected").parent().attr("id"); 898 899 if(param == ""){ 900 $('#foldertree [id="'+folder+'"]').trigger("click"); 901 return; 902 } 903 $(".attach-message-search-input").val(""); 904 if(folder.indexOf("local_messages_") == 0){ 905 // Pesquisa pelas mensagens locais... 906 msgs = search_local_messsages(param, folder); 907 } else { 908 // Pesquisa pelo Imap... 909 return search_imap_messages(param, folder); 910 } 911 912 // Monta as mensagens na grid... 913 grid.jqGrid("clearGridData", true); 914 grid.jqGrid('setGridParam',{datatype: "local",data: msgs}) 915 .trigger("reloadGrid"); 916 //.jqGrid('setCaption', '<span class="'+child.attr('class')+'">'+child.attr('title')+'</span>'); 917 } 918 518 919 var title = [get_lang("First page"), get_lang("Prev page"), get_lang("Next page"), get_lang("Last page")]; 519 920 $("#first_message_attacher_grid_pager").attr("title",title[0]); … … 521 922 $("#next_message_attacher_grid_pager").attr("title",title[2]); 522 923 $("#last_message_attacher_grid_pager").attr("title",title[3]); 924 $("#mailgrid-container .ui-jqgrid-titlebar") 925 .append( DataLayer.render("../prototype/modules/attach_message/attachment_search.ejs") ).find(".ui-jqgrid-titlebar-close").hide() 926 .end().find(".attach-message-search-input").Watermark("Pesquisa...").keydown(function(e){ 927 var param = $(this).val(); 928 if($.ui.keyCode.ENTER == e.keyCode){ 929 $("#mailgrid-container").find(".loading").show("fast", function(){ 930 search_messages(param); 931 }); 932 } 933 934 }).end().find(".attach-message-search-checkbox").click(function(){ 935 var msg; 936 if($(this).is(":checked")){ 937 msg = get_lang("take off this option to disregard the message body in the search."); 938 } else { 939 msg = get_lang("take on this option to regard the message body in the search."); 940 } 941 $(".attach-message-search-div .button-body-msg-title").attr("title",msg); 942 }); 943 944 $("#attach-message-search").button({ 945 text: false, 946 icons: { 947 primary: "ui-icon-search" 948 } 949 }).next().button({ 950 text: false, 951 icons: { 952 primary: "ui-icon-script" 953 } 954 }); 955 $("#attach-message-search").parent().buttonset(); 956 957 $("#attach-message-search").click(function(){ 958 var param = $(this).parents(".attach-message-search-div:first").find(".attach-message-search-input").val(); 959 $("#mailgrid-container").find(".loading").show("fast", function(){ 960 search_messages(param); 961 }); 962 }); 523 963 } 524 964 }); -
branches/2.5/prototype/modules/calendar/assetic.php
r7664 r8232 87 87 88 88 if (strpos($javaVersion,"java version") !== false){ 89 $filterManager->set('yui_js', $compressor); 90 $js->ensureFilter($filterManager->get('yui_js')); 89 $filterManager->set('yui_js', $compressor); 90 $js->ensureFilter($filterManager->get('yui_js')); 91 91 } 92 92 -
branches/2.5/prototype/modules/calendar/css/layout.css
r7968 r8232 1408 1408 color: transparent; 1409 1409 } 1410 1411 .occurrence-zebra{ 1412 width: 440px !important; 1413 } 1410 1411 .occurrence-zebra{ 1412 width: 440px !important; 1413 } -
branches/2.5/prototype/modules/calendar/css/reset.css
r5341 r8232 33 33 } 34 34 body { 35 line-height: 1;35 /*line-height: 1;*/ 36 36 color: black; 37 37 background: white; -
branches/2.5/prototype/modules/calendar/css/style.css
r8050 r8232 51 51 .new-event-win fieldset#calendar_addevent_details5 .button-files-upload, .new-task-win fieldset#calendar_addevent_details5 .button-files-upload{margin: 15px 0 0 0} 52 52 .new-event-win fieldset fieldset, .new-event-win fieldset.tab-level2 fieldset, .new-task-win fieldset fieldset, .new-event-win fieldset.tab-level2 fieldset { padding: 5px 0; } 53 .new-event-win .creation-date-label{ white-space: nowrap; float: right;} 53 .new-event-win .creation-date-label{ white-space: nowrap; float: right;} 54 54 55 55 .new-activity-win fieldset { border: none; margin: 0; padding: 0; } … … 559 559 .div-addtask #calendar_addtask_details1 .subitem .done { width: 45px;} 560 560 561 @-moz-document url-prefix() {.div-addtask #calendar_addtask_details1 .ui-spinner-buttons{ top: -14px !important;}}562 563 @media screen and (-webkit-min-device-pixel-ratio:0){.div-addtask #calendar_addtask_details1 .ui-spinner-buttons{ top: -2px !important;}} 561 .div-addtask #calendar_addtask_details1 .ui-spinner-buttons{ top: -2px !important;;} 562 /*@-moz-document url-prefix() {.div-addtask #calendar_addtask_details1 .ui-spinner-buttons{ top: -2px !important;}}*/ 563 /*@media screen and (-webkit-min-device-pixel-ratio:0){.div-addtask #calendar_addtask_details1 .ui-spinner-buttons{ top: -2px !important;}}*/ 564 564 565 565 .div-addtask #calendar_addtask_details1 .ui-spinner-buttons .ui-spinner-up{height: 7px !important;} -
branches/2.5/prototype/modules/calendar/interceptors/DAViCalAdapter.php
r7799 r8232 206 206 { 207 207 $args = Controller::parse( array( 'service' => 'iCal' ) , $data , $params); 208 ob_start(); 208 ob_start(); 209 209 include ROOTPATH.'/Sync.php'; 210 210 ob_end_clean(); -
branches/2.5/prototype/modules/calendar/interceptors/DBMapping.php
r8059 r8232 164 164 165 165 public function encodeSignatureAlarmType(&$uri, &$params, &$criteria, $original) { 166 $params['type'] = self::codeAlarmType($params['type']); 167 } 168 169 public function schedulableSecurity(&$uri, &$params, &$criteria, $original) 166 $params['type'] = self::codeAlarmType($params['type']); 167 } 168 169 public function schedulableSecurity(&$uri, &$params, &$criteria, $original) 170 170 { 171 172 if( !isset($criteria['filter'][1]) || !$criteria['filter'][1] == 'uid') 173 { 174 $security = 'schedulable.id = calendarToSchedulable.schedulable'; 175 $security .= ' AND calendar.id = calendarToSchedulable.calendar'; 176 $security .= ' AND calendar.id = calendarSignature.calendar'; 177 $security .= ' AND calendarSignature.user = ' . base64_encode(Config::me('uidNumber')); 178 179 $criteria['condition'] = $security; 180 } 181 182 } 183 184 public function calendarSecurity(&$uri, &$params, &$criteria, $original) 185 { 186 $security = 'calendar.id = calendarSignature.calendar'; 187 $security .= ' AND calendarSignature.user = ' . base64_encode(Config::me('uidNumber')); 188 189 $criteria['condition'] = $security; 190 } 191 192 public function calendarSignatureSecurity(&$uri, &$params, &$criteria, $original) 193 { 194 // $security = 'calendarSignature.user = ' . base64_encode(Config::me('uidNumber')); 195 // 196 // $criteria['condition'] = $security; 171 172 if( !isset($criteria['filter'][1]) || !$criteria['filter'][1] == 'uid') 173 { 174 $security = 'schedulable.id = calendarToSchedulable.schedulable'; 175 $security .= ' AND calendar.id = calendarToSchedulable.calendar'; 176 $security .= ' AND calendar.id = calendarSignature.calendar'; 177 $security .= ' AND calendarSignature.user = ' . base64_encode(Config::me('uidNumber')); 178 179 $criteria['condition'] = $security; 180 } 181 182 } 183 184 public function calendarSecurity(&$uri, &$params, &$criteria, $original) 185 { 186 $security = 'calendar.id = calendarSignature.calendar'; 187 $security .= ' AND calendarSignature.user = ' . base64_encode(Config::me('uidNumber')); 188 189 $criteria['condition'] = $security; 190 } 191 192 public function calendarSignatureSecurity(&$uri, &$params, &$criteria, $original) 193 { 194 // $security = 'calendarSignature.user = ' . base64_encode(Config::me('uidNumber')); 195 // 196 // $criteria['condition'] = $security; 197 197 } 198 198 … … 347 347 if (isset($original['properties']['exceptions'])) { 348 348 $exceptions = explode(',', $original['properties']['exceptions']); 349 $event = Controller::read(array('concept' => 'schedulable', 'id' => $repeat['schedulable'])); 350 351 if(array_key_exists(0, $event)) $event = $event[0]; 352 353 $date = new DateTime('now', new DateTimeZone('UTC')); 354 355 foreach($exceptions as &$e){ 356 $date->setTimestamp((int) ($e / 1000)); 357 $date->setTimezone( new DateTimeZone( $event['timezone'] )); 358 $e = ($date->getTimestamp() - $date->getOffset()).'000'; 359 } 360 361 unset($repeat['exceptions']); 349 $event = Controller::read(array('concept' => 'schedulable', 'id' => $repeat['schedulable'])); 350 351 if(array_key_exists(0, $event)) $event = $event[0]; 352 353 $date = new DateTime('now', new DateTimeZone('UTC')); 354 355 foreach($exceptions as &$e){ 356 $date->setTimestamp((int) ($e / 1000)); 357 $date->setTimezone( new DateTimeZone( $event['timezone'] )); 358 $e = ($date->getTimestamp() - $date->getOffset()).'000'; 359 } 360 361 unset($repeat['exceptions']); 362 362 } 363 363 364 unset($repeat['schedulable']); 365 366 $lastExceptions = Controller::find(array('concept' => 'repeatOccurrence'), array("occurrence"), array('filter' => array('AND', array('=', 'repeat', $id), array('=', 'exception', 1)))); 364 unset($repeat['schedulable']); 365 366 $lastExceptions = Controller::find(array('concept' => 'repeatOccurrence'), array("occurrence"), array('filter' => array('AND', array('=', 'repeat', $id), array('=', 'exception', 1)))); 367 367 368 368 //Recurepa as execeções anteriores caso exista … … 379 379 else if(!empty($exceptions)) 380 380 Controller::service('PostgreSQL')->execResultSql("INSERT INTO calendar_repeat_occurrence(repeat_id,exception,occurrence)VALUES ('" . $id . "','1','" . implode("'),('" . $id . "','1','", $exceptions) . "')" ); 381 } 381 } 382 382 383 383 public function checkOccurrences($start, $end, $calendarIds) { … … 428 428 429 429 foreach ($result as $id => $res){ 430 431 $ocurrences = array_unique($res); 432 433 /* 434 * Check current range decoded 435 * */ 436 $current = Controller::find(array('concept' => 'repeatOccurrence'), array("occurrence"), array('filter' => array('=', 'repeat', $id))); 437 $toDiff = array(); 438 439 if(!empty($current)) 440 foreach($current as $c) $toDiff[] = $c['occurrence']; 441 442 $ocurrences = array_diff($ocurrences, $toDiff); 443 444 if(!empty($ocurrences)) 430 431 $ocurrences = array_unique($res); 432 433 /* 434 * Check current range decoded 435 * */ 436 $current = Controller::find(array('concept' => 'repeatOccurrence'), array("occurrence"), array('filter' => array('=', 'repeat', $id))); 437 $toDiff = array(); 438 439 if(!empty($current)) 440 foreach($current as $c) $toDiff[] = $c['occurrence']; 441 442 $ocurrences = array_diff($ocurrences, $toDiff); 443 444 if(!empty($ocurrences)) 445 445 Controller::service('PostgreSQL')->execResultSql("INSERT INTO calendar_repeat_occurrence(repeat_id,occurrence)VALUES('" . $id . "','" . implode("'),('" . $id . "', '", $ocurrences) . "')"); 446 447 } 446 447 } 448 448 $data = array(); 449 449 … … 471 471 $result = array(); 472 472 $params = array(); 473 $realResult = array(); 473 $realResult = array(); 474 474 foreach ($return as $ret) { 475 475 $currentId = $ret['schedulable']; … … 483 483 } 484 484 485 foreach($result as $i => $v) 486 { 487 $calendarToCalendarObj = self::schedulable2calendarToObject($v['id']); 488 foreach($calendarToCalendarObj as $vv) 489 { 490 $v['calendar'] = $vv['calendar_id']; 491 $realResult[] = $v; 492 } 493 } 494 495 return( $realResult ); 485 foreach($result as $i => $v) 486 { 487 $calendarToCalendarObj = self::schedulable2calendarToObject($v['id']); 488 foreach($calendarToCalendarObj as $vv) 489 { 490 $v['calendar'] = $vv['calendar_id']; 491 $realResult[] = $v; 492 } 493 } 494 495 return( $realResult ); 496 496 } 497 497 … … 633 633 //necessário para atulizar a atividade de composta pela tarefa aqui sendo atualizada 634 634 if(isset($criteria['historic']['startTime']) || isset($criteria['historic']['endTime'])){ 635 /* 636 * Verify current task is built-in activity 637 * */ 635 /* 636 * Verify current task is built-in activity 637 * */ 638 638 $taskToActivity = Controller::find(array('concept' => 'taskToActivity'), false, array('filter' => array('AND', array('=', 'task', $uri['id']), array('=', 'owner', Config::me('uidNumber'))), 'deepness' => 2)); 639 639 if(!empty($taskToActivity)){ … … 641 641 $isAllDay = 1; 642 642 643 /* 644 * Get all task in activity 645 * */ 646 $taskToActivity = Controller::find(array('concept' => 'taskToActivity'), false, array('filter' => array('AND', array('=', 'activity', $taskToActivity[0]['activity']), array('=', 'owner', Config::me('uidNumber'))), 'deepness' => 2)); 647 643 /* 644 * Get all task in activity 645 * */ 646 $taskToActivity = Controller::find(array('concept' => 'taskToActivity'), false, array('filter' => array('AND', array('=', 'activity', $taskToActivity[0]['activity']), array('=', 'owner', Config::me('uidNumber'))), 'deepness' => 2)); 647 648 648 if(!empty($activity)){ 649 649 $start = $params['startTime']; 650 650 $end = $params['endTime']; 651 651 foreach($taskToActivity as $t){ 652 653 654 if($t['task']['id'] != $params['id']){ 655 $start = $t['task']['startTime'] < $start ? $t['task']['startTime'] : $start; 656 $end = $t['task']['endTime'] > $end ? $t['task']['endTime'] : $end; 657 $isAllDay = (($isAllDay == 1) && ($t['task']['allDay'] == '1')) ? 1 : 0; 658 } 652 653 654 if($t['task']['id'] != $params['id']){ 655 $start = $t['task']['startTime'] < $start ? $t['task']['startTime'] : $start; 656 $end = $t['task']['endTime'] > $end ? $t['task']['endTime'] : $end; 657 $isAllDay = (($isAllDay == 1) && ($t['task']['allDay'] == '1')) ? 1 : 0; 658 } 659 659 } 660 660 … … 680 680 } 681 681 } 682 /* 683 * Clean historic not used 684 * */ 682 /* 683 * Clean historic not used 684 * */ 685 685 unset($criteria['historic']['endTime']); 686 686 unset($criteria['historic']['rangeEnd']); … … 771 771 } 772 772 } 773 } 774 775 static function autoImportCalendar(&$uri, &$params, &$criteria, $original){ 776 $autoCommit = Controller::service('PostgreSQL')->execResultSql('Select config_value FROM phpgw_config WHERE config_app = \'expressoCalendar\' AND config_name = \'expressoCalendar_autoImportCalendars\''); 777 778 779 if(isset($autoCommit[0]) && $autoCommit[0]['config_value'] == 'true') 780 { 781 if(isset($original['properties']) && isset($original['properties']['user']) && isset($original['properties']['isOrganizer']) && $original['properties']['isOrganizer'] != '1') 782 { 783 $defaultCalendar = Controller::find(array('concept' => 'modulePreference'), array('value') , array('filter' => array( 'and' , array('=' , 'name' , 'dafaultImportCalendar') , array('=' , 'module' , 'expressoCalendar') , array('=' , 'user' , $original['properties']['user']) )) ); 784 if(isset($defaultCalendar[0]) && $defaultCalendar[0]['value'] > 0) 785 { 786 Controller::create(array('concept' => 'calendarToSchedulable'), 787 array('schedulable' => $original['properties']['schedulable'], 788 'calendar' => $defaultCalendar[0]['value'] 789 ) 790 ); 791 } 792 } 793 } 773 } 774 775 static function autoImportCalendar(&$uri, &$params, &$criteria, $original){ 776 $autoCommit = Controller::service('PostgreSQL')->execResultSql('Select config_value FROM phpgw_config WHERE config_app = \'expressoCalendar\' AND config_name = \'expressoCalendar_autoImportCalendars\''); 777 778 779 if(isset($autoCommit[0]) && $autoCommit[0]['config_value'] == 'true') 780 { 781 if(isset($original['properties']) && isset($original['properties']['user']) && isset($original['properties']['isOrganizer']) && $original['properties']['isOrganizer'] != '1') 782 { 783 $defaultCalendar = Controller::find(array('concept' => 'modulePreference'), array('value') , array('filter' => array( 'and' , array('=' , 'name' , 'dafaultImportCalendar') , array('=' , 'module' , 'expressoCalendar') , array('=' , 'user' , $original['properties']['user']) )) ); 784 if(isset($defaultCalendar[0]) && $defaultCalendar[0]['value'] > 0) 785 { 786 Controller::create(array('concept' => 'calendarToSchedulable'), 787 array('schedulable' => $original['properties']['schedulable'], 788 'calendar' => $defaultCalendar[0]['value'] 789 ) 790 ); 791 } 792 } 793 } 794 794 } 795 795 … … 913 913 } 914 914 915 public function getCalendarTask( $task ){ 916 917 $sql = 'select co.calendar_id as "calendar" from calendar_to_calendar_object as "co", calendar_signature as "cs" where cs.user_uidnumber = '. Config::me('uidNumber') 918 .' AND cs.is_owner = 1 AND cs.calendar_id = co.calendar_id AND co.calendar_object_id = '. $task; 919 920 921 $returns = Controller::service('PostgreSQL')->execResultSql($sql); 922 923 return $returns[0]['calendar']; 924 } 925 915 public function getCalendarTask( $task ){ 916 917 $sql = 'select co.calendar_id as "calendar" from calendar_to_calendar_object as "co", calendar_signature as "cs" where cs.user_uidnumber = '. Config::me('uidNumber') 918 .' AND cs.is_owner = 1 AND cs.calendar_id = co.calendar_id AND co.calendar_object_id = '. $task; 919 920 921 $returns = Controller::service('PostgreSQL')->execResultSql($sql); 922 923 return $returns[0]['calendar']; 924 } 925 926 926 //TODO: Remover apos suporte a deepness na api 927 927 public function deepnessFindTask(&$uri, &$result, &$criteria, $original) { 928 if (isset($criteria['deepness']) && $criteria['deepness'] != 0){ 929 930 foreach($result as &$value){ 931 928 if (isset($criteria['deepness']) && $criteria['deepness'] != 0){ 929 930 foreach($result as &$value){ 931 932 932 $value['task'] = Controller::read(array('concept' => 'schedulable', 'id' => $value['task'])); 933 $value['task']['calendar'] = self::getCalendarTask( $value['task']['id'] ); 934 } 935 936 return $result; 937 } 933 $value['task']['calendar'] = self::getCalendarTask( $value['task']['id'] ); 934 } 935 936 return $result; 937 } 938 938 } 939 939 … … 972 972 .'calendar_object.tzid as "timezone", calendar_to_calendar_object.calendar_id as "calendar" ' 973 973 .'FROM calendar_object, calendar_to_calendar_object ' 974 .'WHERE ( calendar_object.id = '. $criteria['schedulable'] .' AND calendar_to_calendar_object.calendar_object_id = calendar_object.id' 975 .' AND calendar_to_calendar_object.calendar_id IN (select calendar_id from calendar_signature where calendar_signature.user_uidnumber = '. Config::me('uidNumber') .' ) )'; 974 .'WHERE ( calendar_object.id = '. $criteria['schedulable'] .' AND calendar_to_calendar_object.calendar_object_id = calendar_object.id' 975 .' AND calendar_to_calendar_object.calendar_id IN (select calendar_id from calendar_signature where calendar_signature.user_uidnumber = '. Config::me('uidNumber') .' ) )'; 976 976 977 977 $params = Controller::service('PostgreSQL')->execResultSql($sql); 978 979 foreach( $params as &$event ){ 980 981 982 if(isset( $event['repeat'] ) && isset( $event['repeat']['id'] ) ){ 983 $occurrences = Controller::service('PostgreSQL')->execResultSql('SELECT DISTINCT occurrence FROM calendar_object as "c", calendar_repeat_occurrence as "o", calendar_repeat as "r" WHERE r.object_id = '. $event['id'] .' AND o.repeat_id = r.id ' ); 984 985 if($occurrences){ 986 $event['occurrences'] = array(); 987 988 foreach($occurrences as $o) 989 $event['occurrences'][] = $o['occurrence']; 990 }else 991 unset( $event['occurrences'] ); 992 } 993 } 978 979 foreach( $params as &$event ){ 980 981 982 if(isset( $event['repeat'] ) && isset( $event['repeat']['id'] ) ){ 983 $occurrences = Controller::service('PostgreSQL')->execResultSql('SELECT DISTINCT occurrence FROM calendar_object as "c", calendar_repeat_occurrence as "o", calendar_repeat as "r" WHERE r.object_id = '. $event['id'] .' AND o.repeat_id = r.id ' ); 984 985 if($occurrences){ 986 $event['occurrences'] = array(); 987 988 foreach($occurrences as $o) 989 $event['occurrences'][] = $o['occurrence']; 990 }else 991 unset( $event['occurrences'] ); 992 } 993 } 994 994 995 995 $params = self::deepnessFindEvent($uri, $params, $criteria, $original); … … 1047 1047 if(isset( $v['occurrences'] ) && count( $v['occurrences'] ) > 0){ 1048 1048 1049 $date->setTimestamp((int) ($v['startTime'] / 1000)); 1050 $date->setTimezone( new DateTimeZone( $v['timezone'] )); 1051 1049 $date->setTimestamp((int) ($v['startTime'] / 1000)); 1050 $date->setTimezone( new DateTimeZone( $v['timezone'] )); 1051 1052 1052 foreach( $result[$i]['occurrences'] as &$o){ 1053 1053 1054 $o = ($o + $date->getOffset()).'000'; 1054 $o = ($o + $date->getOffset()).'000'; 1055 1055 1056 1056 } … … 1421 1421 1422 1422 Controller::delete(array('concept' => 'calendar', 'id' => $signature['calendar'])); 1423 1424 $autoCommit = Controller::service('PostgreSQL')->execResultSql('Select config_value FROM phpgw_config WHERE config_app = \'expressoCalendar\' AND config_name = \'expressoCalendar_autoImportCalendars\''); 1425 1426 if(isset($autoCommit[0]) && $autoCommit[0]['config_value'] == 'true') 1427 { 1428 $defaultCalendar = Controller::find(array('concept' => 'modulePreference'), array('value','id') , array('filter' => array( 'and' , array('=' , 'name' , 'dafaultImportCalendar') , array('=' , 'module' , 'expressoCalendar') , array('=' , 'user' , $signature['user']) )) ); 1429 1430 1431 if(isset($defaultCalendar[0]) && $defaultCalendar[0]['value'] == $signature['calendar'] ) 1432 { 1433 Controller::delete(array('concept' => 'modulePreference', 'id' => $defaultCalendar[0]['id'])); 1434 } 1435 } 1436 1437 $permissions = Controller::find(array('concept' => 'calendarToPermission'), array('id'), array('filter' => array('=', 'calendar', $signature['calendar']))); 1438 1423 1424 $autoCommit = Controller::service('PostgreSQL')->execResultSql('Select config_value FROM phpgw_config WHERE config_app = \'expressoCalendar\' AND config_name = \'expressoCalendar_autoImportCalendars\''); 1425 1426 if(isset($autoCommit[0]) && $autoCommit[0]['config_value'] == 'true') 1427 { 1428 $defaultCalendar = Controller::find(array('concept' => 'modulePreference'), array('value','id') , array('filter' => array( 'and' , array('=' , 'name' , 'dafaultImportCalendar') , array('=' , 'module' , 'expressoCalendar') , array('=' , 'user' , $signature['user']) )) ); 1429 1430 1431 if(isset($defaultCalendar[0]) && $defaultCalendar[0]['value'] == $signature['calendar'] ) 1432 { 1433 Controller::delete(array('concept' => 'modulePreference', 'id' => $defaultCalendar[0]['id'])); 1434 } 1435 } 1436 1437 $permissions = Controller::find(array('concept' => 'calendarToPermission'), array('id'), array('filter' => array('=', 'calendar', $signature['calendar']))); 1438 1439 1439 if($permissions && count($permissions) > 0){ 1440 1440 $ids = array(); … … 1583 1583 } 1584 1584 1585 if($i == 0) 1586 { 1587 $pref = array(); 1588 $pref['user'] = $_SESSION['wallet']['user']['uidNumber']; 1589 $pref['value'] = $calCreated['id']; 1590 $pref['name'] = 'dafaultImportCalendar' ; 1591 $pref['module'] = 'expressoCalendar'; 1592 Controller::create(array('concept' => 'modulePreference'), $pref); 1593 } 1594 1585 if($i == 0) 1586 { 1587 $pref = array(); 1588 $pref['user'] = $_SESSION['wallet']['user']['uidNumber']; 1589 $pref['value'] = $calCreated['id']; 1590 $pref['name'] = 'dafaultImportCalendar' ; 1591 $pref['module'] = 'expressoCalendar'; 1592 Controller::create(array('concept' => 'modulePreference'), $pref); 1593 } 1594 1595 1595 } 1596 1596 } else { … … 1614 1614 1615 1615 $sigCreated = Controller::create(array('concept' => 'calendarSignature'), $sig); 1616 1617 1618 $pref = array(); 1619 $pref['user'] = $_SESSION['wallet']['user']['uidNumber']; 1620 $pref['value'] = $calCreated['id']; 1621 $pref['name'] = 'dafaultImportCalendar' ; 1622 $pref['module'] = 'expressoCalendar'; 1623 Controller::create(array('concept' => 'modulePreference'), $pref); 1624 1625 1616 1617 1618 $pref = array(); 1619 $pref['user'] = $_SESSION['wallet']['user']['uidNumber']; 1620 $pref['value'] = $calCreated['id']; 1621 $pref['name'] = 'dafaultImportCalendar' ; 1622 $pref['module'] = 'expressoCalendar'; 1623 Controller::create(array('concept' => 'modulePreference'), $pref); 1624 1625 1626 1626 } 1627 1627 … … 1634 1634 //TODO - Criar conceito separado para participantes externos e remover o criterio notExternal 1635 1635 public function findExternalPaticipants(&$uri, &$result, &$criteria, $original) { 1636 if (Config::me('uidNumber') && !isset($criteria['notExternal'])) { 1637 $newuri['concept'] = 'user'; 1638 $newuri['service'] = 'PostgreSQL'; 1639 1640 $newCriteria = $original['criteria']; 1641 $valid = true; 1642 1643 $newCriteria['filter'] = array('AND', $newCriteria['filter'], array('=', 'owner', Config::me('uidNumber'))); 1644 $externalUsers = Controller::find($newuri, $original['properties'] ? $original['properties'] : null, $newCriteria ); 1645 1646 if (!is_array($result)) 1647 $result = array(); 1648 1649 if (is_array($externalUsers)) { 1650 foreach ($externalUsers as $i => $v) 1651 $externalUsers[$i]['isExternal'] = '1'; 1652 } 1653 else 1654 $externalUsers = array(); 1655 1656 $result = array_merge($result, $externalUsers); 1657 1658 1659 if(isset($original['criteria']['externalCatalogs']) && $original['criteria']['externalCatalogs'] == true) 1660 { 1661 $externalCatalogs = self::findExternalCatalogContacts($original['criteria']['filter'][2]); 1662 1663 foreach($externalCatalogs as $i => $v) 1664 { 1665 $exist = false; 1666 foreach($result as $vv) 1667 { 1668 if($v['mail'] == $vv['mail'] ) 1669 $exist = true; 1670 } 1671 if(!$exist) 1672 $result[] = $v; 1673 } 1674 } 1675 1676 1677 if(isset($original['criteria']['personalContacts']) && $original['criteria']['personalContacts'] == true) 1678 { 1679 $personalContacts = self::findPersonalContacts($original['criteria']['filter'][2]); 1680 1681 foreach($personalContacts as $i => $v) 1682 { 1683 $exist = false; 1684 foreach($result as $vv) 1685 { 1686 if($v['mail'] == $vv['mail'] ) 1687 $exist = true; 1688 } 1689 if(!$exist) 1690 $result[] = $v; 1691 } 1692 } 1693 1694 return $result ; 1695 } 1636 if (Config::me('uidNumber') && !isset($criteria['notExternal'])) { 1637 $newuri['concept'] = 'user'; 1638 $newuri['service'] = 'PostgreSQL'; 1639 1640 $newCriteria = $original['criteria']; 1641 $valid = true; 1642 1643 $newCriteria['filter'] = array('AND', $newCriteria['filter'], array('=', 'owner', Config::me('uidNumber'))); 1644 $externalUsers = Controller::find($newuri, $original['properties'] ? $original['properties'] : null, $newCriteria ); 1645 1646 if (!is_array($result)) 1647 $result = array(); 1648 1649 if (is_array($externalUsers)) { 1650 foreach ($externalUsers as $i => $v) 1651 $externalUsers[$i]['isExternal'] = '1'; 1652 } 1653 else 1654 $externalUsers = array(); 1655 1656 $result = array_merge($result, $externalUsers); 1657 1658 1659 if(isset($original['criteria']['externalCatalogs']) && $original['criteria']['externalCatalogs'] == true) 1660 { 1661 $externalCatalogs = self::findExternalCatalogContacts($original['criteria']['filter'][2]); 1662 1663 foreach($externalCatalogs as $i => $v) 1664 { 1665 $exist = false; 1666 foreach($result as $vv) 1667 { 1668 if($v['mail'] == $vv['mail'] ) 1669 $exist = true; 1670 } 1671 if(!$exist) 1672 $result[] = $v; 1673 } 1674 } 1675 1676 1677 if(isset($original['criteria']['personalContacts']) && $original['criteria']['personalContacts'] == true) 1678 { 1679 $personalContacts = self::findPersonalContacts($original['criteria']['filter'][2]); 1680 1681 foreach($personalContacts as $i => $v) 1682 { 1683 $exist = false; 1684 foreach($result as $vv) 1685 { 1686 if($v['mail'] == $vv['mail'] ) 1687 $exist = true; 1688 } 1689 if(!$exist) 1690 $result[] = $v; 1691 } 1692 } 1693 1694 return $result ; 1695 } 1696 1696 } 1697 1697 … … 1812 1812 && ($timestamp >= ~PHP_INT_MAX); 1813 1813 } 1814 1815 static function findExternalCatalogContacts( $search ) 1816 { 1817 $result = array(); 1818 $external_srcs = array(); 1819 $external_mappings = array(); 1820 1821 include_once dirname(__DIR__) .'/../../../contactcenter/setup/external_catalogs.inc.php'; 1822 1823 $search = str_replace(' ', '*', $search) ; 1824 $search = '*' . $search . '*'; 1825 1826 foreach($external_srcs as $i => $v) 1827 { 1828 $con = ldap_connect($v['host']); 1829 1830 ldap_set_option( $con , LDAP_OPT_PROTOCOL_VERSION , 3 ); 1831 1832 if( isset( $v['acc'] ) && isset( $v['pw'] ) ) 1833 ldap_bind( $con, $v['acc'], $v['pw'] ); 1834 1835 $fields = array(); 1836 $fields[] = $external_mappings[$i]['contact.names_ordered'][0]; 1837 $fields[] = $external_mappings[$i]['contact.connection.typeof_connection.contact_connection_type_name']['email'][0]; 1838 1839 $ldapFilter = '(&(objectClass='.$v['obj'].')(|('.$fields[0].'='.$search.')('.$fields[1].'='.$search.')))'; 1840 $sr = ldap_search( $con, utf8_encode($v['dn']) , $ldapFilter , $fields ); 1841 if($sr) 1842 { 1843 $search = ldap_get_entries($con, $sr); 1844 1845 for ($j = 0; $j < $search["count"]; ++$j) { 1846 $tmp = array(); 1847 $tmp['name'] = $search[$j][$fields[0]][0]; 1848 $tmp['mail'] = $search[$j][$fields[1]][0]; 1849 $tmp['isExternal'] = '1'; 1850 1851 $result[] = $tmp; 1852 } 1853 } 1854 } 1855 return $result; 1856 } 1857 1858 static function findPersonalContacts($search_for) 1859 { 1860 1861 $query = 'select' 1862 1863 . ' C.id_connection,' 1864 . ' A.id_contact,' 1865 . ' A.names_ordered,' 1866 . ' A.alias,' 1867 . ' A.birthdate,' 1868 . ' A.sex,' 1869 . ' A.pgp_key,' 1870 . ' A.notes,' 1871 . ' A.web_page,' 1872 . ' A.corporate_name,' 1873 . ' A.job_title,' 1874 . ' A.department,' 1875 . ' C.connection_name,' 1876 . ' C.connection_value,' 1877 . ' B.id_typeof_contact_connection,' 1878 . ' phpgw_cc_contact_addrs.id_typeof_contact_address,' 1879 . ' phpgw_cc_addresses.address1,' 1880 . ' phpgw_cc_addresses.address2,' 1881 . ' phpgw_cc_addresses.complement,' 1882 . ' phpgw_cc_addresses.postal_code,' 1883 . ' phpgw_cc_city.city_name,' 1884 . ' phpgw_cc_state.state_name,' 1885 . ' phpgw_cc_addresses.id_country' 1886 ; 1887 1888 $query .= ' from' 1889 . ' phpgw_cc_contact A' 1890 . ' inner join phpgw_cc_contact_conns B on ( A.id_contact = B.id_contact )' 1891 . ' inner join phpgw_cc_connections C on ( B.id_connection = C.id_connection )' 1892 . ' left join phpgw_cc_contact_addrs on ( A.id_contact = phpgw_cc_contact_addrs.id_contact )' 1893 . ' left join phpgw_cc_addresses on ( phpgw_cc_contact_addrs.id_address = phpgw_cc_addresses.id_address )' 1894 . ' left join phpgw_cc_city on ( phpgw_cc_addresses.id_city = phpgw_cc_city.id_city )' 1895 . ' left join phpgw_cc_state on ( phpgw_cc_addresses.id_state = phpgw_cc_state.id_state)' 1896 ; 1897 1898 $query .= ' where ' 1899 . 'A.id_owner=' . Config::me('uidNumber') 1900 . ' and lower(translate(names_ordered, \'áàâãäéèêëíìïóòôõöúùûüÁÀÂÃÄÉÈÊËÍÌÏÓÒÔÕÖÚÙÛÜçÇñÑ\',\'aaaaaeeeeiiiooooouuuuAAAAAEEEEIIIOOOOOUUUUcCnN\'))' 1901 . ' LIKE lower(translate(\'%' . $search_for . '%\', \'áàâãäéèêëíìïóòôõöúùûüÁÀÂÃÄÉÈÊËÍÌÏÓÒÔÕÖÚÙÛÜçÇñÑ\',\'aaaaaeeeeiiiooooouuuuAAAAAEEEEIIIOOOOOUUUUcCnN\'))'; 1902 1903 //Se não existir parametro na busca, limita os usuarios no resultado da pesquisa. 1904 if(!$search_for){ 1905 $query .= 'LIMIT 11'; 1906 } 1907 1908 $r = Controller::service('PostgreSQL')->execResultSql($query); 1909 1910 1911 $all_contacts = array(); 1912 foreach( $r as $i => $object ) 1913 { 1914 if ( ! array_key_exists( $object[ 'id_contact' ], $all_contacts ) ) 1915 $all_contacts[ $object[ 'id_contact' ] ] = array( 1916 'connection_value' => '', 1917 'telephonenumber' => '', 1918 'mobile' => '', 1919 'cn' => '', 1920 'id_contact' => '', 1921 'id_connection' => '', 1922 'alias' => '', 1923 'birthdate' => '', 1924 'sex' => '', 1925 'pgp_key' => '', 1926 'notes' => '', 1927 'web_page' => '', 1928 'corporate_name' => '', 1929 'job_title' => '', 1930 'department' => '', 1931 'mail' => '', 1932 'aternative-mail' => '', 1933 'business-phone' => '', 1934 'business-address' => '', 1935 'business-complement' => '', 1936 'business-postal_code' => '', 1937 'business-city_name' => '', 1938 'business-state_name' => '', 1939 'business-id_country' => '', 1940 'business-fax' => '', 1941 'business-pager' => '', 1942 'business-mobile' => '', 1943 'business-address-2' => '', 1944 'home-phone' => '', 1945 'home-address' => '', 1946 'home-complement' => '', 1947 'home-postal_code' => '', 1948 'home-city_name' => '', 1949 'home-state_name' => '', 1950 'home-fax' => '', 1951 'home-pager' => '', 1952 'home-address-2' => '' 1953 1954 1955 ); 1956 1957 switch( $object[ 'id_typeof_contact_connection' ] ) 1958 { 1959 case 1 : 1960 $all_contacts[ $object[ 'id_contact' ] ][ 'connection_value' ] = $object[ 'connection_value' ]; 1961 switch ( strtolower( $object[ 'connection_name' ] ) ) 1962 { 1963 case 'alternativo' : 1964 $all_contacts[ $object[ 'id_contact' ] ][ 'alternative-mail' ] = $object[ 'connection_value' ]; 1965 break; 1966 case 'principal' : 1967 $all_contacts[ $object[ 'id_contact' ] ][ 'mail' ] = $object[ 'connection_value' ]; 1968 break; 1969 } 1970 break; 1971 case 2 : 1972 $all_contacts[ $object[ 'id_contact' ] ][ 'telephonenumber' ] = $object[ 'connection_value' ]; 1973 switch ( strtolower( $object[ 'connection_name' ] ) ) 1974 { 1975 case 'casa' : 1976 $all_contacts[ $object[ 'id_contact' ] ][ 'home-phone' ] = $object[ 'connection_value' ]; 1977 break; 1978 case 'celular' : 1979 $all_contacts[ $object[ 'id_contact' ] ][ 'mobile' ] = $object[ 'connection_value' ]; 1980 break; 1981 case 'trabalho' : 1982 $all_contacts[ $object[ 'id_contact' ] ][ 'business-phone' ] = $object[ 'connection_value' ]; 1983 break; 1984 case 'fax' : 1985 $all_contacts[ $object[ 'id_contact' ] ][ 'home-fax' ] = $object[ 'connection_value' ]; 1986 break; 1987 case 'pager' : 1988 $all_contacts[ $object[ 'id_contact' ] ][ 'home-pager' ] = $object[ 'connection_value' ]; 1989 break; 1990 case 'celular corporativo' : 1991 $all_contacts[ $object[ 'id_contact' ] ][ 'business-mobile' ] = $object[ 'connection_value' ]; 1992 break; 1993 case 'pager corporativo' : 1994 $all_contacts[ $object[ 'id_contact' ] ][ 'business-pager' ] = $object[ 'connection_value' ]; 1995 break; 1996 case 'fax corporativo' : 1997 $all_contacts[ $object[ 'id_contact' ] ][ 'business-fax' ] = $object[ 'connection_value' ]; 1998 break; 1999 } 2000 break; 2001 } 2002 2003 $all_contacts[ $object[ 'id_contact' ] ][ 'cn' ] = utf8_encode($object[ 'names_ordered' ]); 2004 $all_contacts[ $object[ 'id_contact' ] ][ 'id_contact' ] = $object[ 'id_contact' ]; 2005 $all_contacts[ $object[ 'id_contact' ] ][ 'id_connection' ] = $object[ 'id_connection' ]; 2006 $all_contacts[ $object[ 'id_contact' ] ][ 'alias' ] = $object[ 'alias' ]; 2007 $all_contacts[ $object[ 'id_contact' ] ][ 'birthdate' ] = $object[ 'birthdate' ];2008 $all_contacts[ $object[ 'id_contact' ] ][ 'sex' ] = $object[ 'sex' ];2009 $all_contacts[ $object[ 'id_contact' ] ][ 'pgp_key' ] = $object[ 'pgp_key' ];2010 $all_contacts[ $object[ 'id_contact' ] ][ 'notes' ] = $object[ 'notes' ]; 2011 $all_contacts[ $object[ 'id_contact' ] ][ 'web_page' ] = $object[ 'web_page' ];2012 $all_contacts[ $object[ 'id_contact' ] ][ 'corporate_name' ]= $object[ 'corporate_name' ]; 2013 $all_contacts[ $object[ 'id_contact' ] ][ 'job_title' ] = $object[ 'job_title' ];2014 $all_contacts[ $object[ 'id_contact' ] ][ 'department' ] = $object[ 'department' ]; 2015 2016 switch( $object[ 'id_typeof_contact_address' ] ) 2017 { 2018 case 1 : 2019 $all_contacts[ $object[ 'id_contact' ] ][ 'business-address' ] = $object[ 'address1' ]; 2020 $all_contacts[ $object[ 'id_contact' ] ][ 'business-address-2' ] = $object[ 'address2' ]; 2021 $all_contacts[ $object[ 'id_contact' ] ][ 'business-complement' ] = $object[ 'complement' ]; 2022 $all_contacts[ $object[ 'id_contact' ] ][ 'business-postal_code' ] = $object[ 'postal_code' ]; 2023 $all_contacts[ $object[ 'id_contact' ] ][ 'business-city_name' ] = $object[ 'city_name' ]; 2024 $all_contacts[ $object[ 'id_contact' ] ][ 'business-state_name' ] = $object[ 'state_name' ]; 2025 $all_contacts[ $object[ 'id_contact' ] ][ 'business-id_country' ] = $object[ 'id_country' ]; 2026 break; 2027 case 2 : 2028 $all_contacts[ $object[ 'id_contact' ] ][ 'home-address' ] = $object[ 'address1' ]; 2029 $all_contacts[ $object[ 'id_contact' ] ][ 'home-address-2' ] = $object[ 'address2' ]; 2030 $all_contacts[ $object[ 'id_contact' ] ][ 'home-complement' ] = $object[ 'complement' ]; 2031 $all_contacts[ $object[ 'id_contact' ] ][ 'home-postal_code' ] = $object[ 'postal_code' ]; 2032 $all_contacts[ $object[ 'id_contact' ] ][ 'home-city_name' ] = $object[ 'city_name' ]; 2033 $all_contacts[ $object[ 'id_contact' ] ][ 'home-state_name' ] = $object[ 'state_name' ]; 2034 $all_contacts[ $object[ 'id_contact' ] ][ 'home-id_country' ] = $object[ 'id_country' ]; 2035 break; 2036 } 2037 } 2038 $all = array_values($all_contacts); 2039 2040 $result = array(); 2041 foreach($all as $i => $v) 2042 { 2043 if(!$v['mail']) continue; 2044 2045 $tmp = array(); 2046 $tmp['mail'] = $v['mail']; 2047 $tmp['name'] = $v['cn']; 2048 $tmp['isExternal'] = '1'; 2049 $result[] = $tmp; 2050 } 2051 2052 return $result; 2053 2054 } 1814 1815 static function findExternalCatalogContacts( $search ) 1816 { 1817 $result = array(); 1818 $external_srcs = array(); 1819 $external_mappings = array(); 1820 1821 include_once dirname(__DIR__) .'/../../../contactcenter/setup/external_catalogs.inc.php'; 1822 1823 $search = str_replace(' ', '*', $search) ; 1824 $search = '*' . $search . '*'; 1825 1826 foreach($external_srcs as $i => $v) 1827 { 1828 $con = ldap_connect($v['host']); 1829 1830 ldap_set_option( $con , LDAP_OPT_PROTOCOL_VERSION , 3 ); 1831 1832 if( isset( $v['acc'] ) && isset( $v['pw'] ) ) 1833 ldap_bind( $con, $v['acc'], $v['pw'] ); 1834 1835 $fields = array(); 1836 $fields[] = $external_mappings[$i]['contact.names_ordered'][0]; 1837 $fields[] = $external_mappings[$i]['contact.connection.typeof_connection.contact_connection_type_name']['email'][0]; 1838 1839 $ldapFilter = '(&(objectClass='.$v['obj'].')(|('.$fields[0].'='.$search.')('.$fields[1].'='.$search.')))'; 1840 $sr = ldap_search( $con, utf8_encode($v['dn']) , $ldapFilter , $fields ); 1841 if($sr) 1842 { 1843 $search = ldap_get_entries($con, $sr); 1844 1845 for ($j = 0; $j < $search["count"]; ++$j) { 1846 $tmp = array(); 1847 $tmp['name'] = $search[$j][$fields[0]][0]; 1848 $tmp['mail'] = $search[$j][$fields[1]][0]; 1849 $tmp['isExternal'] = '1'; 1850 1851 $result[] = $tmp; 1852 } 1853 } 1854 } 1855 return $result; 1856 } 1857 1858 static function findPersonalContacts($search_for) 1859 { 1860 1861 $query = 'select' 1862 1863 . ' C.id_connection,' 1864 . ' A.id_contact,' 1865 . ' A.names_ordered,' 1866 . ' A.alias,' 1867 . ' A.birthdate,' 1868 . ' A.sex,' 1869 . ' A.pgp_key,' 1870 . ' A.notes,' 1871 . ' A.web_page,' 1872 . ' A.corporate_name,' 1873 . ' A.job_title,' 1874 . ' A.department,' 1875 . ' C.connection_name,' 1876 . ' C.connection_value,' 1877 . ' B.id_typeof_contact_connection,' 1878 . ' phpgw_cc_contact_addrs.id_typeof_contact_address,' 1879 . ' phpgw_cc_addresses.address1,' 1880 . ' phpgw_cc_addresses.address2,' 1881 . ' phpgw_cc_addresses.complement,' 1882 . ' phpgw_cc_addresses.postal_code,' 1883 . ' phpgw_cc_city.city_name,' 1884 . ' phpgw_cc_state.state_name,' 1885 . ' phpgw_cc_addresses.id_country' 1886 ; 1887 1888 $query .= ' from' 1889 . ' phpgw_cc_contact A' 1890 . ' inner join phpgw_cc_contact_conns B on ( A.id_contact = B.id_contact )' 1891 . ' inner join phpgw_cc_connections C on ( B.id_connection = C.id_connection )' 1892 . ' left join phpgw_cc_contact_addrs on ( A.id_contact = phpgw_cc_contact_addrs.id_contact )' 1893 . ' left join phpgw_cc_addresses on ( phpgw_cc_contact_addrs.id_address = phpgw_cc_addresses.id_address )' 1894 . ' left join phpgw_cc_city on ( phpgw_cc_addresses.id_city = phpgw_cc_city.id_city )' 1895 . ' left join phpgw_cc_state on ( phpgw_cc_addresses.id_state = phpgw_cc_state.id_state)' 1896 ; 1897 1898 $query .= ' where ' 1899 . 'A.id_owner=' . Config::me('uidNumber') 1900 . ' and lower(translate(names_ordered, \'áàâãäéèêëíìïóòôõöúùûüÁÀÂÃÄÉÈÊËÍÌÏÓÒÔÕÖÚÙÛÜçÇñÑ\',\'aaaaaeeeeiiiooooouuuuAAAAAEEEEIIIOOOOOUUUUcCnN\'))' 1901 . ' LIKE lower(translate(\'%' . $search_for . '%\', \'áàâãäéèêëíìïóòôõöúùûüÁÀÂÃÄÉÈÊËÍÌÏÓÒÔÕÖÚÙÛÜçÇñÑ\',\'aaaaaeeeeiiiooooouuuuAAAAAEEEEIIIOOOOOUUUUcCnN\'))'; 1902 1903 //Se não existir parametro na busca, limita os usuarios no resultado da pesquisa. 1904 if(!$search_for){ 1905 $query .= 'LIMIT 11'; 1906 } 1907 1908 $r = Controller::service('PostgreSQL')->execResultSql($query); 1909 1910 1911 $all_contacts = array(); 1912 foreach( $r as $i => $object ) 1913 { 1914 if ( ! array_key_exists( $object[ 'id_contact' ], $all_contacts ) ) 1915 $all_contacts[ $object[ 'id_contact' ] ] = array( 1916 'connection_value' => '', 1917 'telephonenumber' => '', 1918 'mobile' => '', 1919 'cn' => '', 1920 'id_contact' => '', 1921 'id_connection' => '', 1922 'alias' => '', 1923 'birthdate' => '', 1924 'sex' => '', 1925 'pgp_key' => '', 1926 'notes' => '', 1927 'web_page' => '', 1928 'corporate_name' => '', 1929 'job_title' => '', 1930 'department' => '', 1931 'mail' => '', 1932 'aternative-mail' => '', 1933 'business-phone' => '', 1934 'business-address' => '', 1935 'business-complement' => '', 1936 'business-postal_code' => '', 1937 'business-city_name' => '', 1938 'business-state_name' => '', 1939 'business-id_country' => '', 1940 'business-fax' => '', 1941 'business-pager' => '', 1942 'business-mobile' => '', 1943 'business-address-2' => '', 1944 'home-phone' => '', 1945 'home-address' => '', 1946 'home-complement' => '', 1947 'home-postal_code' => '', 1948 'home-city_name' => '', 1949 'home-state_name' => '', 1950 'home-fax' => '', 1951 'home-pager' => '', 1952 'home-address-2' => '' 1953 1954 1955 ); 1956 1957 switch( $object[ 'id_typeof_contact_connection' ] ) 1958 { 1959 case 1 : 1960 $all_contacts[ $object[ 'id_contact' ] ][ 'connection_value' ] = $object[ 'connection_value' ]; 1961 switch ( strtolower( $object[ 'connection_name' ] ) ) 1962 { 1963 case 'alternativo' : 1964 $all_contacts[ $object[ 'id_contact' ] ][ 'alternative-mail' ] = $object[ 'connection_value' ]; 1965 break; 1966 case 'principal' : 1967 $all_contacts[ $object[ 'id_contact' ] ][ 'mail' ] = $object[ 'connection_value' ]; 1968 break; 1969 } 1970 break; 1971 case 2 : 1972 $all_contacts[ $object[ 'id_contact' ] ][ 'telephonenumber' ] = $object[ 'connection_value' ]; 1973 switch ( strtolower( $object[ 'connection_name' ] ) ) 1974 { 1975 case 'casa' : 1976 $all_contacts[ $object[ 'id_contact' ] ][ 'home-phone' ] = $object[ 'connection_value' ]; 1977 break; 1978 case 'celular' : 1979 $all_contacts[ $object[ 'id_contact' ] ][ 'mobile' ] = $object[ 'connection_value' ]; 1980 break; 1981 case 'trabalho' : 1982 $all_contacts[ $object[ 'id_contact' ] ][ 'business-phone' ] = $object[ 'connection_value' ]; 1983 break; 1984 case 'fax' : 1985 $all_contacts[ $object[ 'id_contact' ] ][ 'home-fax' ] = $object[ 'connection_value' ]; 1986 break; 1987 case 'pager' : 1988 $all_contacts[ $object[ 'id_contact' ] ][ 'home-pager' ] = $object[ 'connection_value' ]; 1989 break; 1990 case 'celular corporativo' : 1991 $all_contacts[ $object[ 'id_contact' ] ][ 'business-mobile' ] = $object[ 'connection_value' ]; 1992 break; 1993 case 'pager corporativo' : 1994 $all_contacts[ $object[ 'id_contact' ] ][ 'business-pager' ] = $object[ 'connection_value' ]; 1995 break; 1996 case 'fax corporativo' : 1997 $all_contacts[ $object[ 'id_contact' ] ][ 'business-fax' ] = $object[ 'connection_value' ]; 1998 break; 1999 } 2000 break; 2001 } 2002 2003 $all_contacts[ $object[ 'id_contact' ] ][ 'cn' ] = utf8_encode($object[ 'names_ordered' ]); 2004 $all_contacts[ $object[ 'id_contact' ] ][ 'id_contact' ] = $object[ 'id_contact' ]; 2005 $all_contacts[ $object[ 'id_contact' ] ][ 'id_connection' ] = $object[ 'id_connection' ]; 2006 $all_contacts[ $object[ 'id_contact' ] ][ 'alias' ] = $object[ 'alias' ]; 2007 $all_contacts[ $object[ 'id_contact' ] ][ 'birthdate' ] = $object[ 'birthdate' ]; 2008 $all_contacts[ $object[ 'id_contact' ] ][ 'sex' ] = $object[ 'sex' ]; 2009 $all_contacts[ $object[ 'id_contact' ] ][ 'pgp_key' ] = $object[ 'pgp_key' ]; 2010 $all_contacts[ $object[ 'id_contact' ] ][ 'notes' ] = $object[ 'notes' ]; 2011 $all_contacts[ $object[ 'id_contact' ] ][ 'web_page' ] = $object[ 'web_page' ]; 2012 $all_contacts[ $object[ 'id_contact' ] ][ 'corporate_name' ]= $object[ 'corporate_name' ]; 2013 $all_contacts[ $object[ 'id_contact' ] ][ 'job_title' ] = $object[ 'job_title' ]; 2014 $all_contacts[ $object[ 'id_contact' ] ][ 'department' ] = $object[ 'department' ]; 2015 2016 switch( $object[ 'id_typeof_contact_address' ] ) 2017 { 2018 case 1 : 2019 $all_contacts[ $object[ 'id_contact' ] ][ 'business-address' ] = $object[ 'address1' ]; 2020 $all_contacts[ $object[ 'id_contact' ] ][ 'business-address-2' ] = $object[ 'address2' ]; 2021 $all_contacts[ $object[ 'id_contact' ] ][ 'business-complement' ] = $object[ 'complement' ]; 2022 $all_contacts[ $object[ 'id_contact' ] ][ 'business-postal_code' ] = $object[ 'postal_code' ]; 2023 $all_contacts[ $object[ 'id_contact' ] ][ 'business-city_name' ] = $object[ 'city_name' ]; 2024 $all_contacts[ $object[ 'id_contact' ] ][ 'business-state_name' ] = $object[ 'state_name' ]; 2025 $all_contacts[ $object[ 'id_contact' ] ][ 'business-id_country' ] = $object[ 'id_country' ]; 2026 break; 2027 case 2 : 2028 $all_contacts[ $object[ 'id_contact' ] ][ 'home-address' ] = $object[ 'address1' ]; 2029 $all_contacts[ $object[ 'id_contact' ] ][ 'home-address-2' ] = $object[ 'address2' ]; 2030 $all_contacts[ $object[ 'id_contact' ] ][ 'home-complement' ] = $object[ 'complement' ]; 2031 $all_contacts[ $object[ 'id_contact' ] ][ 'home-postal_code' ] = $object[ 'postal_code' ]; 2032 $all_contacts[ $object[ 'id_contact' ] ][ 'home-city_name' ] = $object[ 'city_name' ]; 2033 $all_contacts[ $object[ 'id_contact' ] ][ 'home-state_name' ] = $object[ 'state_name' ]; 2034 $all_contacts[ $object[ 'id_contact' ] ][ 'home-id_country' ] = $object[ 'id_country' ]; 2035 break; 2036 } 2037 } 2038 $all = array_values($all_contacts); 2039 2040 $result = array(); 2041 foreach($all as $i => $v) 2042 { 2043 if(!$v['mail']) continue; 2044 2045 $tmp = array(); 2046 $tmp['mail'] = $v['mail']; 2047 $tmp['name'] = $v['cn']; 2048 $tmp['isExternal'] = '1'; 2049 $result[] = $tmp; 2050 } 2051 2052 return $result; 2053 2054 } 2055 2055 } 2056 2056 -
branches/2.5/prototype/modules/calendar/interceptors/Notifications.php
r8003 r8232 34 34 if (Config::regGet('noAlarm') !== false) 35 35 return; //Escapa notificações caso a flag de noAlarm esteja ativa. 36 37 36 37 38 38 39 39 $organizers = array(); //Cache Organizadores … … 99 99 $psUpdated = Controller::find(array('concept' => 'participant'), false, array('deepness' => '1', 'filter' => array('IN', 'id', $updated))); 100 100 101 101 102 102 foreach ($psUpdated as $i => $pUpdated) { 103 103 if ($pUpdated['isOrganizer'] == '1' && $pUpdated['delegatedFrom'] == '0'){ … … 491 491 492 492 if (count($part) > 0) 493 { 494 $from = false; 495 foreach($schedulable['participants'] as $v) 496 { 497 if($v['isOrganizer'] == 1) 498 $from = $v; 499 } 500 501 self::sendMail($data, $ical, implode(',', $part), $subject, 'notify_cancel_body' , $from ); 502 } 493 { 494 $from = false; 495 foreach($schedulable['participants'] as $v) 496 { 497 if($v['isOrganizer'] == 1) 498 $from = $v; 499 } 500 501 self::sendMail($data, $ical, implode(',', $part), $subject, 'notify_cancel_body' , $from ); 502 } 503 503 } 504 504 } … … 522 522 $method = 'CANCEL'; 523 523 $notificationType = 'Cancelamento de Calendario'; 524 $part = 'me'; 525 self::mountStruture($schedulable['id'], $schedulable, false, $data, $subject, $ical, $part, $method, $notificationType); 526 527 $from = false; 528 foreach($schedulable['participants'] as $v) 529 { 530 if($v['isOrganizer'] == 1) 531 $from = $v; 532 } 533 self::sendMail($data, $ical, $participant['user']['mail'], $subject, 'notify_cancel_body' , $from);524 $part = 'me'; 525 self::mountStruture($schedulable['id'], $schedulable, false, $data, $subject, $ical, $part, $method, $notificationType); 526 527 $from = false; 528 foreach($schedulable['participants'] as $v) 529 { 530 if($v['isOrganizer'] == 1) 531 $from = $v; 532 } 533 self::sendMail($data, $ical, $participant['user']['mail'], $subject, 'notify_cancel_body' , $from); 534 534 } 535 535 } -
branches/2.5/prototype/modules/calendar/js/activity.helpers.js
r7977 r8232 222 222 } 223 223 */ 224 UI.dialogs.addActivity.find('select[name="activityStatus"], input[name="allDay"]').removeAttr('disabled'); 225 canDiscardActivityDialog = true; 226 227 UI.dialogs.addActivity.children().find('form.form-addactivity').submit(); 228 UI.dialogs.addActivity.dialog("close"); 224 //Código o qual será chamado para o salvamento da Atividade. 225 var handler_save = function (objsToSave){ 226 UI.dialogs.addActivity.find('select[name="activityStatus"], input[name="allDay"]').removeAttr('disabled'); 227 canDiscardActivityDialog = true; 228 229 var activity_tst = DataLayer.form( UI.dialogs.addActivity.children().find('form') ); 230 if(objsToSave) 231 objsToSave[objsToSave.length] = activity_tst; 232 233 else 234 objsToSave = activity_tst; 235 DataLayer.put('schedulable', objsToSave); 236 237 UI.dialogs.addActivity.dialog("close"); 238 } 239 240 //Verifica se o grupo da atividade mudou 241 if (group.id != UI.dialogs.addActivity.children().find('form select[name="group"] :selected').val() && typeof group.id != 'undefined') { 242 //Janela de dialogo 243 $.Zebra_Dialog('Você alterou o grupo da atividade, deseja alterar também o grupo das tarefas pertencentes à essa atividade?', { 244 'type': 'question', 245 'overlay_opacity': '0.5', 246 'modal': true, 247 'buttons': ['Não Alterar', 'Alterar'], 248 'onClose': function(clicked) { 249 if(clicked == 'Não Alterar') { 250 251 handler_save(); 252 }else{ 253 var objsToSave = []; 254 //percorre as tarefas da atividade para verificar se o grupo mudou 255 for(var t in objActivity.tasks){ 256 if(typeof objActivity.tasks[t].group != 'undefined') 257 if (objActivity.tasks[t].group != UI.dialogs.addActivity.children().find('form select[name="group"] :selected').val()){ 258 objActivity.tasks[t].group = UI.dialogs.addActivity.children().find('form select[name="group"] :selected').val(); 259 objsToSave[objsToSave.length] = {'calendar' : objActivity.tasks[t].group, 'id': t}; 260 } 261 } 262 handler_save(objsToSave); 263 264 } 265 266 } 267 }); 268 269 270 } else { 271 handler_save(); 272 } 229 273 230 274 }).end() … … 259 303 ['=', 'type', '2'], 260 304 ['>=','startTime', $.now()], 261 ['in', 'calendar', [$('div.new-activity-win.active select[name="groupFilter"]').val()]] 305 ['in', 'calendar', [$('div.new-activity-win.active select[name="groupFilter"]').val()]] 262 306 ], criteria: {filterTasks: true, deepness: 2} 263 307 }; … … 410 454 updateActivity = false; 411 455 412 var idTask = UI.dialogs.addActivity.find('input[name="idActivity"]').val(); 413 414 getSchedulable( idTask ); 415 416 var objActivity = DataLayer.get('schedulable:activity', idTask ); 456 var idTask = UI.dialogs.addActivity.find('input[name="idActivity"]').val(); 457 458 getSchedulable( idTask ); 459 460 var objActivity = DataLayer.get('schedulable:activity', idTask ); 417 461 var blkAddTask = UI.dialogs.addActivity.find('#group_addactivity_details8'); 418 462 var blkAuto = UI.dialogs.addActivity.find('#group_addactivity_details1'); … … 673 717 text: false 674 718 }).click(function () { 675 676 var idTask = $(this).parents('li').find('input[name="idtask[]"]').val() 677 getSchedulable(idTask); 678 var task = DataLayer.get('schedulable:task', idTask); 679 taskDetails(task, true, '',true, null, true); 719 720 var idTask = $(this).parents('li').find('input[name="idtask[]"]').val() 721 getSchedulable(idTask); 722 var task = DataLayer.get('schedulable:task', idTask); 723 taskDetails(task, true, '',true, null, true); 680 724 }) 681 725 .addClass('tiny disable ui-button-disabled ui-state-disabled') -
branches/2.5/prototype/modules/calendar/js/calendar.codecs.js
r8051 r8232 75 75 Calendar.currentView = DataLayer.encode('schedulable:calendar', DataLayer.dispatch('modules/calendar/schedules', DataLayer.criteria('schedulable:calendar', {start: start,end: end})) ); //DataLayer.get( 'schedulable:calendar', {start: start,end: end} ); 76 76 } 77 if( !!Calendar.currentView[ signature.calendar.id ]) 78 { 79 if(signature.hidden == true ) 80 Calendar.currentView[ signature.calendar.id ].hidden = true; 81 else 82 Calendar.currentView[ signature.calendar.id ].hidden = false; 83 } 84 77 78 if( !!Calendar.currentView[ signature.calendar.id ]) 79 { 80 if(signature.hidden == true ) 81 Calendar.currentView[ signature.calendar.id ].hidden = true; 82 else 83 Calendar.currentView[ signature.calendar.id ].hidden = false; 84 } 85 85 86 var view = Calendar.currentView[ signature.calendar.id ]; 86 87 87 88 88 89 callback( view && !view.hidden ? view : [] ); 89 90 }, … … 211 212 212 213 Calendar.rerenderView(true); 213 if(updateActivity){ 214 215 DataLayer.remove('taskToActivity', false); 214 if(updateActivity){ 215 216 DataLayer.remove('taskToActivity', false); 216 217 refreshTaskActivity(); 217 } 218 218 } 219 219 220 }); 220 221 } … … 624 625 calendars: Calendar.calendars, 625 626 calendar: objEvent.calendar, 626 occurrences: objEvent.occurrences, 627 occurrences: objEvent.occurrences, 627 628 summary: objEvent.summary, 628 629 type: !!objEvent.type ? objEvent.type : 1, … … 632 633 startDate: Timezone.getDate( (objEvent.DayLigth ? objEvent.DayLigth.event.startTime : objEvent.startTime), 'start', objEvent.allDay , true), 633 634 startHour: objEvent.DayLigth ? Timezone.getHour( objEvent.DayLigth.event.startTime) : Timezone.formateHour( objEvent.startTime ), 634 startUnixTime: objEvent.DayLigth ? objEvent.DayLigth.event.startTime : objEvent.startTime, 635 startUnixTime: objEvent.DayLigth ? objEvent.DayLigth.event.startTime : objEvent.startTime, 635 636 endDate: Timezone.getDate( (objEvent.DayLigth ? objEvent.DayLigth.event.endTime : objEvent.endTime), 'end', objEvent.allDay , true), 636 637 endHour: objEvent.DayLigth ? Timezone.getHour( objEvent.DayLigth.event.endTime) : Timezone.formateHour( objEvent.endTime ), … … 832 833 location: objEvent.location, 833 834 category: objEvent.category, 834 calendar: objEvent.calendar, 835 calendar: objEvent.calendar, 835 836 taskStatus: objEvent.status, 836 837 groups: Calendar.groups, … … 840 841 description: objEvent.description, 841 842 timezone: objEvent.timezone, 842 startUnixTime: objEvent.startTime, 843 startUnixTime: objEvent.startTime, 843 844 timezones: Timezone.timezones, 844 845 percentage: (objEvent.percentage) ? objEvent.percentage : '0', … … 1189 1190 percentage: task.percentage, 1190 1191 priority: task.priority, 1191 summary: task.summary 1192 summary: task.summary, 1193 group: task.calendar 1192 1194 } 1193 1195 … … 1217 1219 percentage: (objEvent.percentage) ? objEvent.percentage : '0', 1218 1220 priority: objEvent.priority, 1219 startUnixTime: objEvent.startTime, 1221 startUnixTime: objEvent.startTime, 1220 1222 startDate: new Date( parseInt(objEvent.startTime) ).setTimezoneOffset( Timezone.timezone( objEvent.timezone ) ).toString( User.preferences.dateFormat ), 1221 1223 startHour: dateCalendar.formatDate(Timezone.getDateEvent(new Date( parseInt(objEvent.startTime)), objEvent.timezone, objEvent.calendar, objEvent.DayLigth, 'startTime'), User.preferences.hourFormat), … … 1637 1639 } 1638 1640 1639 var orderByStartUnixTime = function( a , b ) 1640 { 1641 return parseInt(a.startUnixTime) > parseInt(b.startUnixTime); 1642 } 1643 1641 var orderByStartUnixTime = function( a , b ) 1642 { 1643 return parseInt(a.startUnixTime) > parseInt(b.startUnixTime); 1644 } 1645 1644 1646 for (var i=0; i < res.length; i++) { 1645 1646 if(Calendar.currentView[res[i].calendar].hidden == true) 1647 continue; 1648 1647 1648 if(Calendar.currentView[res[i].calendar].hidden == true) 1649 continue; 1650 1649 1651 res[i].type = (res[i].type == '2' && !!res[i].tasks) ? '3' : res[i].type; 1650 1652 1651 1653 var startDate = Date.parseExact( res[i]['startDate'], User.preferences.dateFormat ); 1652 1654 var endDate = Date.parseExact( res[i]['endDate'], User.preferences.dateFormat ); 1653 1655 1654 1656 var duration = parseInt( endDate.getTime() ) - parseInt( startDate.getTime() ); 1655 1657 1656 1658 var occurrences = [ res[i].startUnixTime ]; 1657 1659 1658 1660 if( res[i].occurrences ) 1659 1661 { … … 1671 1673 }); 1672 1674 1673 res2.startUnixTime = parseInt(occurrences[ii]); 1674 1675 res2.startUnixTime = parseInt(occurrences[ii]); 1676 1675 1677 if(res[i].repeat) 1676 1678 res2.repeat = typeRepeat[res[i].repeat.frequency]; … … 1683 1685 1684 1686 dates[index].events.push(res2); 1685 1686 dates[index].events = dates[index].events.sort(orderByStartUnixTime); 1687 1688 dates[index].events = dates[index].events.sort(orderByStartUnixTime); 1687 1689 1688 1690 } … … 1812 1814 return (evt.editable == '1' ) ? 1813 1815 { 1816 selectable: true, 1814 1817 editable: true, 1815 selectable: true,1816 1818 className: 'fullcalendar-context-menu event-type-1 event-id-'+idEvent+' calendar-id-'+calendar.id+ (isRecurrence ? ' isRecurrence Recurrence-id-'+Recurrence : '') 1817 1819 } : { … … 1874 1876 occurrence: occurrences[i], 1875 1877 type: typeEvent, 1876 calendar: evt.calendar, 1877 unanswered: evt.unanswered, 1878 calendar: evt.calendar, 1879 unanswered: evt.unanswered, 1880 status: evt.status 1878 1881 }, (parseInt(typeEvent) == 1 ? eventEditable(evt.id, isRepeat, i ) : (parseInt(typeEvent) == 2 ? taskEditable(evt.id) : {editable: false, disableResizing: true, disableDragging: true})))); 1879 1882 } -
branches/2.5/prototype/modules/calendar/js/calendar.shared.js
r7217 r8232 75 75 }); 76 76 77 DataLayer.commit(); 78 UI.dialogs.sharedCalendar.dialog("close"); 77 DataLayer.commit(false, false, function(result){ 78 79 /* 80 * Force clean cache 81 * */ 82 DataLayer.storage.cache = {}; 83 UI.dialogs.sharedCalendar.dialog("close"); 84 85 }); 86 79 87 }; 80 88 … … 295 303 296 304 //Carrega os dados já cadastrados 297 var dataCurrent = DataLayer.get('calendarToPermission:detail', { 298 filter: ['=','calendar', calendarId] , 299 criteria: { 300 deepness: 2 301 } 302 }); 303 if(dataCurrent){ 304 for(var i = 0; i < dataCurrent.length; i++){ 305 if(dataCurrent[i].user == "0"){ 306 UI.dialogs.sharedCalendar.find('input[name="isPublic"]').attr('checked', 'checked') 307 .parent().find('.free-busy').toggleClass('hidden'); 308 if(dataCurrent[i].acl['busy']) 309 UI.dialogs.sharedCalendar.find('input[name="busy"]').attr('checked', 'checked'); 310 }else{ 311 currentUsers[dataCurrent[i].user.id] = true; 312 313 UI.dialogs.sharedCalendar.find('dd.user-list ul.user-list') 314 .append(DataLayer.render('templates/user_shared_add_itemlist.ejs', [{ 315 id: dataCurrent[i].user.id, 316 name: dataCurrent[i].user.name, 317 mail: dataCurrent[i].user.mail, 318 acl:dataCurrent[i].acl, 319 aclValue: dataCurrent[i].aclValues, 320 current: true, 321 idPermission: dataCurrent[i].id 322 }])) 323 .scrollTo('max'); 324 $('li.not-user').remove(); 325 callbackSharedCotactsAdd(); 326 327 for (var f in dataCurrent[i].acl){ 328 if(dataCurrent[i].acl[f]){ 329 UI.dialogs.sharedCalendar.find('.'+f+':last').toggleClass('attendee-permissions-change-button') 330 .find('span:first').toggleClass('attendee-permissions-change').end(); 331 } 332 } 333 } 334 } 335 } 305 var loadOldData = function (calendar) 306 { 307 UI.dialogs.sharedCalendar.find('dd.user-list ul.user-list').empty(); 308 309 var dataCurrent = DataLayer.get('calendarToPermission:detail', { 310 filter: ['=','calendar', calendar] , 311 criteria: { 312 deepness: 2 313 } 314 }); 315 316 if(dataCurrent){ 317 for(var i = 0; i < dataCurrent.length; i++){ 318 if(dataCurrent[i].user == "0"){ 319 UI.dialogs.sharedCalendar.find('input[name="isPublic"]').attr('checked', 'checked') 320 .parent().find('.free-busy').toggleClass('hidden'); 321 if(dataCurrent[i].acl['busy']) 322 UI.dialogs.sharedCalendar.find('input[name="busy"]').attr('checked', 'checked'); 323 }else{ 324 currentUsers[dataCurrent[i].user.id] = true; 325 326 UI.dialogs.sharedCalendar.find('dd.user-list ul.user-list') 327 .append(DataLayer.render('templates/user_shared_add_itemlist.ejs', [{ 328 id: dataCurrent[i].user.id, 329 name: dataCurrent[i].user.name, 330 mail: dataCurrent[i].user.mail, 331 acl:dataCurrent[i].acl, 332 aclValue: dataCurrent[i].aclValues, 333 current: true, 334 idPermission: dataCurrent[i].id 335 }])) 336 .scrollTo('max'); 337 $('li.not-user').remove(); 338 callbackSharedCotactsAdd(); 339 340 for (var f in dataCurrent[i].acl){ 341 if(dataCurrent[i].acl[f]){ 342 UI.dialogs.sharedCalendar.find('.'+f+':last').toggleClass('attendee-permissions-change-button') 343 .find('span:first').toggleClass('attendee-permissions-change').end(); 344 } 345 } 346 } 347 } 348 } 349 } 350 351 loadOldData(calendarId); 352 353 //Bind calendar select change 354 var select = UI.dialogs.sharedCalendar.find('select[name="calendar"]'); 355 select.change(function() { 356 loadOldData(select.val()); 357 }); 358 336 359 UI.dialogs.sharedCalendar.dialog('open'); 337 360 } … … 526 549 for (var i = 0; i < Calendar.signatures.length; i++) 527 550 if(Calendar.signatures[i].isOwner == "0"){ 551 552 /* 553 * Verificar se o Owner é um objeto caso ao contrário é realizado a busca e adicionado ao mesmo o uid 554 * */ 555 if (Calendar.signatures[i].permission.owner != "object"){ 556 557 var result = DataLayer.get('calendarToPermission', { 558 filter: ['AND', ['=','id', Calendar.signatures[i].permission.id]] , 559 criteria: { 560 deepness: 2 561 } 562 }, true); 563 564 Calendar.signatures[i].permission.owner = {}; 565 Calendar.signatures[i].permission.owner['uid'] = result[0].owner.uid; 566 567 } 568 528 569 var dataCurrent = Calendar.signatures[i].calendar; 529 570 currentCalendars[Calendar.signatures[i].permission.id] = { -
branches/2.5/prototype/modules/calendar/js/desktop.notification.js
r7693 r8232 5 5 initDesktopNotificationAddon: function(){ 6 6 if(useDesktopNotification()){ 7 7 if ($.cookie('no-notification') == 'true'){ 8 return false; 9 } 8 10 if (!window.webkitNotifications && $.browser.mozilla) 9 11 this.installDektopNotificationAddon(); 10 12 11 13 if(window.webkitNotifications && window.webkitNotifications.checkPermission()){ 12 14 if($.browser.safari){ 13 15 $.Zebra_Dialog('Deseja instalar o plugin de notificação desktop?', { 14 16 'custom_class': 'request-notification-permission', … … 19 21 20 22 $('div.ZebraDialog.request-notification-permission a').click(function() { 21 if($(this).html() == 'Sim') 23 if($(this).html() == 'Sim'){ 22 24 window.webkitNotifications.requestPermission(); 25 }else if ($(this).html() == 'Não'){ 26 $.cookie('no-notification','true'); 27 } 23 28 }); 24 29 }else 25 30 window.webkitNotifications.requestPermission(); 26 31 } 32 }else{ 33 $.cookie('no-notification',null); 27 34 } 28 35 }, … … 40 47 } 41 48 }; 42 49 ; 43 50 InstallTrigger.install(params); 44 45 51 return false; 46 52 }, -
branches/2.5/prototype/modules/calendar/js/helpers.js
r8059 r8232 111 111 var end = $("#calendar").fullCalendar('getView').visEnd.getTime()/1000; 112 112 var criteria = DataLayer.criteria("schedulable:calendar", {'start':start, 'end':end} ); 113 114 var data = DataLayer.encode('schedulable:print', DataLayer.dispatch('modules/calendar/schedules', criteria ) ); 113 114 var data = DataLayer.encode('schedulable:print', DataLayer.dispatch('modules/calendar/schedules', criteria ) ); 115 115 116 116 if($("#calendar").fullCalendar('getView').name == "month"){ … … 163 163 print.removeClass('fc-button-year'); 164 164 print.removeClass('fc-corner-left'); 165 print.removeClass('fc-state-active'); 165 print.removeClass('fc-state-active'); 166 166 print.find('.fc-button-content').html('Imprimir'); 167 167 $('.fc-header-right').append(print); … … 179 179 function eventDetails( objEvent, decoded, path, isMail, repeat, buttonClicked) 180 180 { 181 182 181 $('.qtip.qtip-blue').remove(); 183 182 184 183 attendees = {}; 185 186 if(!!objEvent.participants) 187 { 188 $.each(objEvent.participants ,function(index, value) { 189 190 var part = DataLayer.get('participant' , value ); 191 var user = DataLayer.get('user' , part.user ); 192 193 attendees[part.user] = user.name; 194 }); 195 } 196 184 185 if(!!objEvent.participants) 186 { 187 $.each(objEvent.participants ,function(index, value) { 188 189 var part = DataLayer.get('participant' , value ); 190 var user = DataLayer.get('user' , part.user ); 191 192 attendees[part.user] = user.name; 193 }); 194 } 195 197 196 if(path == undefined) 198 197 path = ""; 199 198 200 199 if( !decoded ) 201 objEvent = DataLayer.decode("schedulable:calendar", objEvent ); 202 203 var dtstamp = objEvent.dtstamp; 200 objEvent = DataLayer.decode("schedulable:calendar", objEvent ); 201 202 var dtstamp = objEvent.dtstamp; 204 203 if(!isMail) 205 objEvent = DataLayer.encode( "schedulable:preview", objEvent ); 206 if (!dtstamp) 207 var date = new Date(); 208 else 209 var date = new Date(parseInt(dtstamp)); 210 objEvent.creationDate = []; 211 objEvent.creationDate[0] = dateFormat(parseInt(dtstamp),'dd/mm/yyyy'); 212 objEvent.creationDate[1] = date.getHours(); 213 objEvent.creationDate[2] = date.getMinutes(); 214 204 objEvent = DataLayer.encode( "schedulable:preview", objEvent ); 205 if (!dtstamp) 206 var date = new Date(); 207 else 208 var date = new Date(parseInt(dtstamp)); 209 objEvent.creationDate = []; 210 objEvent.creationDate[0] = dateFormat(parseInt(dtstamp),'dd/mm/yyyy'); 211 objEvent.creationDate[1] = date.getHours(); 212 objEvent.creationDate[2] = date.getMinutes(); 213 215 214 if(typeof(objEvent.id) == 'undefined'){ 216 215 objEvent.alarms = Calendar.signatureOf[User.preferences.defaultCalendar || Calendar.calendarIds[0]].defaultAlarms || false; … … 270 269 }).click(function () { 271 270 var participant = DataLayer.get('participant' , $(this).parents('li').find('[type=checkbox]').val()); 272 DataLayer.remove('participant', participant.id); 271 DataLayer.remove('participant', participant.id); 272 273 273 if($(this).parent().find('.button.delegate').hasClass('attendee-permissions-change-button')){ 274 274 removeOthers(); … … 278 278 blkAddAtendee.find('option[value=1]').attr('selected','selected').trigger('change'); 279 279 } 280 280 281 $(this).parents('li').remove(); 281 282 282 283 if(blkAddAtendee.find(".attendee-list li").length == 1) 283 284 blkAddAtendee.find("li.not-attendee").removeClass('hidden'); 284 delete attendees[participant.user];285 delete attendees[participant.user]; 285 286 }) 286 287 .addClass('tiny disable ui-button-disabled ui-state-disabled') … … 467 468 } 468 469 ); 470 471 469 472 } 470 473 … … 487 490 $('.qtip.qtip-blue.qtip-active').qtip('destroy'); 488 491 attendees = {}; 492 DataLayer.rollback();//Limpa cache do datalayer 489 493 }, 490 494 beforeClose: function(event, ui) { … … 566 570 } 567 571 568 569 dateSameValue = function(){ 570 UI.dialogs.addEvent.find('input.start-date').datepicker({ 571 dateFormat: User.preferences.dateFormat.replace(/M/g, 'm').replace(/yyyy/g, 'yy'), 572 onSelect : function (selectedDate){ 573 endDate = $(".end-date").val(); 574 storeSelectedDate = selectedDate; 575 576 if ( User.preferences.dateFormat == "dd/MM/yyyy" || User.preferences.dateFormat == "dd-MM-yyyy" ) { 577 if ( User.preferences.dateFormat == "dd/MM/yyyy" ) { 578 selectedDate = selectedDate.split("/"); 579 endDate = endDate.split("/"); 580 } else if( User.preferences.dateFormat == "dd-MM-yyyy" ){ 581 selectedDate = selectedDate.split("-"); 582 endDate = endDate.split("-"); 583 } 584 585 newDt = new Date(selectedDate[2],selectedDate[1], selectedDate[0]); 586 endDate = new Date(endDate[2],endDate[1], endDate[0]); 587 588 } else if ( User.preferences.dateFormat == "MM/dd/yyyy" ) { 589 selectedDate = selectedDate.split("/"); 590 endDate = endDate.split("/"); 591 592 newDt = new Date(selectedDate[2],selectedDate[0], selectedDate[1]); 593 endDate = new Date(endDate[2],endDate[0], endDate[1]); 594 } 595 596 if( newDt > endDate ) 597 $(".end-date").val(storeSelectedDate); 598 }, 599 onClose: function(){ 600 UI.dialogs.addEvent.find(".end-date").val(UI.dialogs.addEvent.find(".start-date").val()); 601 } 602 }); 603 } 604 572 573 dateSameValue = function(){ 574 UI.dialogs.addEvent.find('input.start-date').datepicker({ 575 dateFormat: User.preferences.dateFormat.replace(/M/g, 'm').replace(/yyyy/g, 'yy'), 576 onSelect : function (selectedDate){ 577 endDate = $(".end-date").val(); 578 storeSelectedDate = selectedDate; 579 580 if ( User.preferences.dateFormat == "dd/MM/yyyy" || User.preferences.dateFormat == "dd-MM-yyyy" ) { 581 if ( User.preferences.dateFormat == "dd/MM/yyyy" ) { 582 selectedDate = selectedDate.split("/"); 583 endDate = endDate.split("/"); 584 } else if( User.preferences.dateFormat == "dd-MM-yyyy" ){ 585 selectedDate = selectedDate.split("-"); 586 endDate = endDate.split("-"); 587 } 588 589 newDt = new Date(selectedDate[2],selectedDate[1], selectedDate[0]); 590 endDate = new Date(endDate[2],endDate[1], endDate[0]); 591 592 } else if ( User.preferences.dateFormat == "MM/dd/yyyy" ) { 593 selectedDate = selectedDate.split("/"); 594 endDate = endDate.split("/"); 595 596 newDt = new Date(selectedDate[2],selectedDate[0], selectedDate[1]); 597 endDate = new Date(endDate[2],endDate[0], endDate[1]); 598 } 599 600 if( newDt > endDate ) 601 $(".end-date").val(storeSelectedDate); 602 }, 603 onClose: function(){ 604 UI.dialogs.addEvent.find(".end-date").val(UI.dialogs.addEvent.find(".start-date").val()); 605 } 606 }); 607 } 608 605 609 DataLayer.render( path+'templates/event_repeat.ejs', { 606 610 event:objEvent … … 608 612 609 613 UI.dialogs.addEvent.find('#calendar_addevent_details3').html(repeatHtml); 610 611 dateSameValue(); 614 615 dateSameValue(); 612 616 $(".date").datepicker({ 613 617 dateFormat: User.preferences.dateFormat.replace(/M/g, 'm').replace(/yyyy/g, 'yy') 614 }); 615 616 618 }); 619 620 617 621 if(objEvent.repeat) 618 622 { … … 1010 1014 }); 1011 1015 1012 dateSameValue(); 1013 1014 var fixHour = function(){ 1015 currentTimeStart = UI.dialogs.addEvent.find("input.start-time").val(); 1016 UI.dialogs.addEvent.find("input.start-time").val(currentTimeStart.replace(".","").replace(".","")); 1017 } 1018 1019 var setTime = function( selectedDateTime ) { 1020 if ((selectedDateTime.value == '__:__') || (selectedDateTime.value == '__:__ __')) 1021 selectedDateTime.value = ""; 1022 if(!(User.preferences.hourFormat.length == 5)) 1023 $(this).val(selectedDateTime.replace(/[\.]/gi, "")); 1024 updateMap(); 1025 1026 if( Date.parse(selectedDateTime) < Date.parse(oldTime) ) return true; 1027 1028 var time = selectedDateTime.split(":"); 1029 1030 var hh = time[0]; 1031 var mm = time[1].substring(0, 2); 1016 dateSameValue(); 1017 1018 var fixHour = function(){ 1019 currentTimeStart = UI.dialogs.addEvent.find("input.start-time").val(); 1020 UI.dialogs.addEvent.find("input.start-time").val(currentTimeStart.replace(".","").replace(".","")); 1021 } 1022 1023 var setTime = function( selectedDateTime ) { 1024 if ((selectedDateTime.value == '__:__') || (selectedDateTime.value == '__:__ __')) 1025 selectedDateTime.value = ""; 1026 if(!(User.preferences.hourFormat.length == 5)) 1027 $(this).val(selectedDateTime.replace(/[\.]/gi, "")); 1028 updateMap(); 1029 1030 if( Date.parse(selectedDateTime) < Date.parse(oldTime) ) return true; 1032 1031 1033 1034 dt = new Date(); 1035 dt.setHours(hh, mm); 1036 var startHours = dt.getHours(); 1037 add = parseInt(User.preferences.defaultDuration) + parseInt($("input.end-time").val().split(":")[1].substring(0,2)); 1038 dt.addMinutes(add); 1032 var time = selectedDateTime.split(":"); 1033 1034 var hh = time[0]; 1035 var mm = time[1].substring(0, 2); 1036 1039 1037 1040 1041 var minutes = dt.getMinutes().toString(); 1042 var hours = dt.getHours(); 1043 UI.dialogs.addEvent.find("input.start-time").val(selectedDateTime.replace(".","").replace(".","")); 1044 1045 1046 if (time[1].indexOf("p.m.") != -1 ) { 1047 var startHours = startHours == 12 ? 12 : startHours; 1048 var startHours = startHours == 1 ? 13 : startHours; 1049 var startHours = startHours == 2 ? 14 : startHours; 1050 var startHours = startHours == 3 ? 15 : startHours; 1051 var startHours = startHours == 4 ? 16 : startHours; 1052 var startHours = startHours == 5 ? 17 : startHours; 1053 var startHours = startHours == 6 ? 18 : startHours; 1054 var startHours = startHours == 7 ? 19 : startHours; 1055 var startHours = startHours == 8 ? 20 : startHours; 1056 var startHours = startHours == 9 ? 21 : startHours; 1057 var startHours = startHours == 10 ? 22 : startHours; 1058 var startHours = startHours == 11 ? 23 : startHours; 1059 } else if (time[1].indexOf("a.m.") ) { 1060 var startHours = startHours == 12 ? 00 : startHours; 1061 } 1062 1063 1064 dtFormat = (time[1].indexOf("p.m.") != -1 || time[1].indexOf("a.m.") != -1) ? ((((User.preferences.defaultDuration / 60) + startHours) >= 12 && (startHours + (User.preferences.defaultDuration / 60)) < 24) ? " pm" : " am") : ""; 1065 1066 var newHours = ""; 1067 if(dtFormat){ 1068 hours = hours == 13 ? 01 : hours; 1069 hours = hours == 14 ? 02 : hours; 1070 hours = hours == 15 ? 03 : hours; 1071 hours = hours == 16 ? 04 : hours; 1072 hours = hours == 17 ? 05 : hours; 1073 hours = hours == 18 ? 06 : hours; 1074 hours = hours == 19 ? 07 : hours; 1075 hours = hours == 20 ? 08 : hours; 1076 hours = hours == 21 ? 09 : hours; 1077 hours = hours == 22 ? 10 : hours; 1078 hours = hours == 23 ? 11 : hours; 1079 hours = hours == 24 ? 12 : hours; 1080 } else { 1081 newHours = hours <= 9 ? "0" : ""; 1082 } 1083 1084 minutes = minutes.length == 1 ? "0"+minutes+dtFormat : minutes+dtFormat; 1085 newHours += hours.toString() + ":" +minutes; 1086 UI.dialogs.addEvent.find("input.end-time").val(newHours); 1087 1088 } 1089 1090 UI.dialogs.addEvent.find(".start-date").focusout(function(data){ 1091 UI.dialogs.addEvent.find(".end-date").val($(this).val()); 1092 }); 1038 dt = new Date(); 1039 dt.setHours(hh, mm); 1040 var startHours = dt.getHours(); 1041 add = parseInt(User.preferences.defaultDuration) + parseInt($("input.end-time").val().split(":")[1].substring(0,2)); 1042 dt.addMinutes(add); 1043 1044 1045 var minutes = dt.getMinutes().toString(); 1046 var hours = dt.getHours(); 1047 UI.dialogs.addEvent.find("input.start-time").val(selectedDateTime.replace(".","").replace(".","")); 1048 1049 1050 if (time[1].indexOf("p.m.") != -1 ) { 1051 var startHours = startHours == 12 ? 12 : startHours; 1052 var startHours = startHours == 1 ? 13 : startHours; 1053 var startHours = startHours == 2 ? 14 : startHours; 1054 var startHours = startHours == 3 ? 15 : startHours; 1055 var startHours = startHours == 4 ? 16 : startHours; 1056 var startHours = startHours == 5 ? 17 : startHours; 1057 var startHours = startHours == 6 ? 18 : startHours; 1058 var startHours = startHours == 7 ? 19 : startHours; 1059 var startHours = startHours == 8 ? 20 : startHours; 1060 var startHours = startHours == 9 ? 21 : startHours; 1061 var startHours = startHours == 10 ? 22 : startHours; 1062 var startHours = startHours == 11 ? 23 : startHours; 1063 } else if (time[1].indexOf("a.m.") ) { 1064 var startHours = startHours == 12 ? 00 : startHours; 1065 } 1066 1067 1068 dtFormat = (time[1].indexOf("p.m.") != -1 || time[1].indexOf("a.m.") != -1) ? ((((User.preferences.defaultDuration / 60) + startHours) >= 12 && (startHours + (User.preferences.defaultDuration / 60)) < 24) ? " pm" : " am") : ""; 1069 1070 var newHours = ""; 1071 if(dtFormat){ 1072 hours = hours == 13 ? 01 : hours; 1073 hours = hours == 14 ? 02 : hours; 1074 hours = hours == 15 ? 03 : hours; 1075 hours = hours == 16 ? 04 : hours; 1076 hours = hours == 17 ? 05 : hours; 1077 hours = hours == 18 ? 06 : hours; 1078 hours = hours == 19 ? 07 : hours; 1079 hours = hours == 20 ? 08 : hours; 1080 hours = hours == 21 ? 09 : hours; 1081 hours = hours == 22 ? 10 : hours; 1082 hours = hours == 23 ? 11 : hours; 1083 hours = hours == 24 ? 12 : hours; 1084 } else { 1085 newHours = hours <= 9 ? "0" : ""; 1086 } 1087 1088 minutes = minutes.length == 1 ? "0"+minutes+dtFormat : minutes+dtFormat; 1089 newHours += hours.toString() + ":" +minutes; 1090 UI.dialogs.addEvent.find("input.end-time").val(newHours); 1091 1092 } 1093 1094 UI.dialogs.addEvent.find(".start-date").focusout(function(data){ 1095 UI.dialogs.addEvent.find(".end-date").val($(this).val()); 1096 }); 1093 1097 1094 1098 var oldTime = UI.dialogs.addEvent.find('input.start-time').val(); 1095 $(".start-time").focusout(function(data){ 1096 if($("#calendar").fullCalendar('getView').name == "month" || buttonClicked) { 1097 setTime( $(this).val() ); 1098 } 1099 }); 1100 1101 UI.dialogs.addEvent.find('input.start-time').timepicker({ 1102 ampm : ((User.preferences.hourFormat.length > 5) ? true: false), 1103 timeFormat: "hh:mm tt", 1104 onSelect: function( selectedDateTime ){ 1105 if($("#calendar").fullCalendar('getView').name == "month" || buttonClicked) { 1106 if ( selectedDateTime.indexOf("p.m.") == -1 || !selectedDateTime.indexOf("a.m.") == -1 ) { 1107 var selectedTime = selectedDateTime.split(":"); 1108 var endTime = UI.dialogs.addEvent.find(".end-time").val(); 1109 endTime = endTime.split(":"); 1110 1111 var t1 = new Date(false,false,false,selectedTime[0],selectedTime[1],false); 1112 var t2 = new Date(false,false,false,endTime[0],endTime[1],false); 1113 1114 if (t1 < t2) return true; 1115 } 1116 1117 setTime( selectedDateTime ); 1118 } 1119 }, 1120 onClose : function (selectedDateTime){ 1121 fixHour(); 1122 } 1123 1124 }); 1125 1126 1127 1099 $(".start-time").focusout(function(data){ 1100 if($("#calendar").fullCalendar('getView').name == "month" || buttonClicked) { 1101 setTime( $(this).val() ); 1102 } 1103 }); 1104 1105 UI.dialogs.addEvent.find('input.start-time').timepicker({ 1106 ampm : ((User.preferences.hourFormat.length > 5) ? true: false), 1107 timeFormat: "hh:mm tt", 1108 onSelect: function( selectedDateTime ){ 1109 if($("#calendar").fullCalendar('getView').name == "month" || buttonClicked) { 1110 if ( selectedDateTime.indexOf("p.m.") == -1 || !selectedDateTime.indexOf("a.m.") == -1 ) { 1111 var selectedTime = selectedDateTime.split(":"); 1112 var endTime = UI.dialogs.addEvent.find(".end-time").val(); 1113 endTime = endTime.split(":"); 1114 1115 var t1 = new Date(false,false,false,selectedTime[0],selectedTime[1],false); 1116 var t2 = new Date(false,false,false,endTime[0],endTime[1],false); 1117 1118 if (t1 < t2) return true; 1119 } 1120 1121 setTime( selectedDateTime ); 1122 } 1123 }, 1124 onClose : function (selectedDateTime){ 1125 fixHour(); 1126 } 1127 1128 }); 1129 1130 1131 1128 1132 UI.dialogs.addEvent.find('input.end-time').timepicker({ 1129 1133 closeText: 'Ok', … … 1138 1142 $(this).val(selectedDateTime.replace(/[\.]/gi, "")); 1139 1143 updateMap(); 1140 1141 if ( selectedDateTime.indexOf("p.m.") == -1 || !selectedDateTime.indexOf("a.m.") == -1 ) { 1142 var startT = UI.dialogs.addEvent.find('input.start-time'); 1143 1144 var lessZeroTime = function( sTime ) { 1145 sTime = sTime.split(":"); 1146 sTime = new Date(false,false,false,sTime[0],sTime[1],false); 1147 sTimeReady = parseInt(sTime.getHours() - (User.preferences.defaultDuration / 60)); 1148 1149 if( sTimeReady < 0 ) 1150 return false; // If the value is less than 0, return false. 1151 1152 return sTimeReady.toString().length == 1 ? "0"+sTimeReady+":00" : sTimeReady+":00"; 1153 } 1154 1155 var hEnd = new Date(false,false,false,selectedDateTime.split(":")[0],selectedDateTime.split(":")[1],false); 1156 var hStart = new Date(false,false,false,startT.val().split(":")[0],startT.val().split(":")[1],false); 1157 1158 if ( hEnd <= hStart ){ 1159 var lessTime = lessZeroTime( selectedDateTime ); 1160 if ( !lessTime ){ 1161 startT.val( "00:00" ); 1162 return true; 1163 } 1164 startT.val( lessTime ); 1165 } 1166 } 1144 1145 if ( selectedDateTime.indexOf("p.m.") == -1 || !selectedDateTime.indexOf("a.m.") == -1 ) { 1146 var startT = UI.dialogs.addEvent.find('input.start-time'); 1147 1148 var lessZeroTime = function( sTime ) { 1149 sTime = sTime.split(":"); 1150 sTime = new Date(false,false,false,sTime[0],sTime[1],false); 1151 sTimeReady = parseInt(sTime.getHours() - (User.preferences.defaultDuration / 60)); 1152 1153 if( sTimeReady < 0 ) 1154 return false; // If the value is less than 0, return false. 1155 1156 return sTimeReady.toString().length == 1 ? "0"+sTimeReady+":00" : sTimeReady+":00"; 1157 } 1158 1159 var hEnd = new Date(false,false,false,selectedDateTime.split(":")[0],selectedDateTime.split(":")[1],false); 1160 var hStart = new Date(false,false,false,startT.val().split(":")[0],startT.val().split(":")[1],false); 1161 1162 if ( hEnd <= hStart ){ 1163 var lessTime = lessZeroTime( selectedDateTime ); 1164 if ( !lessTime ){ 1165 startT.val( "00:00" ); 1166 return true; 1167 } 1168 startT.val( lessTime ); 1169 } 1170 } 1167 1171 }, 1168 1172 onClose : function (selectedDateTime){ 1169 1173 if(!(User.preferences.hourFormat.length == 5)) 1170 1174 $(this).val(selectedDateTime.replace(/[\.]/gi, "")); 1171 fixHour(); 1175 fixHour(); 1172 1176 }, 1177 1173 1178 beforeShow: function (selectedDateTime) { 1174 1179 if ((selectedDateTime.value == '__:__') || (selectedDateTime.value == '__:__ __')) … … 1216 1221 var attendeeHtml = DataLayer.render( path+'templates/attendee_add.ejs', { 1217 1222 event:objEvent 1218 }); 1223 }); 1219 1224 1220 1225 // load template of attendees 1221 1226 var blkAddAtendee = UI.dialogs.addEvent.find('#calendar_addevent_details6').append(attendeeHtml); 1222 if(objEvent.attendee.length) 1227 if(objEvent.attendee.length) 1223 1228 callbackAttendee(); 1224 1229 /** … … 1598 1603 if ($(event.target).is('input')) { 1599 1604 old_item = $(event.target).parents('li'); 1600 1601 var userId = old_item.find('.id').html(); 1602 1603 if(userId == '') 1604 { 1605 var userId = DataLayer.put('user', { 1606 name: old_item.find('.name').html(), 1607 mail: old_item.find('.mail').html(), 1608 isExternal: '1' 1609 }); 1610 } 1611 1605 1606 var userId = old_item.find('.id').html(); 1607 1608 if(userId == '') 1609 { 1610 var userId = DataLayer.put('user', { 1611 name: old_item.find('.name').html(), 1612 mail: old_item.find('.mail').html(), 1613 isExternal: '1' 1614 }); 1615 } 1616 1612 1617 newAttendeeId = DataLayer.put('participant', { 1613 1618 user: userId, … … 1768 1773 DataLayer.render( 'templates/preferences_calendar.ejs', { 1769 1774 preferences:User.preferences, 1770 calendars: Calendar.calendars, 1771 signatureOf : Calendar.signatureOf 1775 calendars: Calendar.calendars, 1776 signatureOf : Calendar.signatureOf 1772 1777 }, function( template ){ 1773 1778 var tabPrefCalendar = jQuery('#preference_tab').html( template ).find('.preferences-win'); 1774 1779 1775 1780 tabPrefCalendar.find('select[name="defaultCalendar"] option[value="'+User.preferences.defaultCalendar+'"]').attr('selected','selected').trigger('change'); 1776 1781 tabPrefCalendar.find('select[name="dafaultImportCalendar"] option[value="'+User.preferences.dafaultImportCalendar+'"]').attr('selected','selected').trigger('change'); 1777 1778 DataLayer.render( 'templates/timezone_list.ejs', {}, function( timezones_options ){ 1779 1782 1783 DataLayer.render( 'templates/timezone_list.ejs', {}, function( timezones_options ){ 1780 1784 tabPrefCalendar.find('select[name="timezone"]').html(timezones_options).find('option[value="'+User.preferences.timezone+'"]').attr('selected','selected').trigger('change'); 1781 1785 }); … … 2103 2107 2104 2108 function getSelectedCalendars( reverse, type ){ 2105 var selector = !!type ? "div.my-groups-task .calendar-view" : "div.my-calendars .calendar-view, div.signed-calendars .calendar-view"; 2106 var returns = []; 2107 2108 $.each( $(selector), function(i , c){ 2109 2110 if( reverse ? !c.checked : c.checked ) 2111 returns.push( c.value ); 2112 2109 2110 var selector = ""; 2111 2112 switch(type) 2113 { 2114 case 0: 2115 selector = "div.my-calendars .calendar-view, div.signed-calendars .calendar-view"; 2116 break; 2117 case 1: 2118 selector = "div.my-groups-task .calendar-view"; 2119 break; 2120 case 2: 2121 selector = ".calendar-view"; 2122 break; 2123 } 2124 2125 // var selector = !!type ? "div.my-groups-task .calendar-view" : "div.my-calendars .calendar-view, div.signed-calendars .calendar-view"; 2126 var returns = []; 2127 2128 $.each( $(selector), function(i , c){ 2129 2130 if( reverse ? !c.checked : c.checked ) 2131 returns.push( c.value ); 2132 2113 2133 }); 2114 2115 if (!returns.length) 2116 return false; 2117 2118 return returns; 2134 2135 if (!returns.length) 2136 return false; 2137 2138 return returns; 2119 2139 } 2120 2140 … … 2173 2193 var schudableDecode = DataLayer.encode( "schedulable:preview", schedulable); 2174 2194 var me = schudableDecode.me.user ? schudableDecode.me.user.id : schudableDecode.me.id; 2175 2176 var filter = {filter: ['AND', ['=','id',eventId], ['=','calendar',idCalendar], ['=','user', me]]}; 2177 2195 var filter = {filter: ['AND', ['=','id',eventId], ['=','calendar',idCalendar], ['=','user', me] ] }; 2178 2196 if(type) 2179 2197 filter.filter.push(['=','type',type]); 2180 2181 2198 DataLayer.removeFilter('schedulable', filter); 2182 2199 Calendar.rerenderView(true); … … 2306 2323 2307 2324 }); 2308 2309 $('ul.list-calendars .cal-list-options-btn').on('click',function(){doMenu();}); 2325 2326 $('ul.list-calendars .cal-list-options-btn').on('click',function(){doMenu();}); 2310 2327 2311 2328 … … 2479 2496 show_modal_search_shared(); 2480 2497 }); 2481 2482 2498 2499 2483 2500 meu_container.find('.title-signed-calendars').click(function(evt){ 2484 2501 var status = $(this).parent().find('.status-list-shared'); … … 2491 2508 2492 2509 $('.calendar-view').click(function(evt){ 2493 2494 var checkBox = $(this); 2495 var calendarId = $(this).val(); 2496 2497 Calendar.signatureOf[ calendarId ].hidden = (checkBox.is(':checked') ? 0 : 1 ); 2498 2499 DataLayer.put('calendarSignature', {id: Calendar.signatureOf[ calendarId ].id , hidden: Calendar.signatureOf[ calendarId ].hidden } ); 2500 DataLayer.commit(); 2501 2502 2503 if($tabs.tabs('option' ,'selected') == 0){ 2504 2505 if(Calendar.currentView && !!Calendar.currentView[ calendarId ]){ 2506 2507 Calendar.currentView[ calendarId ].hidden = !checkBox.is(':checked'); 2508 $('#calendar').fullCalendar( 'refetchEvents' ); 2509 } 2510 2511 }else{ 2512 type = $tabs.tabs('option' ,'selected'); 2513 type = type > 2 ? 2 : (type - 1) 2514 2515 pageselectCallback('', 0, false, type); 2516 } 2510 2511 var checkBox = $(this); 2512 var calendarId = $(this).val(); 2513 2514 Calendar.signatureOf[ calendarId ].hidden = (checkBox.is(':checked') ? 0 : 1 ); 2515 2516 DataLayer.put('calendarSignature', {id: Calendar.signatureOf[ calendarId ].id , hidden: Calendar.signatureOf[ calendarId ].hidden } ); 2517 DataLayer.commit(); 2518 2519 2520 if($tabs.tabs('option' ,'selected') == 0){ 2521 2522 if(Calendar.currentView && !!Calendar.currentView[ calendarId ]){ 2523 2524 Calendar.currentView[ calendarId ].hidden = !checkBox.is(':checked'); 2525 $('#calendar').fullCalendar( 'refetchEvents' ); 2526 } 2527 2528 }else{ 2529 type = $tabs.tabs('option' ,'selected'); 2530 type = type > 2 ? 2 : (type - 1) 2531 2532 pageselectCallback('', 0, false, type); 2533 } 2517 2534 }); 2518 2535 }); … … 2624 2641 $(this).addClass('fc-state-hover'); 2625 2642 }, 2626 2643 2627 2644 function(){ 2628 2645 $(this).removeClass('fc-state-hover'); … … 2658 2675 else 2659 2676 pageselectCallback($(currentView+' [name = keyword]').val(), ((parseInt($(currentView+' [name = page_index]').val())) -1), view, type); 2660 }); 2661 if (currentView == "#tab_events_list_" || currentView == "#tab_tasks_list_") 2662 $(currentView+' .events-list.events-list-win.active .header-paginator .fc-header-left').find('span.fc-button-agendaWeek, span.fc-button-agendaDay').remove();2677 }); 2678 if (currentView == "#tab_events_list_" || currentView == "#tab_tasks_list_") 2679 $(currentView+' .events-list.events-list-win.active .header-paginator .fc-header-left').find('span.fc-button-agendaWeek, span.fc-button-agendaDay').remove(); 2663 2680 } 2664 2681 … … 2725 2742 case 'agendaWeek': 2726 2743 var dateStart = new Date().moveToDayOfWeek(dateCalendar.dayOfWeek[User.preferences.weekStart]); 2727 var dateEnd = new Date().moveToDayOfWeek(dateCalendar.dayOfWeek[User.preferences.weekStart]); 2728 dateEnd.setHours(0,0,0); 2729 dateStart.setHours(0,0,0); 2744 var dateEnd = new Date().moveToDayOfWeek(dateCalendar.dayOfWeek[User.preferences.weekStart]); 2745 dateEnd.setHours(0,0,0); 2746 dateStart.setHours(0,0,0); 2730 2747 rangeStart = dateStart.add({ days: (7 * page_index) }).getTime(); 2731 2748 rangeEnd = dateEnd.add({ days: (7 * page_index)+7 }).getTime(); … … 2739 2756 var dateStart = new Date().add({ years: page_index }); 2740 2757 var dateEnd = new Date().add({ years: page_index }); 2741 dateEnd.setHours(0,0,0); 2742 dateStart.setHours(0,0,0); 2758 dateEnd.setHours(0,0,0); 2759 dateStart.setHours(0,0,0); 2743 2760 if(dateStart.getMonth() != 0) 2744 2761 dateStart.moveToMonth(0, -1) … … 2804 2821 }; 2805 2822 } 2806 2823 2807 2824 var results = DataLayer.encode('schedulable:list', DataLayer.dispatch('modules/calendar/schedules', criteria)); 2808 2825 //var results = DataLayer.get('schedulable:detail', criteria); 2809 2826 keyword = ( keyword || '' ).replace( /\s+/g, "_" ); 2810 2827 } … … 2858 2875 var eventId = $(this).siblings('[name="eventid"]').val(); 2859 2876 var calendarId = $(this).siblings('[name="calendarid"]').val(); 2860 remove_event(eventId, calendarId, 2);2877 remove_event(eventId, calendarId, ( $(this).siblings('[name="eventtype"]').val() )); 2861 2878 event.stopImmediatePropagation() 2862 2879 }) … … 3131 3148 delete schedulable['historic']; 3132 3149 3133 schedulable.participants = $.map( participants, function( attendee, i ){ 3134 3135 var participant = DataLayer.get('participant', attendee, false); 3136 3137 if(typeof(participant) == 'array') 3138 participant = participant[0]; 3139 3140 if(owner.id != participant.user) 3141 delete participant.status; 3142 3143 delete participant.delegatedFrom; 3144 delete participant.id; 3145 delete participant.schedulable; 3146 3147 participant.id = DataLayer.put('participant', participant); 3148 3149 return (parseInt(type) == 3) ? participant.id : participant ; 3150 }); 3151 3150 schedulable.participants = $.map( participants, function( attendee, i ){ 3151 3152 var participant = DataLayer.get('participant', attendee, false); 3153 3154 if(typeof(participant) == 'array') 3155 participant = participant[0]; 3156 3157 if(owner.id != participant.user) 3158 delete participant.status; 3159 3160 delete participant.delegatedFrom; 3161 delete participant.id; 3162 delete participant.schedulable; 3163 3164 participant.id = DataLayer.put('participant', participant); 3165 3166 return (parseInt(type) == 3) ? participant.id : participant ; 3167 }); 3168 3152 3169 //Edit ocurrence 3153 3170 if(parseInt(type) == 3){ -
branches/2.5/prototype/modules/calendar/js/init.js
r8054 r8232 317 317 axisFormat: User.preferences.hourFormat, 318 318 eventSources: Calendar.sources, 319 319 320 320 header: { 321 321 left: 'prev,next today,agendaWeek,' + ((User.preferences.defaultCalView == "basicDay") ? "basicDay" : "agendaDay"), … … 353 353 }, 354 354 355 356 355 eventRender: function( event, element, view ){ 357 356 $('#calendar td.fc-year-have-event').removeClass('fc-year-have-event'); 358 357 359 358 var img_icon = ""; 360 361 if( !!parseInt(event.unanswered) ){ 362 363 img_icon = "mini-attention.png"; 364 365 }else{ 366 367 if(event.type == 1) 368 img_icon = "mini-event.png"; 369 if(event.type == 2) 370 img_icon = "mini-task.png"; 371 if(event.type == 3) 372 img_icon = "mini-activity.png"; 373 374 } 375 376 element.find(".fc-event-inner.fc-event-skin").prepend($('<img style="width: 11px; height: 13px;" class="" src="../prototype/modules/calendar/img/' + img_icon + '"></img>')); 359 var status_ball = ""; //nome da imagem a ser inserida 360 var status_img = ""; 361 362 if( !!parseInt(event.unanswered) && event.type == 1 ){ 363 364 img_icon = "mini-attention.png"; 365 366 }else{ 367 368 if(event.type == 1) 369 img_icon = "mini-event.png"; 370 if(event.type == 2) 371 img_icon = "mini-task.png"; 372 if(event.type == 3) 373 img_icon = "mini-activity.png"; 374 375 //se for diferente de evento(type 1). 376 if(event.type != 1){ 377 if(event.status == "1"){ 378 status_ball = "gray.png"; 379 }else if(event.status == "2"){ 380 status_ball = "yellow.png"; 381 }else if(event.status == "3"){ 382 status_ball = "green.png"; 383 }else if(event.status == "4"){ 384 status_ball = "red.png"; 385 } 386 387 status_img = '<img style="width: 8px; height: 8px; margin-bottom: 2px;" src="../prototype/modules/calendar/img/' + status_ball + '"></img>'; 388 } 389 390 } 391 392 393 //html que exibe a imagem do type e do status 394 element.find(".fc-event-inner.fc-event-skin").prepend($('<img style="width: 11px; height: 13px;" class="" src="../prototype/modules/calendar/img/' + img_icon + '"></img>' + status_img)); 377 395 }, 378 396 … … 477 495 'type': 'question', 478 496 'overlay_opacity': '0.5', 479 'custom_class': 'occurrence-zebra', 497 'custom_class': 'occurrence-zebra', 480 498 'width': 427, 481 499 'buttons': ['Editar todas ocorrências', 'Editar essa ocorrência', 'Cancelar'], 482 500 'onClose': function(clicked) { 483 501 if(clicked == 'Editar todas ocorrências') { 484 var schedule = getSchedulable(evt.id, ''); 485 schedule.calendar = evt.calendar; 486 eventDetails( schedule , true); 502 var schedule = getSchedulable(evt.id, ''); 503 schedule.calendar = evt.calendar; 504 eventDetails( schedule , true); 487 505 488 506 }else if (clicked == 'Editar essa ocorrência'){ … … 493 511 */ 494 512 var repeat = mount_exception(evt.id, evt.occurrence); 495 513 496 514 $('.calendar-copy-move input[name="typeEvent"]').val("3"); 497 515 … … 513 531 break; 514 532 case 3: 533 DataLayer.remove('taskToActivity', false);//Limpa o cache 515 534 var activity = getSchedulable(evt.id, ''); 516 535 activity.group = evt.calendar; … … 565 584 566 585 if( $.browser.msie ){ 567 568 $('#divAppbox').css('width', $(window).width());586 //$('#divAppbox').css('width', $(window).width()); 587 $('#divAppbox').css({'height':'600px','max-width':'100%'}); 569 588 } 570 589 -
branches/2.5/prototype/modules/calendar/schedules.php
r8049 r8232 18 18 class Schedule{ 19 19 20 function findEventsRange( $start, $end, $calendars, $timezones ){20 function findEventsRange( $start, $end, $calendars, $timezones ){ 21 21 22 22 $sql = … … 31 31 .'calendar_object.range_end as "rangeEnd", calendar_object.last_update as "lastUpdate", ' 32 32 .'calendar_object.dtstamp as "dtstamp", calendar_object.sequence as "sequence", ' 33 33 34 .'count(calendar_task_to_activity_object.id) as "tasks", ' 35 34 36 .'calendar_object.tzid as "timezone" ,calendar_to_calendar_object.calendar_id as ' 35 37 .'calendar FROM calendar_object left join calendar_task_to_activity_object on ( calendar_object.id = calendar_task_to_activity_object.calendar_object_activity_id ), calendar_to_calendar_object ' 38 36 39 .'WHERE ( calendar_to_calendar_object.calendar_id IN (\'' . implode('\',\'', $calendars) . '\')) ' 37 40 .'AND calendar_to_calendar_object.calendar_object_id = calendar_object.id ' … … 54 57 .'AND calendar_object.dtstart NOT IN (SELECT calendar_repeat_occurrence.occurrence from calendar_repeat_occurrence, ' 55 58 .'calendar_repeat where (calendar_repeat_occurrence.repeat_id = calendar_repeat.id) ' 56 .'AND (calendar_repeat.object_id = calendar_object.id)) ' 57 .'group by 58 calendar_object.id, calendar_object.cal_uid, calendar_object.type_id, 59 calendar_object.dtstart, calendar_object.summary, calendar_object.description, 60 calendar_object.dtend, calendar_object.priority, calendar_object.due, calendar_object.percentage, 61 calendar_object.status, calendar_object.location, calendar_object.allday, calendar_object.transp, 62 calendar_object.class_id, calendar_object.repeat, calendar_object.range_start, calendar_object.range_end, 63 calendar_object.last_update, calendar_object.dtstamp, calendar_object.sequence, 64 calendar_object.tzid, calendar_to_calendar_object.calendar_id 65 ORDER BY 66 calendar_object.dtstart'; 59 .'AND (calendar_repeat.object_id = calendar_object.id)) ' 60 .'group by 61 calendar_object.id, calendar_object.cal_uid, calendar_object.type_id, 62 calendar_object.dtstart, calendar_object.summary, calendar_object.description, 63 calendar_object.dtend, calendar_object.priority, calendar_object.due, calendar_object.percentage, 64 calendar_object.status, calendar_object.location, calendar_object.allday, calendar_object.transp, 65 calendar_object.class_id, calendar_object.repeat, calendar_object.range_start, calendar_object.range_end, 66 calendar_object.last_update, calendar_object.dtstamp, calendar_object.sequence, 67 calendar_object.tzid, calendar_to_calendar_object.calendar_id 68 ORDER BY 69 calendar_object.dtstart'; 67 70 68 71 $params = Controller::service('PostgreSQL')->execResultSql($sql.$where); … … 84 87 .'calendar_object.range_end as "rangeEnd", calendar_object.last_update as "lastUpdate", ' 85 88 .'calendar_object.dtstamp as "dtstamp", calendar_object.sequence as "sequence", ' 89 86 90 .'count(calendar_task_to_activity_object.id) as "tasks", ' 91 87 92 .'calendar_object.tzid as "timezone" ,calendar_to_calendar_object.calendar_id as ' 88 93 .'calendar FROM calendar_object left join calendar_task_to_activity_object on ( calendar_object.id = calendar_task_to_activity_object.calendar_object_activity_id ), calendar_to_calendar_object ' … … 92 97 93 98 94 $where = 'AND (((upper("summary") like upper(\'%'.$summary.'%\') OR upper("description") like upper(\'%'.$description.'%\')))) 95 group by 96 calendar_object.id, calendar_object.cal_uid, calendar_object.type_id, 97 calendar_object.dtstart, calendar_object.summary, calendar_object.description, 98 calendar_object.dtend, calendar_object.priority, calendar_object.due, calendar_object.percentage, 99 calendar_object.status, calendar_object.location, calendar_object.allday, calendar_object.transp, 100 calendar_object.class_id, calendar_object.repeat, calendar_object.range_start, calendar_object.range_end, 101 calendar_object.last_update, calendar_object.dtstamp, calendar_object.sequence, 102 calendar_object.tzid, calendar_to_calendar_object.calendar_id 103 ORDER BY 104 dtstart LIMIT '.$limit.' OFFSET '.$offset.' '; 105 99 $where = 'AND (((upper("summary") like upper(\'%'.$summary.'%\') OR upper("description") like upper(\'%'.$description.'%\')))) 100 group by 101 calendar_object.id, calendar_object.cal_uid, calendar_object.type_id, 102 calendar_object.dtstart, calendar_object.summary, calendar_object.description, 103 calendar_object.dtend, calendar_object.priority, calendar_object.due, calendar_object.percentage, 104 calendar_object.status, calendar_object.location, calendar_object.allday, calendar_object.transp, 105 calendar_object.class_id, calendar_object.repeat, calendar_object.range_start, calendar_object.range_end, 106 calendar_object.last_update, calendar_object.dtstamp, calendar_object.sequence, 107 calendar_object.tzid, calendar_to_calendar_object.calendar_id 108 ORDER BY 109 dtstart LIMIT '.$limit.' OFFSET '.$offset.' '; 110 106 111 $params = Controller::service('PostgreSQL')->execResultSql($sql.$where); 107 112 108 109 110 113 return $this->normalizeEvents( $params, $timezones ); 111 114 } … … 113 116 function normalizeEvents( &$result, $timezones ){ 114 117 115 $mySig = Controller::find(array('concept' => 'calendarSignature') , array('calendar') , array('filter' => array( 'AND' , array('=' , 'type' , '0' ) , array( '=' , 'user' ,Config::me('uidNumber') ) , array('=' , 'isOwner' , '0' )))); 116 117 $signedCalendars = array(); 118 if(is_array($mySig)) 119 foreach($mySig as $v) 120 { 121 $tmp = Controller::find(array('concept' => 'calendarToPermission') , array('acl' ,'owner') , array('filter' => array( 'AND' ,array( '=' , 'calendar' , $v['calendar'] ) , array( '=' , 'user' , Config::me('uidNumber') ) ))); 122 $signedCalendars[$v['calendar']] = $tmp[0]; 123 } 124 118 $mySig = Controller::find(array('concept' => 'calendarSignature') , array('calendar') , array('filter' => array( 'AND' , array('=' , 'type' , '0' ) , array( '=' , 'user' ,Config::me('uidNumber') ) , array('=' , 'isOwner' , '0' )))); 119 120 $signedCalendars = array(); 121 if(is_array($mySig)) 122 foreach($mySig as $v) 123 { 124 $tmp = Controller::find(array('concept' => 'calendarToPermission') , array('acl' ,'owner') , array('filter' => array( 'AND' ,array( '=' , 'calendar' , $v['calendar'] ) , array( '=' , 'user' , Config::me('uidNumber') ) ))); 125 $signedCalendars[$v['calendar']] = $tmp[0]; 126 } 127 125 128 $date = new DateTime('now', new DateTimeZone('UTC')); 126 129 $DayLigth = array(); … … 156 159 if(isset( $v['occurrences'] ) && count( $v['occurrences'] ) > 0){ 157 160 158 $date->setTimestamp((int) ($v['startTime'] / 1000)); 159 $date->setTimezone( new DateTimeZone( $currentTimezone )); 160 161 $date->setTimestamp((int) ($v['startTime'] / 1000)); 162 $date->setTimezone( new DateTimeZone( $currentTimezone )); 163 161 164 foreach( $result[$i]['occurrences'] as &$o){ 162 165 163 $o = ((int) ($o / 1000) + $date->getOffset()).'000'; 166 $o = ((int) ($o / 1000) + $date->getOffset()).'000'; 164 167 165 168 } 166 169 } 167 170 168 $attend = (isset($signedCalendars[$result[$i]['calendar']])) ? 169 Controller::read(array('concept' => 'participant'), null, array('filter' => array('AND', array('=','schedulable',$v['id']), array('=','user', $signedCalendars[$result[$i]['calendar']]['owner'] ) ))): 170 Controller::read(array('concept' => 'participant'), null, array('filter' => array('AND', array('=','schedulable',$v['id']), array('=','user', Config::me('uidNumber')) ))); 171 172 $result[$i]['unanswered'] = 0; 173 171 $attend = (isset($signedCalendars[$result[$i]['calendar']])) ? 172 Controller::read(array('concept' => 'participant'), null, array('filter' => array('AND', array('=','schedulable',$v['id']), array('=','user', $signedCalendars[$result[$i]['calendar']]['owner'] ) ))): 173 Controller::read(array('concept' => 'participant'), null, array('filter' => array('AND', array('=','schedulable',$v['id']), array('=','user', Config::me('uidNumber')) ))); 174 175 $result[$i]['unanswered'] = 0; 176 174 177 if(count($attend) > 0 && !empty($attend)){ 175 if(array_key_exists(0, $attend)) 176 $attend = $attend[0]; 177 178 if(isset($signedCalendars[$result[$i]['calendar']])) //Caso agenda compartilhada verificar tmb se tem compartilhamento de escrita 179 $result[$i]['editable'] = (strpos($signedCalendars[$result[$i]['calendar']]['acl'],"w") >=0 && (strstr($attend['acl'],"w") || strstr($attend['acl'],"o") || $attend['isOrganizer'] == '1') ) ? 1 : 0; 180 else 181 $result[$i]['editable'] = (strstr($attend['acl'],"w") || strstr($attend['acl'],"o") || $attend['isOrganizer'] == '1') ? 1 : 0; 182 183 if($attend['status'] == STATUS_UNANSWERED && !isset($signedCalendars[$result[$i]['calendar']]) ) 184 $result[$i]['unanswered'] = 1; 178 if(array_key_exists(0, $attend)) 179 $attend = $attend[0]; 180 181 if(isset($signedCalendars[$result[$i]['calendar']])) //Caso agenda compartilhada verificar tmb se tem compartilhamento de escrita 182 $result[$i]['editable'] = (strpos($signedCalendars[$result[$i]['calendar']]['acl'],"w") >=0 && (strstr($attend['acl'],"w") || strstr($attend['acl'],"o") || $attend['isOrganizer'] == '1') ) ? 1 : 0; 183 else 184 $result[$i]['editable'] = (strstr($attend['acl'],"w") || strstr($attend['acl'],"o") || $attend['isOrganizer'] == '1') ? 1 : 0; 185 186 if($attend['status'] == STATUS_UNANSWERED && !isset($signedCalendars[$result[$i]['calendar']]) ) 187 $result[$i]['unanswered'] = 1; 185 188 186 189 }else{ -
branches/2.5/prototype/modules/calendar/templates/attendee_add.ejs
r7982 r8232 11 11 <option value="3" <%= data.event.status=='3' ? 'selected="selected"':'' %>>Eu não vou</option> 12 12 <option value="2" <%= data.event.status=='2' ? 'selected="selected"':'' %>>Talvez</option> 13 <option value="4" <%= data.event.status=='4' ? 'selected="selected"':'' %>>Sem resposta </option> 14 <option class="hidden" value="5" >Delegado</option> 13 <option value="4" <%= data.event.status=='4' ? 'selected="selected"':'' %>>Sem resposta </option> 14 <option class="hidden" value="5" >Delegado</option> 15 15 <%}%> 16 16 <%}else{%> -
branches/2.5/prototype/modules/calendar/templates/event_add.ejs
r8050 r8232 78 78 continue; 79 79 %> 80 <% if( data.event.isShared ){ %> 81 <% if(data.event.calendars[i].id == data.event.calendar){ %> 82 <option value="<%= data.event.calendars[i].id %>"><%= data.event.calendars[i].name %></option> 83 <%}%> 84 85 <% }else { %> 86 87 <option value="<%= data.event.calendars[i].id %>" <%= data.event.calendars[i].id == data.event.calendar ? 'selected="selected"':'' %>><%= data.event.calendars[i].name %></option> 88 <% } %> 89 90 80 <% if( data.event.isShared ){ %> 81 <% if(data.event.calendars[i].id == data.event.calendar){ %> 82 <option value="<%= data.event.calendars[i].id %>"><%= data.event.calendars[i].name %></option> 83 <%}%> 84 85 <% }else { %> 86 87 <option value="<%= data.event.calendars[i].id %>" <%= data.event.calendars[i].id == data.event.calendar ? 'selected="selected"':'' %>><%= data.event.calendars[i].name %></option> 88 <% } %> 89 90 91 91 <% } %> 92 92 </select> 93 <span class="creation-date-label">Evento criado em <%= data.event.creationDate[0] %> às 94 <%= data.event.creationDate[1] %> horas e <%= data.event.creationDate[2] %> minutos. 95 </span> 96 </p> 97 98 93 <span class="creation-date-label">Evento criado em <%= data.event.creationDate[0] %> às 94 <%= data.event.creationDate[1] %> horas e <%= data.event.creationDate[2] %> minutos. 95 </span> 96 </p> 97 98 99 99 <fieldset class="hidden"> 100 100 <legend class="hidden">Publicidade</legend> -
branches/2.5/prototype/modules/calendar/templates/event_repeat.ejs
r7978 r8232 32 32 <label for="repeatweekly[]">Domingo</label> 33 33 34 <input type="checkbox" name="repeatweekly[]" value="MO" 34 <input type="checkbox" name="repeatweekly[]" value="MO" <%= ((data.event.acl.write || data.event.acl.organization) && data.event.isAttendee) ? '' : 'disabled="disabled"'%>> 35 35 <label for="repeatweekly[]">Segunda</label> 36 36 37 <input type="checkbox" name="repeatweekly[]" value="TU" 37 <input type="checkbox" name="repeatweekly[]" value="TU" <%= ((data.event.acl.write || data.event.acl.organization) && data.event.isAttendee) ? '' : 'disabled="disabled"'%>> 38 38 <label for="repeatweekly[]">Terça</label> 39 39 -
branches/2.5/prototype/modules/calendar/templates/preferences_calendar.ejs
r8021 r8232 36 36 <label for="defaultCalView">Visualização padrão do calendário:</label> 37 37 <select name="defaultCalView" > 38 <option value="agendaDay" <%= data.preferences.defaultCalView =='agendaDay' ? 'selected="selected"':'' %>>Diária com horário</option> 39 <option value="basicDay" <%= data.preferences.defaultCalView =='basicDay' ? 'selected="selected"':'' %>>Diária sem horário</option> 38 <option value="agendaDay" <%= data.preferences.defaultCalView =='agendaDay' ? 'selected="selected"':'' %>>Diária com horário</option> 39 <option value="basicDay" <%= data.preferences.defaultCalView =='basicDay' ? 'selected="selected"':'' %>>Diária sem horário</option> 40 40 <option value="agendaWeek" <%= data.preferences.defaultCalView =='agendaWeek' ? 'selected="selected"':'' %>>Semanal</option> 41 41 <option value="month" <%= data.preferences.defaultCalView =='month' ? 'selected="selected"':'' %>>Mensal</option> … … 72 72 73 73 <p class="input-group"> 74 <label for="defaultCalendar">Agenda padrão para Criação de Eventos:</label> 74 <label for="defaultCalendar">Agenda padrão para Criação de Eventos:</label> 75 75 <select name="defaultCalendar" > 76 76 <%for(var i = 0; i < data.calendars.length; i++){%> … … 79 79 </select> 80 80 </p> 81 82 <p class="input-group"> 83 <label for="dafaultImportCalendar">Agenda padrão para Importação de Eventos :</label> 84 <select name="dafaultImportCalendar" > 85 <option value=""> </option> 86 <%for(var i = 0; i < data.calendars.length; i++){ 87 if(data.signatureOf[data.calendars[i].id].isOwner == '1'){ 88 %> 89 <option value="<%=data.calendars[i].id%>"> <%= data.calendars[i].name %></option> 90 <%}}%> 91 </select> 92 </p> 81 82 <p class="input-group"> 83 <label for="dafaultImportCalendar">Agenda padrão para Importação de Eventos :</label> 84 <select name="dafaultImportCalendar" > 85 <option value=""> </option> 86 <%for(var i = 0; i < data.calendars.length; i++){ 87 if(data.signatureOf[data.calendars[i].id].isOwner == '1'){ 88 %> 89 <option value="<%=data.calendars[i].id%>"> <%= data.calendars[i].name %></option> 90 <%}}%> 91 </select> 92 </p> 93 93 94 94 <p class="input-group"> -
branches/2.5/prototype/modules/calendar/templates/shared_calendar.ejs
r7019 r8232 7 7 <dd class="calendar"> 8 8 <select class="calendar" name="calendar"> 9 <% 10 for(var i = 0; i < data.calendar.length; i++){ 11 if(data.signature[i].permission){ 12 if(data.signature[i].permission.acl.shared == false) 13 continue; 14 } 15 %> 16 <option value="<%=data.calendar[i].id%>"><%=data.calendar[i].name%></option> 9 <% 10 for(var i = 0; i < data.calendar.length; i++) 11 { 12 for(var ii = 0; ii < data.signature.length; ii++) 13 { 14 if(data.signature[ii].calendar.id === data.calendar[i].id && data.signature[ii].permission) 15 { 16 if(data.signature[ii].permission.acl.shared == false) 17 continue; 18 } 19 } 20 %> 21 <option value="<%=data.calendar[i].id%>"><%=data.calendar[i].name%></option> 17 22 18 23 <% … … 24 29 <dd class="<%=data.calendar ? "user-list" : "calendar-list"%>"> 25 30 <ul class="user-list"> 26 <% if (false) {27 for (var i=0; i< data.event.user.length; i++) {%>28 <li class="user">29 <div style="overflow:hidden; width:100%; display:table;">30 <input type="checkbox" value="">31 <input type="hidden" name="user[]" value="">32 <label class="name"></label>33 <label class="mail"></label>34 </div>35 <div class="shared-acl">36 <a class="button edit user-options-button-edit new">Editar permissões</a>37 <a class="button close new">Remover</a>38 </div>39 </li>40 <%}41 } else { %>42 31 <li class="not-user"><%=data.calendar ? "Não compartilhado." : "Nenhuma agenda selecionada"%></li> 43 <% } %>44 32 </ul> 45 33 </dd> -
branches/2.5/prototype/modules/filters/edit-filter.ejs
r7703 r8232 28 28 29 29 </select> 30 <input type="text" name="criteriaValue[]" />30 <input type="text" name="criteriaValue[]" value="<%= data.from %>" /> 31 31 <input type="hidden" name="criteriaType[]" value="from"/> 32 32 </fieldset> … … 53 53 54 54 </select> 55 <input type="text" name="criteriaValue[]" />55 <input type="text" name="criteriaValue[]" value="<%= data.subject %>" /> 56 56 <input type="hidden" name="criteriaType[]" value="subject"/> 57 57 </fieldset> … … 128 128 %> 129 129 </select> 130 <input type="checkbox" name="actionType[]" value="alertMessage" class="alertMessage"/> 131 <label><%= get_lang("Alert message filter by sender")%></label> 130 <% 131 if(preferences['use_alert_filter_criteria'] == "1") 132 {%> 133 <input type="checkbox" name="actionType[]" value="alertMessage" class="alertMessage"/> 134 <label><%= get_lang("Alert message filter by sender")%></label> 135 <%}%> 132 136 </fieldset> 133 137 <fieldset> -
branches/2.5/prototype/modules/filters/filters.css
r7612 r8232 47 47 48 48 .rule-list .rule .menu-control { 49 max-width: 100px;49 max-width: 80px; 50 50 float: right; 51 margin -top: -50px;51 margin: -50px 5px; 52 52 white-space: nowrap; 53 53 } 54 54 55 .rule-list .rule .menu-control .select { vertical-align: bottom; } 55 56 .rule-list .rule .menu-control .select input { margin: 5px 0 0 1px; } … … 122 123 } 123 124 .rule .menu-control .ui-button.disable,.rule .menu-control .ui-button.enable, .rule .menu-control .ui-button.update, .rule .menu-control .ui-button.close { top:5px; } 125 126 .rule .menu-control .ui-button.hidden { display: none; } 127 124 128 .filter-manager-window .ui-accordion-icons .ui-accordion-header a { padding-left: 2.2em; } 125 129 -
branches/2.5/prototype/modules/filters/filters.js
r7863 r8232 2 2 * Retorna as regras por remetente e que o usuário deseja ser avisado 3 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; 4 function getFromAlertRules() { 5 fromRules = []; 6 if(preferences['use_alert_filter_criteria'] == "1") 7 { 8 var filters = DataLayer.get("filter"); 9 var alertMessage; 10 var active; 11 for (var index in filters) { 12 alertMessage = filters[index]['alertMessage']; 13 active = filters[index]['enabled']; 14 for(var criterias in filters[index]['actions']) { 15 if (filters[index]['actions'][criterias]['type'] == 'fileinto' && alertMessage == 'true' && active == 'true') 16 fromRules[fromRules.length] = filters[index]['actions'][criterias]['parameter']; 17 } 18 } 19 20 } 21 return fromRules; 18 22 } 19 23 … … 401 405 }); 402 406 403 404 fromRules = getFromAlertRules(); 407 if(preferences['use_alert_filter_criteria'] == "1") 408 { 409 fromRules = getFromAlertRules(); 410 } 405 411 406 412 var BASE_PATH = '../prototype/'; … … 439 445 } 440 446 if(confirm(get_lang("Want to block the user") + " " + email + "?")){ 447 var has_folder_spam = false; 448 var folder_spam = "INBOX"+cyrus_delimiter+"Spam"; 449 $.each(cp_tree1, function(index, value){ 450 if(value.id == folder_spam){ 451 has_folder_spam = true; 452 return; 453 } 454 }); 455 if(!has_folder_spam){ 456 connector.loadScript('TreeS'); 457 create_new_folder("Spam","INBOX"); 458 } 441 459 DataLayer.put( 'filter', idd, 442 460 { name: email, isExact: false, 443 461 criteria:{ 0: {value: email, operator: "=", field: "from"} }, 444 actions: { 0: {parameter: "INBOX" + cyrus_delimiter + "Spam", type: "fileinto"}},462 actions: { 0: {parameter: folder_spam, type: "fileinto"}}, 445 463 enabled: true, 446 464 id: email, … … 461 479 462 480 DataLayer.codec( 'message', 'jqGrid', { 481 482 encoder: function( data ){ 483 484 return( data ); 485 486 } 487 }); 488 489 DataLayer.codec( 'message', 'jqGridSearch', { 463 490 464 491 encoder: function( data ){ … … 491 518 var criterias_ = new Array(); 492 519 493 var isExact = (list_container.find('[name="isExact"]:checked').val() == 'and') ? 'yes' : 'no'; 494 520 var isExact = (list_container.find('[name="isExact"]:checked').val() == 'and') ? 'yes' : 'no'; 521 495 522 for (i in criteria_) 496 523 if(criteria_[i] != "") … … 605 632 * Lista os filtros para o usuário 606 633 */ 607 function list_filters(html) {634 function list_filters(html) { 608 635 outOfficeVerify(); 609 for (var index in selectedMessages) { 636 for (var index in selectedMessages) 637 { 610 638 delete selectedMessages[index]; 611 639 } 612 if(html){ 613 if( ! $(".filters-windows").length ) 614 container = $('.expressomail-module-container').append("<div class='filters-windows'></div>").find(".filters-windows").html( html ).find(".expresso-window-container"); 615 list_container = $('.expressomail-module-container').find(".rule-list-container"); 616 } 617 list_container = $(".expresso-window-filters").dialog({ 618 title: get_lang('Filters'), 619 width:700, 620 modal: true, 621 resizable: false, 622 closeOnEscape:true, 623 close:function(event, ui) { 624 event.stopPropagation(); 625 if(list_container.find(".cancel").length) 626 list_container.find(".cancel").trigger('click'); 627 $(".dialog-head-buttonpane").hide(); 628 }, 629 open: function () { 630 $(".ui-dialog .ui-dialog-titlebar") 631 .append('<a href="#" class="ui-dialog-titlebar-minimize ui-corner-all" role="button"><span class="ui-icon ui-icon-minusthick">minimize</span></a>') 632 .find('.ui-dialog-titlebar-minimize').click(function() { 633 $(".ui-dialog-buttonpane, .ui-dialog-content").toggle(); 634 $(".ui-icon-minusthick, .ui-icon-newwin").toggleClass('ui-icon-minusthick').toggleClass('ui-icon-newwin'); 635 }); 636 $(".dialog-head-buttonpane").show(); 637 }, 638 autoOpen: false, 639 buttons: [{ 640 text : get_lang("Close"), 641 click : function() { 642 $( this ).dialog( "close" ); 643 } 644 }] 645 }); 646 $(".ui-dialog-titlebar").after("<div class='dialog-head-buttonpane ui-dialog-buttonpane ui-widget-content ui-helper-clearfix' style='background-color: rgb(224, 238, 238); '><div class='ui-dialog-buttonset header-buttonpane'></div></div>"); 647 $(".dialog-head-buttonpane").css("padding", "5px"). 648 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(); 649 650 $(".ui-dialog-buttonpane.ui-widget-content").css("background-color", "#E0EEEE"); 640 641 initialize_container(html); // Inicializa o container do diálogo de filtros 642 643 list_container = create_filter_dialog(); // Cria a estrutura básica do diálogo 644 651 645 var list = DataLayer.render( BASE_PATH + 'modules/filters/filter-list.ejs', DataLayer.get("filter:detail", true)); 652 646 list_container.html(list).find(".button").button(); 653 647 list_container.find(".alldelete").button("disable"); 648 list_container.find(".alldisable").button("disable"); 649 list_container.find(".allenable").button("disable"); 650 654 651 list_container.find(".rule-list").selectable({ 655 652 selecting: function(event, ui) { … … 660 657 } 661 658 }); 659 660 list_container.find(".rule-list li").click(function(){ 661 if(list_container.find(".select").children("input:checked").length){ 662 list_container.find(".alldelete").button("enable"); 663 list_container.find(".alldisable").button("enable"); 664 list_container.find(".allenable").button("enable"); 665 } else { 666 list_container.find(".alldelete").button("disable"); 667 list_container.find(".alldisable").button("disable"); 668 list_container.find(".allenable").button("disable"); 669 } 670 }); 662 671 663 672 list_container.find( ".menu-control .button" ).filter(".update").button({ … … 716 725 DataLayer.render( BASE_PATH + 'modules/filters/init.ejs', {},list_filters); 717 726 getFromAlertRules(); 727 if (get_current_folder() == "INBOX") 728 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); 718 729 }); 719 730 … … 868 879 869 880 list_container.parent().find(".button.add:first").click(function(){ 870 list_container.parent().find(".dialog-head-buttonpane").addClass("hidden"); 871 DataLayer.render( BASE_PATH + 'modules/filters/edit-filter.ejs', {folders : DataLayer.get("folder", true), delimiter: cyrus_delimiter},function(html){ 872 list_container.html(html); 873 var accord = list_container.find(".rule-details-container").accordion({autoHeight: false}); 874 list_container.find(".button").button().filter(".forth").click(function(){ 875 accord.accordion('activate',1); 876 }).end().filter(".forth2").click(function(){ 877 accord.accordion('activate',2); 878 }).end().filter(".back").click(function(){ 879 accord.accordion('activate',0); 880 }).end().filter(".back2").click(function(){ 881 accord.accordion('activate',1); 882 }).end().filter(".cancel").click(function(){ 883 DataLayer.render( BASE_PATH + 'modules/filters/init.ejs', {},list_filters); 884 }).end().filter(".submit").click(function() { 885 if(valid_save()) 886 $(this).submit(); 887 else 888 return; 889 DataLayer.commit( 'filter',false,function(){ 890 if($('#gbox_fields-search-messages-grid').length > 0 && action != '') { 891 for (var index in selectedMessages) { 892 set_message_flag(index, action, false); 893 } 894 } 895 DataLayer.render( BASE_PATH + 'modules/filters/init.ejs', {},list_filters); 896 getFromAlertRules(); 897 }); 898 }).end().filter('.button.search').click(function() { 899 if(valid_save()) 900 showGridMessages($(this)); 901 else 902 return; 903 }); // end function click 904 }); // end DataLayer.render 881 render_new_rule(); // Renderiza a tela de criação de nova regra de filtragem. 905 882 }); 906 883 list_container.parent().find(".button.add.vacation").click(function(){ … … 932 909 } 933 910 911 /* 912 Inicializa o container do diálogo de gerenciamento de filtros. 913 */ 914 function initialize_container (html) { 915 if(html) 916 { 917 if(!$(".filters-windows").length) 918 { 919 container = $('.expressomail-module-container').append("<div class='filters-windows'></div>").find(".filters-windows").html(html).find(".expresso-window-container"); 920 } 921 } 922 } 923 924 /* 925 Cria a estrutura básica do diálogo de gerenciamento de filtros. 926 */ 927 function create_filter_dialog () { 928 var dialog = $(".expresso-window-filters").dialog( 929 { 930 title: get_lang('Filters'), 931 width: 700, 932 modal: true, 933 resizable: false, 934 closeOnEscape: true, 935 close: function(event, ui) 936 { 937 event.stopPropagation(); 938 if(list_container.find(".cancel").length) list_container.find(".cancel").trigger('click'); 939 $(".dialog-head-buttonpane").hide(); 940 }, 941 open: function() 942 { 943 $(".ui-dialog .ui-dialog-titlebar").append('<a href="#" class="ui-dialog-titlebar-minimize ui-corner-all" role="button"><span class="ui-icon ui-icon-minusthick">minimize</span></a>').find('.ui-dialog-titlebar-minimize').click(function() 944 { 945 $(".ui-dialog-buttonpane, .ui-dialog-content").toggle(); 946 $(".ui-icon-minusthick, .ui-icon-newwin").toggleClass('ui-icon-minusthick').toggleClass('ui-icon-newwin'); 947 }); 948 $(".dialog-head-buttonpane").show(); 949 }, 950 autoOpen: false, 951 buttons: [ 952 { 953 text: get_lang("Close"), 954 click: function() 955 { 956 $(this).dialog("close"); 957 } 958 }] 959 }); 960 961 $(".ui-dialog-titlebar").after("<div class='dialog-head-buttonpane ui-dialog-buttonpane ui-widget-content ui-helper-clearfix' style='background-color: rgb(224, 238, 238); '><div class='ui-dialog-buttonset header-buttonpane'></div></div>"); 962 $(".dialog-head-buttonpane").css("padding", "5px"). 963 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(); 964 $(".ui-dialog-buttonpane.ui-widget-content").css("background-color", "#E0EEEE"); 965 966 return dialog; 967 } 968 969 /* 970 Renderiza a tela de adição de uma nova regra de filtragem, 971 dentro do diálogo de gerenciamento de filtros. 972 */ 973 function render_new_rule (from, subject) { 974 list_container.parent().find(".dialog-head-buttonpane").addClass("hidden"); 975 var data = { 976 folders: DataLayer.get("folder", true), 977 delimiter: cyrus_delimiter, 978 from: from, 979 subject: subject ? html_entities(subject) : subject 980 } 981 982 DataLayer.render(BASE_PATH + 'modules/filters/edit-filter.ejs', data, function(html) 983 { 984 list_container.html(html); 985 var accord = list_container.find(".rule-details-container").accordion( 986 { 987 autoHeight: false 988 }); 989 list_container.find(".button").button().filter(".forth").click(function() 990 { 991 accord.accordion('activate', 1); 992 }).end().filter(".forth2").click(function() 993 { 994 accord.accordion('activate', 2); 995 }).end().filter(".back").click(function() 996 { 997 accord.accordion('activate', 0); 998 }).end().filter(".back2").click(function() 999 { 1000 accord.accordion('activate', 1); 1001 }).end().filter(".cancel").click(function() 1002 { 1003 DataLayer.render(BASE_PATH + 'modules/filters/init.ejs', {}, list_filters); 1004 }).end().filter(".submit").click(function() 1005 { 1006 if(valid_save()) $(this).submit(); 1007 else return; 1008 DataLayer.commit('filter', false, function() 1009 { 1010 if($('#gbox_fields-search-messages-grid').length > 0 && action != '') 1011 { 1012 for(var index in selectedMessages) 1013 { 1014 set_message_flag(index, action, false); 1015 } 1016 } 1017 DataLayer.render(BASE_PATH + 'modules/filters/init.ejs', {}, list_filters); 1018 getFromAlertRules(); 1019 }); 1020 }).end().filter('.button.search').click(function() 1021 { 1022 if(valid_save()) showGridMessages($(this)); 1023 else return; 1024 }); // end function click 1025 }); // end DataLayer.render 1026 } 934 1027 935 1028 /* Inicializa os filtros e chama o list_filters … … 955 1048 } 956 1049 } 957 $.each(fromRules, function(index, value) { 958 if(value == folder){ 959 for(var i=0; i < filters_c['criteria'].length; i++){ 960 if(filters_c['criteria'][i].field == 'from'){ 961 from = filters_c['criteria'][i].value; 962 } 963 } 964 cExecute ("$this.imap_functions.removeFlagMessagesFilter&folder="+folder+"&from="+from, function(){}); 965 return false; 966 } 967 }); 968 } 1050 1051 if(preferences['use_alert_filter_criteria'] == "1") 1052 { 1053 $.each(fromRules, function(index, value) { 1054 if(value == folder){ 1055 for(var i=0; i < filters_c['criteria'].length; i++){ 1056 if(filters_c['criteria'][i].field == 'from'){ 1057 from = filters_c['criteria'][i].value; 1058 } 1059 } 1060 cExecute ("$this.imap_functions.removeFlagMessagesFilter&folder="+folder+"&from="+from, function(){}); 1061 return false; 1062 } 1063 }); 1064 } 1065 } -
branches/2.5/prototype/modules/filters/interceptors/FilterMapping.php
r7726 r8232 550 550 $actions['type'] = $rule_apply['actions'][0]['type']; 551 551 $actions['parameter'] = $rule_apply['actions'][0]['parameter']; 552 /* Hardcoded */ 553 $actions['keep'] = false; 552 553 $actions['keep'] = is_array($rule_apply['actions'][1]); 554 if ($actions['keep']) 555 $actions['value'] = $rule_apply['actions'][0]['parameter']; 554 556 555 557 //$messages = $rule_apply['applyMessages']; -
branches/2.5/prototype/modules/mail/css/followupflag.css
r6996 r8232 242 242 .alert-options { 243 243 border: none; 244 min-width:80%; 244 245 } 245 246 .confirm-alarm { -
branches/2.5/prototype/modules/mail/js/foldertree.js
r8117 r8232 108 108 } 109 109 110 function draw_new_tree_folder(callback, force){ 111 112 var folders = normalizeFolder( Folder.get( false, force ) ); 113 114 if(preferences.use_local_messages == 1){ 115 116 if(expresso_mail_archive.folders && !expresso_offline && expresso_mail_archive.enabled == true) { //MailArchive 117 //pega pastas locais do mailarchiver e insere no array de pastas 110 function refreshTreeview(){ 111 //Atualização e correção dos ícones expandir/contrair 112 $.each($('.treeview').find('.expandable, .collapsable').filter(':not(.lastExpandable,.lastCollapsable)'),function(i,v){ 113 if ( $(v).find('ul').css('display') == "block" ){ 114 $(v).removeClass().addClass('collapsable'); 115 $(v).find('.hitarea:first').removeClass().addClass('hitarea collapsable-hitarea') 116 } 117 }); 118 //Última árvore de pastas 119 $.each($('.treeview').find('.lastExpandable,.lastCollapsable'),function(i,v){ 120 if ( $(v).find('ul').css('display') == "block" ){ 121 $(v).removeClass().addClass('collapsable lastCollapsable'); 122 $(v).find('.hitarea:first').removeClass('expandable-hitarea').addClass('collapsable-hitarea'); 123 $(v).find('.hitarea:first').removeClass('lastExpandable-hitarea').addClass('lastCollapsable-hitarea'); 124 } 125 }); 126 } 127 128 function draw_new_tree_folder(callback, force) 129 { 130 131 var folders = normalizeFolder(Folder.get(false, force)); 132 133 if(preferences.use_local_messages == 1) 134 { 135 136 if(expresso_mail_archive.folders && !expresso_offline && expresso_mail_archive.enabled == true) 137 { //MailArchive 138 //pega pastas locais do mailarchiver e insere no array de pastas 118 139 expresso_mail_archive.getFoldersList("home"); 119 140 treeFolders = expresso_mail_archive.folders; 120 141 121 for(var i=0; i<treeFolders.length; i++ ){ 142 for(var i = 0; i < treeFolders.length; i++) 143 { 122 144 mount_children_localfolders_list(treeFolders[i]); 123 145 } 124 125 for(var i = 0; i < treeFolders.length; i++){ 146 147 for(var i = 0; i < treeFolders.length; i++) 148 { 126 149 folders.push(treeFolders[i]); 127 150 } 128 129 } 130 } 131 132 if(!selected){ 151 152 } 153 } 154 155 if(!selected) 156 { 133 157 selected = "INBOX"; 134 158 } … … 137 161 var tree2 = new Array(); 138 162 var tree3 = new Array(); 139 140 for (var i=0; i<folders.length; i++) { 141 142 if(/*/^INBOX/.test(folders[i].id)*/folders[i].id.substr(0,5) == "INBOX") { 143 if (!unorphanize(tree1, folders[i])) { 163 164 for(var i = 0; i < folders.length; i++) 165 { 166 167 if(/*/^INBOX/.test(folders[i].id)*/folders[i].id.substr(0,5) == "INBOX") 168 { 169 if(!unorphanize(tree1, folders[i])) 170 { 144 171 folders[i].children = new Array(); 145 172 … … 147 174 } 148 175 } 149 else if (/*/^user/.test(folders[i].id)*/folders[i].id.substr(0,4) == "user") { 150 if (!unorphanize(tree2, folders[i])) { 176 else if(/*/^user/.test(folders[i].id)*/folders[i].id.substr(0,4) == "user") 177 { 178 if(!unorphanize(tree2, folders[i])) 179 { 151 180 folders[i].children = new Array(); 152 181 tree2.push(folders[i]); 153 182 } 154 183 } 155 else if (/*/^local_messages/.test(folders[i].id)*/folders[i].id.substr(0,14) == "local_messages") { 156 157 tree3.push(folders[i]); 158 159 } 160 } 161 162 for(var i =0; i<tree1.length; i++){ 184 else if(/*/^local_messages/.test(folders[i].id)*/folders[i].id.substr(0,14) == "local_messages") 185 { 186 187 tree3.push(folders[i]); 188 189 } 190 } 191 192 for(var i = 0; i < tree1.length; i++) 193 { 163 194 count_unseen_children(tree1[i]); 164 195 } 165 for(var i =0; i<tree2.length; i++){ 196 for(var i = 0; i < tree2.length; i++) 197 { 166 198 count_unseen_children(tree2[i]); 167 199 } 168 for(var i =0; i<tree3.length; i++){ 200 for(var i = 0; i < tree3.length; i++) 201 { 169 202 count_unseen_children(tree3[i]); 170 203 } … … 174 207 var shared_acls = {}; 175 208 176 $.each(cp_tree2, function(index, value){ 209 $.each(cp_tree2, function(index, value) 210 { 177 211 shared_acls[value.id] = value.acl_share; 178 212 }); 179 180 if(preferences.use_local_messages == 1){ 181 $("#content_folders").removeClass("menu-degrade").parent().removeClass("image-menu"); 182 mail_archive_url = mail_archive_protocol + "://" + mail_archive_host + ":" + mail_archive_port + "/admin"; 183 } 184 185 var html = DataLayer.render('../prototype/modules/mail/templates/detailedfoldertree.ejs', {folders: [tree1, tree2, tree3]}); 186 var folders_html = $("#content_folders").html(html).find(".mainfoldertree").treeview({ 187 persist: "cookie", 188 animated: "fast" 189 }).find(".folder").unbind("click").click(function(event){ 190 191 if ($(this).next().hasClass("local-connect")) { 213 214 if(preferences.use_local_messages == 1) 215 { 216 $("#content_folders").removeClass("menu-degrade").parent().removeClass("image-menu"); 217 mail_archive_url = mail_archive_protocol + "://" + mail_archive_host + ":" + mail_archive_port + "/admin"; 218 } 219 220 var html = DataLayer.render('../prototype/modules/mail/templates/detailedfoldertree.ejs', { 221 folders: [tree1, tree2, tree3] 222 }); 223 var folders_html = $("#content_folders").html(html).find(".mainfoldertree").treeview( 224 { 225 persist: "cookie", 226 animated: "fast" 227 }).find(".folder").unbind("click").click(function(event) 228 { 229 230 if($(this).next().hasClass("local-connect")) 231 { 192 232 return; 193 233 } 194 234 195 if ($(this).hasClass("local-folder")) { 235 if($(this).hasClass("local-folder")) 236 { 196 237 return; 197 238 } 198 239 199 240 // MUDANÇA DE PASTAS! 200 var target = $(this); 201 241 var target = $(this); 242 202 243 if($(".folders-loading").length) 244 { 203 245 return; 204 246 } 247 205 248 if($(event.target).parent().is(".float-menu")) 249 { 206 250 return; 207 208 if( target.is('.collapsable-hitarea, .expandable-hitarea, .lastCollapsable-hitarea, .lastExpandable-hitarea, .treeview ,.folder_unseen,.ui-icon, .float-menu, .new_folder, .folders-loading, .head_folder, .shared-folders') ) 251 } 252 253 if(target.is('.collapsable-hitarea, .expandable-hitarea, .lastCollapsable-hitarea, .lastExpandable-hitarea, .treeview ,.folder_unseen,.ui-icon, .float-menu, .new_folder, .folders-loading, .head_folder, .shared-folders')) 254 { 209 255 return; 210 211 if( target.parent().find(".new_folder").length) 256 } 257 258 if(target.parent().find(".new_folder").length) 259 { 212 260 return; 213 214 if( !target.attr('id') ) 261 } 262 263 if(!target.attr('id')) 264 { 215 265 target = target.parent(); 216 if (target[0] == $(".mainfoldertree")[0]) return; 266 } 267 if(target[0] == $(".mainfoldertree")[0]) 268 { 269 return; 270 } 271 217 272 var uiId = target.attr('id'); 218 273 var child = target.find('.folder'); 219 220 if(!target.is('.mainfoldertree > .expandable-hitarea, .mainfoldertree > .collapsable-hitarea')){ 274 275 if(!target.is('.mainfoldertree > .expandable-hitarea, .mainfoldertree > .collapsable-hitarea')) 276 { 221 277 $('.filetree span.folder.selected').removeClass('selected'); 222 278 $(target).children('.folder').addClass('selected'); … … 224 280 $(this).addClass("folders-loading"); 225 281 selected = target.attr('id'); 226 change_folder(target.attr('id'), child.attr('title')); 227 228 $.ajax({ 229 url : "controller.php?"+ $.param( { action: "$this.imap_functions.get_folders_list", folder: target.attr('id') } ), 230 success : function(data){ 231 data = connector.unserialize(data); 232 233 if(data) 282 change_folder(target.attr('id'), child.attr('title')); 283 284 $.ajax( 285 { 286 url: "controller.php?" + $.param( 287 { 288 action: "$this.imap_functions.get_folders_list", 289 folder: target.attr('id') 290 }), 291 success: function(data) 292 { 293 data = connector.unserialize(data); 294 295 if(data) 296 { 234 297 build_quota(data); 235 } 298 } 299 } 236 300 }); 237 301 238 }).filter('.followup-messages').click(function(event, ui){ 302 }).filter('.followup-messages').click(function(event, ui) 303 { 239 304 search_emails("UNDELETED KEYWORD \"$Followupflagged\""); 240 305 }).end().end(); 241 242 $('.upper').droppable({ 243 over: function(event, ui){ 244 $('#content_folders').autoscroll({ 306 307 refreshTreeview(); 308 309 $('.upper').droppable( 310 { 311 over: function(event, ui) 312 { 313 $('#content_folders').autoscroll( 314 { 245 315 direction: 'up', 246 316 step: 150, … … 248 318 }); 249 319 }, 250 out: function(event, ui){ 320 out: function(event, ui) 321 { 251 322 $('#content_folders').autoscroll('destroy'); 252 323 } 253 324 }); 254 325 255 $('.lower').droppable({ 256 over: function(event, ui){ 257 $('#content_folders').autoscroll({ 326 $('.lower').droppable( 327 { 328 over: function(event, ui) 329 { 330 $('#content_folders').autoscroll( 331 { 258 332 direction: 'down', 259 333 step: 150, … … 261 335 }); 262 336 }, 263 out: function(event, ui){ 337 out: function(event, ui) 338 { 264 339 $('#content_folders').autoscroll('destroy'); 265 340 } … … 268 343 269 344 270 folders_html.find('[id="'+selected+'"]').children().addClass("selected"); 271 $(".folder").not(".head_folder").not(".shared-folders").not(".shared-folders + ul .folder").parent().find(".folder").not(".head_folder,.inbox,.drafts,.sent,.spam,.trash").draggable({ 345 folders_html.find('[id="' + selected + '"]').children().addClass("selected"); 346 $(".folder") 347 .not(".head_folder") 348 .not(".shared-folders") 349 .not(".shared-folders + ul .folder") 350 .parent() 351 .find(".folder") 352 .not(".head_folder,.inbox,.drafts,.sent,.spam,.trash") 353 .draggable( 354 { 272 355 // DRAG DE PASTAS 273 start : function(){ 356 start: function() 357 { 274 358 $(this).css("color", "gray"); 275 359 $('.upper, .lower').show(); 276 $(".lower").css("top", ($("#content_folders").height() -18) + $("#content_folders").offset().top);360 $(".lower").css("top", ($("#content_folders").height() - 18) + $("#content_folders").offset().top); 277 361 }, 278 stop : function(){ 362 stop: function() 363 { 279 364 $(this).css("color", ""); 280 365 $('.upper, .lower').hide(); 281 366 }, 282 367 revert: "invalid", 283 helper: function(event){ 284 if($.trim(($(this).text().split("["))[0]).length > 18) 285 return $(DataLayer.render('../prototype/modules/mail/templates/draggin_box.ejs', {texto : (($(this).text().split("["))[0]).substring(0,18) + "...", type: "folder"})); 286 return $(DataLayer.render('../prototype/modules/mail/templates/draggin_box.ejs', {texto : (($(this).text().split("["))[0]), type: "folder"})); 368 helper: function(event) 369 { 370 if($.trim(($(this).text().split("["))[0]).length > 18) return $(DataLayer.render('../prototype/modules/mail/templates/draggin_box.ejs', { 371 texto: (($(this).text().split("["))[0]).substring(0, 18) + "...", 372 type: "folder" 373 })); 374 return $(DataLayer.render('../prototype/modules/mail/templates/draggin_box.ejs', { 375 texto: (($(this).text().split("["))[0]), 376 type: "folder" 377 })); 287 378 }, 288 379 delay: 150, 289 380 refreshPositions: true, 290 zIndex 381 zIndex: 2700, 291 382 //scroll: true, 292 383 //scrollSensitivity: 100, … … 294 385 containment: $("#divAppbox") 295 386 }); 296 $(".folder").not(".head_folder").not(".shared-folders").parent().find(".folder").not(".head_folder,.inbox,.drafts,.sent,.spam,.trash").end().droppable({ 387 $(".folder") 388 .not(".head_folder") 389 .not(".shared-folders") 390 .parent() 391 .find(".folder") 392 .not(".head_folder,.inbox,.drafts,.sent,.spam,.trash") 393 .end() 394 .droppable( 395 { 297 396 //DROP DE PASTAS 298 over : function(a, b){ 397 over: function(a, b) 398 { 299 399 //INICIO : SE A PASTA CONTER FILHAS EXPANDE 400 $(b.helper).find(".draggin-folder,.draggin-mail").css("color", "green"); 300 401 over = $(this); 301 402 $(this).addClass("folder-over"); 302 if(($(this)[0] != $(this).parent().find(".head_folder")[0])) 303 if($(this).prev()[0]) 304 if($(this).parent().find(".expandable-hitarea")[0] == $(this).prev()[0]){ 305 setTimeout(function(){ 306 if(over.hasClass("folder-over")){ 307 over.prev().trigger("click"); 308 } 309 }, 500); 310 403 if(($(this)[0] != $(this).parent().find(".head_folder")[0])) if($(this).prev()[0]) if($(this).parent().find(".expandable-hitarea")[0] == $(this).prev()[0]) 404 { 405 setTimeout(function() 406 { 407 if(over.hasClass("folder-over")) 408 { 409 over.prev().trigger("click"); 311 410 } 411 }, 500); 412 413 } 312 414 //FIM : SE A PASTA CONTER FILHAS EXPANDE 313 //$("#content_folders").stop().scrollTo($(this), {axis:'y', margin:true, offset:-50, duration:400});314 415 //SETA BORDA EM VOLTA DA PASTA 315 416 // 316 417 }, 317 out : function(){ 418 out: function(a, b) 419 { 318 420 //RETIRA BORDA EM VOLTA DA PASTA 421 $(b.helper).find(".draggin-folder,.draggin-mail").css("color", ""); 319 422 $(this).removeClass("folder-over"); 320 423 }, 321 drop : function(event, ui){ 424 drop: function(event, ui) 425 { 322 426 $(this).removeClass("folder-over"); 323 427 324 if($(this).parent().attr('id') == undefined){ 428 if($(this).parent().attr('id') == undefined) 429 { 325 430 var folder_to = 'INBOX'; 326 431 var to_folder_title = get_lang("Inbox"); 327 }else{ 432 } 433 else 434 { 328 435 var folder_to = $(this).parent().attr('id'); 329 436 var to_folder_title = $(this).attr('title'); 330 } 437 } 331 438 var folder_to_move = ui.draggable.parent().attr('id'); 332 439 var border_id = ui.draggable.find("input[type=hidden]").attr("name"); 333 440 // eventnsagens : SE O DROP VIER DA LISTA DE eventNSAGENS : 334 if(folder_to_move == "tbody_box"){ 335 move_msgs2(get_current_folder(), 'selected', 0, folder_to, to_folder_title,true); 441 if(folder_to_move == "tbody_box") 442 { 443 move_msgs2(get_current_folder(), 'selected', 0, folder_to, to_folder_title, true); 336 444 //Correção para realinhamento da grid de mensagens no navegador Chrome. 337 if(is_webkit){ 445 if(is_webkit) 446 { 338 447 var table = $('#table_box'); 339 448 $('#divScrollMain_0').html(''); … … 344 453 } 345 454 //SE FOR DE UMA PESQUISA RAPIDA 346 else if(ui.draggable.parents('[id^="content_id_"]')[0]){ 347 move_search_msgs("content_id_"+border_id, folder_to, to_folder_title); 455 else if(ui.draggable.parents('[id^="content_id_"]')[0]) 456 { 457 move_search_msgs("content_id_" + border_id, folder_to, to_folder_title); 348 458 return; 349 459 } 350 460 // eventnsagens : SE O DROP VIER DE UMA ABA ABERTA 351 else if(folder_to_move == "border_tr"){ 461 else if(folder_to_move == "border_tr") 462 { 352 463 var id_msg = border_id.split("_")[0]; 353 folder = $("#input_folder_" +border_id+"_r")[0] ? $("#input_folder_"+border_id+"_r").val() : (openTab.imapBox[border_id] ? openTab.imapBox[border_id]:get_current_folder());464 folder = $("#input_folder_" + border_id + "_r")[0] ? $("#input_folder_" + border_id + "_r").val() : (openTab.imapBox[border_id] ? openTab.imapBox[border_id] : get_current_folder()); 354 465 alternate_border(border_id); 355 move_msgs2(folder, id_msg, border_id, folder_to, to_folder_title, true);466 move_msgs2(folder, id_msg, border_id, folder_to, to_folder_title, true); 356 467 return; 357 468 } 358 469 // SE O DROP VIER DA LISTA DE PASTAS 359 else{ 360 if($(ui.draggable[0]).parent().find("input").val() == "localFolder" && $(this).parents("li").find("input").first().val() != "localFolder") 361 { 362 return write_msg(get_lang("It isn't possible to send a folder by Archiver to My folders")); 363 } 364 else if(!$(ui.draggable[0]).parent().find("input").val() && $(this).parents("li").find("input").first().val() == "localFolder") 365 { 366 return write_msg(get_lang("It isn't possible to send a folder by My folders to Archiver")); 367 } 368 var folder_to_exist = folder_to_move.split(cyrus_delimiter); 369 folder_to_exist = folder_to+cyrus_delimiter+folder_to_exist[folder_to_exist.length-1]; 370 470 else 471 { 472 if($(ui.draggable[0]).parent().find("input").val() == "localFolder" && $(this).parents("li").find("input").first().val() != "localFolder") 473 { 474 return write_msg(get_lang("It isn't possible to send a folder by Archiver to My folders")); 475 } 476 else if(!$(ui.draggable[0]).parent().find("input").val() && $(this).parents("li").find("input").first().val() == "localFolder") 477 { 478 return write_msg(get_lang("It isn't possible to send a folder by My folders to Archiver")); 479 } 480 var folder_to_exist = folder_to_move.split(cyrus_delimiter); 481 folder_to_exist = folder_to + cyrus_delimiter + folder_to_exist[folder_to_exist.length - 1]; 482 371 483 //VERIFICA SE EXISTE UMA eventNSAGENS ABERTA NESTA PASTA E NAS SUAS FILHAS 372 373 if(valid_tabs(ui.draggable.parent().find("li"), folder_to_move)){484 if(valid_tabs(ui.draggable.parent().find("li"), folder_to_move)) 485 { 374 486 return; 375 487 } 376 488 //FIM : VERIFICA SE EXISTE UMA eventNSAGENS ABERTA NESTA PASTA E NAS SUAS FILHAS; 377 378 489 // VALIDA SE O USUARIO ESTA TENTANDO MOVER A PASTA PARA O eventSMO LOCAL 379 if(folder_to_exist == folder_to_move){ 490 if(folder_to_exist == folder_to_move) 491 { 380 492 return write_msg(get_lang("Thie folder is already in this place")); 381 493 } 382 494 383 495 // VALIDA SE O USUARIO ESTA TENTANDO MOVER A PASTA ABERTA NO momentO 384 if(folder_to_move == get_current_folder()){ 496 if(folder_to_move == get_current_folder()) 497 { 385 498 return write_msg(get_lang("It's not possible move this folder, because it is being used in the moment!")); 386 499 } 387 500 388 501 // VALIDA SE O USUARIO ESTA TENTANDO MOVER UMA PASTA FILHA DA PASTA ABERTA NO momentO 389 if(ui.draggable.parent().find(".selected")[0]){ 502 if(ui.draggable.parent().find(".selected")[0]) 503 { 390 504 return write_msg(get_lang("It's not possible move this folder, because its subfolder is being used in the moment!")); 391 505 } 392 506 393 507 // VALIDA SE O USUARIO ESTA TENTANDO MOVER UMA PASTA PAI PARA DENTRO DE UMA FILHA 394 if(ui.draggable.parent().find('[id="'+folder_to+'"]')[0]){ 508 if(ui.draggable.parent().find('[id="' + folder_to + '"]')[0]) 509 { 395 510 return write_msg(get_lang("It's not possible to move this folder to its subfolders!")); 396 } 397 398 if($('[id="'+folder_to_exist+'"]').length){ 511 } 512 513 if($('[id="' + folder_to_exist + '"]').length) 514 { 399 515 return write_msg(get_lang("Can not move this folder to this location, because the target has already a folder with this name")); 400 516 } 401 517 402 518 $(this).addClass("folders-loading"); 403 519 404 520 405 if($(this).parents("li").find("input").first().val() == "localFolder"){ 521 if($(this).parents("li").find("input").first().val() == "localFolder") 522 { 406 523 var idFolder = $(this).parent().attr("id").split("_")[2]; 407 524 408 525 expresso_mail_archive.moveFolder(idFolder, folder_to_move.split("_")[2]); 409 cExecute("$this.imap_functions.get_folders_list&onload=true", update_menu); 410 } else { 411 $.ajax({ 412 url : "controller.php?"+ $.param( { action: "$this.imap_functions.move_folder", folder_to_move: folder_to_move, folder_to: folder_to } ), 413 success : function(data){ 526 cExecute("$this.imap_functions.get_folders_list&onload=true", update_menu); 527 } 528 else 529 { 530 $.ajax( 531 { 532 url: "controller.php?" + $.param( 533 { 534 action: "$this.imap_functions.move_folder", 535 folder_to_move: folder_to_move, 536 folder_to: folder_to 537 }), 538 success: function(data) 539 { 414 540 cExecute("$this.imap_functions.get_folders_list&onload=true", force_update_menu); 415 541 data = connector.unserialize(data); 416 if(data == "Permission denied"){ 542 if(data == "Permission denied") 543 { 417 544 write_msg(get_lang("Permission denied")); 418 }else if(data){ 545 } 546 else if(data) 547 { 419 548 write_msg(get_lang("The folder was successfully moved")); 420 } else { 549 } 550 else 551 { 421 552 write_msg(get_lang("ERROR moving your folder.")); 422 553 } … … 427 558 } 428 559 }); 429 $(".folder").not(".shared-folders, .followup-messages").parent().find(".folder").hover( 430 function(){ 431 //CASO A LI NÃO TENHA UM eventNU FLUTUANTE AINDA, O eventNU É ADICIONADO! 432 if(!$(this).children(":last").hasClass("float-menu") && !$(this).children(":last").hasClass("new_folder") && !($(this).next().hasClass("local-connect"))){ /*se houver a classe local-connect, não adiciona o botão de conectar*/ 433 var folder_ = $(this); 434 var folder_name; 435 var shared = { 436 head : false, 437 valid : false 438 }; 439 if(folder_.parent().attr('id')){ 440 folder_name = folder_.parent().attr('id').split(cyrus_delimiter); 441 folder_name = folder_name[folder_name.length -1]; 442 shared.valid = folder_.parent().attr('id').search("user/") == 0 ? true : false; 443 }else 444 folder_name = "Root"; 445 446 if(shared.valid){ 447 shared.head = folder_.parent().attr('id').split(cyrus_delimiter).length == 2 ? true : false; 448 var folder_name_parts = folder_.parent().attr('id').split(cyrus_delimiter); 449 var acls = shared_acls[folder_name_parts[0]+cyrus_delimiter+folder_name_parts[1]]; 450 } 451 452 html = DataLayer.render("../prototype/modules/mail/templates/float_folder_menu.ejs", {name_folder : folder_name, flag : shared, acl : acls}); 453 //FUNÇÃO DO eventNU FLUTUANTE EDITAR < BEGIN 454 var esc = false; 455 $(folder_).append(html).find(".float-menu-edit").click(function(){ 456 var folder_id = $(this).parents(".closed:first").attr('id'); 457 var name = $.trim($(this).parents(".closed:first").find("span:first").text().split("[")[0]); 458 if($(this).parents(".closed:first").find("span:first").hasClass("selected")) 459 return write_msg(get_lang("It's not possible rename this folder, because it is being used in the moment!")); 460 if($(this).parents(".closed:first").find("span.selected").length) 461 return write_msg(get_lang("It's not possible rename this folder, because its subfolder is being used in the moment!")); 462 if(valid_tabs($(this).parents("li:first").find("li"), folder_id)) 463 return; 464 $(this).parents(".closed:first").find("span:first").empty().append("<input class='new_folder folder' type='text' maxlength='100'></input>"); 465 $(".new_folder").focus().keydown(function(event){ 466 event.stopPropagation(); 467 if(event.keyCode == 13){ 468 if($(this).val() != ""){ 469 /* Verifica se existe caracteres especiais no nome da pasta ou se existe "local_" 470 * em parte do nome (palavra reservada para pastas locais) */ 471 if($(this).val().match(/[\`\~\^\<\>\|\\\"\!\@\#\$\%\&\*\+\(\)\[\]\{\}\?;:]/gi) || $(this).val().indexOf("local_") != -1){ 472 return write_msg(get_lang("cannot create folder. try other folder name")); 473 } 474 var new_name = folder_id.replace(/[a-zA-Z0-9á-úÁ-Ú,=^\s_-]+$/, $(this).val()); 475 if($('[id="'+new_name+'"]').length){ 476 $(".folders-loading").removeClass("folders-loading"); 477 write_msg(get_lang("Mailbox already exists")); 478 return draw_new_tree_folder(); 479 } 480 $(".new_folder").parent().addClass("folders-loading"); 481 482 if($(this).parents("li").first().attr("id").indexOf("local_messages_") != -1){ 483 var idFolder = $(this).parents("li").first().attr("id").split("_")[2]; 484 expresso_mail_archive.renameFolder(idFolder, new_name); 485 cExecute("$this.imap_functions.get_folders_list&onload=true", update_menu); 486 } else { 487 488 $.ajax({ 489 url : "controller.php?action=$this.imap_functions.ren_mailbox", 490 type : "POST", 491 data : "current="+folder_id+"&rename="+new_name, 492 success : function(data){ 560 $(".folder") 561 .not(".shared-folders, .followup-messages") 562 .parent() 563 .find(".folder") 564 .not($('#message-attach-dialog').find('.folder')) 565 .hover( 566 function() 567 { 568 //CASO A LI NÃO TENHA UM eventNU FLUTUANTE AINDA, O eventNU É ADICIONADO! 569 if(!$(this).children(":last").hasClass("float-menu") && !$(this).children(":last").hasClass("new_folder") && !($(this).next().hasClass("local-connect"))) 570 { /*se houver a classe local-connect, não adiciona o botão de conectar*/ 571 var folder_ = $(this); 572 var folder_name; 573 var shared = { 574 head: false, 575 valid: false 576 }; 577 if(folder_.parent().attr('id')) 578 { 579 folder_name = folder_.parent().attr('id').split(cyrus_delimiter); 580 folder_name = folder_name[folder_name.length - 1]; 581 shared.valid = folder_.parent().attr('id').search("user"+cyrus_delimiter) == 0 ? true : false; 582 } 583 else folder_name = "Root"; 584 585 if(shared.valid) 586 { 587 shared.head = folder_.parent().attr('id').split(cyrus_delimiter).length == 2 ? true : false; 588 var folder_name_parts = folder_.parent().attr('id').split(cyrus_delimiter); 589 var acls = shared_acls[folder_name_parts[0] + cyrus_delimiter + folder_name_parts[1]]; 590 } 591 592 html = DataLayer.render("../prototype/modules/mail/templates/float_folder_menu.ejs", { 593 name_folder: folder_name, 594 flag: shared, 595 acl: acls 596 }); 597 //FUNÇÃO DO eventNU FLUTUANTE EDITAR < BEGIN 598 var esc = false; 599 $(folder_).append(html).find(".float-menu-edit").click(function() 600 { 601 var folder_id = $(this).parents(".closed:first").attr('id'); 602 var name = $.trim($(this).parents(".closed:first").find("span:first").text().split("[")[0]); 603 if($(this).parents(".closed:first").find("span:first").hasClass("selected")) 604 { 605 return write_msg(get_lang("It's not possible rename this folder, because it is being used in the moment!")); 606 } 607 if($(this).parents(".closed:first").find("span.selected").length) 608 { 609 return write_msg(get_lang("It's not possible rename this folder, because its subfolder is being used in the moment!")); 610 } 611 if(valid_tabs($(this).parents("li:first").find("li"), folder_id)) 612 { 613 return; 614 } 615 $(this).parents(".closed:first").find("span:first").empty().append("<input class='new_folder folder' type='text' maxlength='100'></input>"); 616 $(".new_folder").focus().keydown(function(event) 617 { 618 event.stopPropagation(); 619 if(event.keyCode == 13) 620 { 621 if($(this).val() != "") 622 { 623 /* Verifica se existe caracteres especiais no nome da pasta ou se existe "local_" 624 * em parte do nome (palavra reservada para pastas locais) */ 625 if($(this).val().match(/[\`\~\^\<\>\|\\\"\!\@\#\$\%\&\*\+\(\)\[\]\{\}\?;:]/gi) || $(this).val().indexOf("local_") != -1) 626 { 627 return write_msg(get_lang("cannot create folder. try other folder name")); 628 } 629 var new_name = folder_id.replace(/[a-zA-Z0-9á-úÁ-Ú,=^\s_-]+$/, $(this).val()); 630 if($('[id="' + new_name + '"]').length) 631 { 632 $(".folders-loading").removeClass("folders-loading"); 633 write_msg(get_lang("Mailbox already exists")); 634 return draw_new_tree_folder(); 635 } 636 $(".new_folder").parent().addClass("folders-loading"); 637 638 if($(this).parents("li").first().attr("id").indexOf("local_messages_") != -1) 639 { 640 var idFolder = $(this).parents("li").first().attr("id").split("_")[2]; 641 expresso_mail_archive.renameFolder(idFolder, new_name); 642 cExecute("$this.imap_functions.get_folders_list&onload=true", update_menu); 643 } 644 else 645 { 646 $.ajax( 647 { 648 url: "controller.php?action=$this.imap_functions.ren_mailbox", 649 type: "POST", 650 data: "current=" + folder_id + "&rename=" + new_name, 651 success: function(data) 652 { 493 653 data = connector.unserialize(data); 494 if(data == "Permission denied"){ 654 if(data == "Permission denied") 655 { 495 656 $(".folders-loading").removeClass("folders-loading"); 496 657 cExecute("$this.imap_functions.get_folders_list&onload=true", update_menu); … … 502 663 }); 503 664 504 } 505 }else{ 506 $(".new_folder").focusout(); 507 } 508 }else if( event.keyCode == 27){ 509 draw_new_tree_folder(); 510 } 511 }).focusout(function(){ 665 } 666 } 667 else 668 { 669 $(".new_folder").focusout(); 670 } 671 } 672 else if(event.keyCode == 27) 673 { 512 674 draw_new_tree_folder(); 513 }).val(name);514 })515 //FUNÇÃO DO eventNU FLUTUANTE EDITAR < END516 //FUNÇÃO DO eventNU FLUTUANTE EXCLUIR < BEGIN517 .end().find(".float-menu-remove").click(function(){518 519 var folder_id = $(this).parents(".closed:first").attr('id');520 var folder_name = "<strong>"+$.trim($(this).parents(".closed:first").find(".folder").text().split("[")[0])+"</strong>";521 522 if(valid_tabs($(this).parents("li:first").find("li"), folder_id))523 return;524 $(this).parents(".closed:first").find(".folder").addClass("folders-loading");525 526 if($(this).parents(".closed:first").find("ul").length){527 $(this).parents(".closed:first").find(".folder").removeClass("folders-loading");528 return write_msg(get_lang("Delete/move subfolders first"));529 675 } 530 if($(this).parents(".closed:first").find("span.selected").length){ 531 $(this).parents(".closed:first").find(".folder").removeClass("folders-loading"); 532 return write_msg(get_lang("It's not possible delete this folder, because it is being used in the moment!")); 533 } 534 var folder_span = $(this); 535 var confirm_text = get_lang("Do you wish to exclude the folder "); 536 537 $.Zebra_Dialog(confirm_text+folder_name, { 538 'type': 'question', 539 'overlay_opacity': '0.5', 540 'custom_class': 'custom-zebra-filter', 541 'buttons': [get_lang('Yes'), get_lang('No')], 542 'onClose': function(caption) { 543 544 if(caption == get_lang('Yes')){ 545 if(folder_span.parents("li").find("input").first().val() == "localFolder"){ 546 var idFolder = folder_span.parents("li").first().attr("id").split("_")[2]; 547 expresso_mail_archive.deleteFolder(idFolder, folder_name); 548 cExecute("$this.imap_functions.get_folders_list&onload=true", update_menu); 549 } else { 550 $.ajax({ 551 url : "controller.php?action=$this.imap_functions.delete_mailbox", 676 }).focusout(function() 677 { 678 draw_new_tree_folder(); 679 }).val(name); 680 }) 681 //FUNÇÃO DO eventNU FLUTUANTE EDITAR < END 682 //FUNÇÃO DO eventNU FLUTUANTE EXCLUIR < BEGIN 683 .end().find(".float-menu-remove").click(function() 684 { 685 686 var folder_id = $(this).parents(".closed:first").attr('id'); 687 var folder_name = "<strong>" + $.trim($(this).parents(".closed:first").find(".folder").text().split("[")[0]) + "</strong>"; 688 689 if(valid_tabs($(this).parents("li:first").find("li"), folder_id)) 690 { 691 return; 692 } 693 $(this).parents(".closed:first").find(".folder").addClass("folders-loading"); 694 695 if($(this).parents(".closed:first").find("ul").length) 696 { 697 $(this).parents(".closed:first").find(".folder").removeClass("folders-loading"); 698 return write_msg(get_lang("Delete/move subfolders first")); 699 } 700 if($(this).parents(".closed:first").find("span.selected").length) 701 { 702 $(this).parents(".closed:first").find(".folder").removeClass("folders-loading"); 703 return write_msg(get_lang("It's not possible delete this folder, because it is being used in the moment!")); 704 } 705 var folder_span = $(this); 706 var confirm_text = get_lang("Do you wish to exclude the folder "); 707 708 $.Zebra_Dialog(confirm_text + folder_name, { 709 'type': 'question', 710 'overlay_opacity': '0.5', 711 'custom_class': 'custom-zebra-filter', 712 'buttons': [get_lang('Yes'), get_lang('No')], 713 'onClose': function(caption) 714 { 715 716 if(caption == get_lang('Yes')) 717 { 718 if(folder_span.parents("li").find("input").first().val() == "localFolder") 719 { 720 var idFolder = folder_span.parents("li").first().attr("id").split("_")[2]; 721 expresso_mail_archive.deleteFolder(idFolder, folder_name); 722 cExecute("$this.imap_functions.get_folders_list&onload=true", update_menu); 723 } 724 else 725 { 726 $.ajax( 727 { 728 url: "controller.php?action=$this.imap_functions.delete_mailbox", 552 729 type: "POST", 553 data : "del_past="+folder_id, 554 success : function(data){ 730 data: "del_past=" + folder_id, 731 success: function(data) 732 { 555 733 data = connector.unserialize(data); 556 if(data == "Mailbox does not exist"){ 734 if(data == "Mailbox does not exist") 735 { 557 736 $(".folders-loading").removeClass("folders-loading"); 558 737 return write_msg(get_lang("Mailbox does not exist")); 559 }else if(data == "Permission denied"){ 738 } 739 else if(data == "Permission denied") 740 { 560 741 $(".folders-loading").removeClass("folders-loading"); 561 742 cExecute("$this.imap_functions.get_folders_list&onload=true", update_menu); … … 566 747 } 567 748 }); 749 } 750 } 751 else 752 { 753 folder_span.parents(".closed:first").find(".folder").removeClass("folders-loading"); 754 return; 755 } 756 } 757 }); 758 }) 759 //FUNÇÃO DO eventNU FLUTUANTE EXCLUIR < END 760 //FUNÇÃO DO eventNU FLUTUANTE NOVA PASTA < BEGIN 761 .end().find(".float-menu-new").click(function() 762 { 763 $(this).parents(".float-menu").hide(); 764 var selected_li = $(this).parents(".closed:first"); 765 if(selected_li.find("ul:first").length) 766 { 767 var new_folder = $("<li><input class='new_folder folder' type='text' maxlength='100'></input></li>").appendTo(selected_li.find("ul:first")); 768 if(selected_li.find(".expandable-hitarea").length) 769 { 770 selected_li.find(".expandable-hitarea").trigger('click'); 771 } 772 selected_li.find("ul:first").treeview( 773 { 774 add: new_folder 775 }); 776 } 777 else if(selected_li.length) 778 { 779 var new_folder = $("<ul><li><input class='new_folder folder' type='text' maxlength='100'></input></li></ul>").appendTo(selected_li); 780 selected_li.treeview( 781 { 782 add: new_folder 783 }); 784 } 785 else 786 { 787 selected_li = $(this).parents("li:first"); 788 if($(this).parents(".head_folder").parent().find(".expandable-hitarea").length) 789 { 790 $(this).parents(".head_folder").parent().find(".expandable-hitarea").trigger('click'); 791 } 792 var new_folder = $("<ul><li><input class='new_folder folder' type='text' maxlength='100'></input></li></ul>").appendTo(selected_li); 793 selected_li.treeview( 794 { 795 add: new_folder 796 }); 797 } 798 var existsIdenticalFolder = false; 799 selected_li.find(".new_folder").Watermark("Nova Pasta").focus().keydown(function(event) 800 { 801 event.stopPropagation(); 802 803 existsIdenticalFolder = false; 804 805 var ok = false; 806 var makeChildren = function(auxNameFolder, father) 807 { 808 if(auxNameFolder.length == 0) return true; 809 810 811 if(auxNameFolder[0] == "") 812 { 813 auxNameFolder.shift(); 814 makeChildren(auxNameFolder, father); 815 return true; 816 } 817 if(ok == false) 818 { 819 expresso_mail_archive.createFolder((father ? father : "inbox"), auxNameFolder[0]); 820 } 821 822 expresso_mail_archive.getFoldersList(father); 823 824 for(var ii = 0; ii < expresso_mail_archive.folders.length; ii++) 825 { 826 if(auxNameFolder[0] == expresso_mail_archive.folders[ii].name) 827 { 828 auxNameFolder.shift(); 829 save = expresso_mail_archive.folders; 830 expresso_mail_archive.createFolder(expresso_mail_archive.folders[ii].id, auxNameFolder[0]); 831 expresso_mail_archive.folders = save; 832 ok = true; 833 makeChildren(auxNameFolder, expresso_mail_archive.folders[ii].id); 834 return true; 568 835 } 569 }else{ 570 folder_span.parents(".closed:first").find(".folder").removeClass("folders-loading"); 571 return; 572 } 573 } 574 }); 575 /* if(!confirm(confirm_text + folder_name)){ 576 $(this).parents(".closed:first").find(".folder").removeClass("folders-loading"); 577 return; 578 } */ 579 }) 580 //FUNÇÃO DO eventNU FLUTUANTE EXCLUIR < END 581 //FUNÇÃO DO eventNU FLUTUANTE NOVA PASTA < BEGIN 582 .end().find(".float-menu-new").click(function(){ 583 $(this).parents(".float-menu").hide(); 584 var selected_li = $(this).parents(".closed:first"); 585 if(selected_li.find("ul:first").length){ 586 var new_folder = $("<li><input class='new_folder folder' type='text' maxlength='100'></input></li>").appendTo(selected_li.find("ul:first")); 587 if(selected_li.find(".expandable-hitarea").length){ 588 selected_li.find(".expandable-hitarea").trigger('click'); 589 } 590 selected_li.find("ul:first").treeview({ 591 add: new_folder 592 }); 593 }else if(selected_li.length){ 594 var new_folder = $("<ul><li><input class='new_folder folder' type='text' maxlength='100'></input></li></ul>").appendTo(selected_li); 595 selected_li.treeview({ 596 add: new_folder 597 }); 598 }else{ 599 selected_li = $(this).parents(".head_folder").parent(); 600 if($(this).parents(".head_folder").parent().find(".expandable-hitarea").length){ 601 $(this).parents(".head_folder").parent().find(".expandable-hitarea").trigger('click'); 602 } 603 var new_folder = $("<ul><li><input class='new_folder folder' type='text' maxlength='100'></input></li></ul>").appendTo(selected_li); 604 selected_li.treeview({ 605 add: new_folder 606 }); 836 } 837 } 838 839 840 if(event.keyCode == 13) 841 { 842 /* Verifica se existe caracteres especiais no nome da pasta ou se existe "local_" 843 * em parte do nome (palavra reservada para pastas locais) */ 844 if($(this).val().match(/[\`\~\^\<\>\|\\\"\!\@\#\$\%\&\*\+\(\)\[\]\{\}\?;:]/gi) || $(this).val().indexOf("local_") != -1) 845 { 846 return write_msg(get_lang("cannot create folder. try other folder name")); 847 } 848 if($(this).parents("li").find("input[type=hidden]").val() == "localFolder") 849 { 850 851 $(".new_folder").parent().addClass("folders-loading"); 852 853 var folderName = $(this).val(); 854 var folder = (folderName != "" ? folderName : get_lang("New Folder")); 855 var father = typeof(selected_li.attr('id')) != "undefined" ? selected_li.attr('id').split("_")[2] : "home"; 856 857 $(this).parents(".treeview:first").find("li").each(function() 858 { 859 var eachFolder = $(this).find("span:first").text().trim(); 860 if(folder == eachFolder) 861 { 862 existsIdenticalFolder = true; 863 return false; 864 } 865 }); 866 867 if(existsIdenticalFolder) 868 { 869 event.stopPropagation(); 870 write_msg(get_lang("Mailbox already exists")); 871 draw_new_tree_folder(); 872 return false; 873 } 874 875 if(folderName.indexOf("/") != -1) 876 { 877 auxNameFolder = folderName.split("/"); 878 879 makeChildren(auxNameFolder, father); 880 } 881 else 882 { 883 var folder = (folderName != "" ? folderName : get_lang("New Folder")); 884 create_new_local_folder((selected_li.attr('id') ? selected_li.attr('id') : "inbox"), folder); 885 } 886 887 cExecute("$this.imap_functions.get_folders_list&onload=true", update_menu); 888 } 889 else 890 { 891 if($('[id="' + (selected_li.attr('id') ? selected_li.attr('id') : "INBOX") + cyrus_delimiter + $(this).val() + '"]').length) 892 { 893 $(".folders-loading").removeClass("folders-loading"); 894 write_msg(get_lang("Mailbox already exists")); 895 return draw_new_tree_folder(); 896 } 897 $(".new_folder").parent().addClass("folders-loading"); 898 create_new_folder(($(this).val() != "" ? $(this).val() : get_lang("New Folder")), (selected_li.attr('id') ? selected_li.attr('id') : "INBOX")); 899 } 900 607 901 } 608 var existsIdenticalFolder = false; 609 selected_li.find(".new_folder").Watermark("Nova Pasta").focus().keydown(function(event){ 610 event.stopPropagation(); 611 612 existsIdenticalFolder = false; 613 614 var ok = false; 615 var makeChildren = function(auxNameFolder, father){ 616 if(auxNameFolder.length == 0) return true; 617 618 619 if(auxNameFolder[0] == ""){ 620 auxNameFolder.shift(); 621 makeChildren(auxNameFolder, father); 622 return true; 623 } 624 if(ok == false) 625 expresso_mail_archive.createFolder((father ? father : "inbox"), auxNameFolder[0]); 626 627 expresso_mail_archive.getFoldersList(father); 628 629 for(var ii =0; ii<expresso_mail_archive.folders.length; ii++){ 630 if(auxNameFolder[0] == expresso_mail_archive.folders[ii].name){ 631 auxNameFolder.shift(); 632 save = expresso_mail_archive.folders; 633 expresso_mail_archive.createFolder(expresso_mail_archive.folders[ii].id, auxNameFolder[0]); 634 expresso_mail_archive.folders = save; 635 ok = true; 636 makeChildren(auxNameFolder, expresso_mail_archive.folders[ii].id); 637 return true; 638 } 639 } 902 else if(event.keyCode == 27) 903 { 904 draw_new_tree_folder(); 640 905 } 641 906 642 643 if(event.keyCode == 13){ 644 /* Verifica se existe caracteres especiais no nome da pasta ou se existe "local_" 645 * em parte do nome (palavra reservada para pastas locais) */ 646 if($(this).val().match(/[\`\~\^\<\>\|\\\"\!\@\#\$\%\&\*\+\(\)\[\]\{\}\?;:]/gi) || $(this).val().indexOf("local_") != -1){ 647 return write_msg(get_lang("cannot create folder. try other folder name")); 648 } 649 if($(this).parents("li").find("input[type=hidden]").val() == "localFolder"){ 650 651 $(".new_folder").parent().addClass("folders-loading"); 652 653 var folderName = $(this).val(); 654 var folder = (folderName != "" ? folderName : get_lang("New Folder")); 655 var father = typeof(selected_li.attr('id')) != "undefined" ? selected_li.attr('id').split("_")[2] : "home"; 656 657 $(this).parents(".treeview:first").find("li").each(function(){ 658 var eachFolder = $(this).find("span:first").text().trim(); 659 if(folder == eachFolder){ 660 existsIdenticalFolder = true; 661 return false; 662 } 663 }); 664 665 if(existsIdenticalFolder){ 666 event.stopPropagation(); 667 write_msg(get_lang("Mailbox already exists")); 668 draw_new_tree_folder(); 669 return false; 670 } 671 672 if(folderName.indexOf("/") != -1){ 673 auxNameFolder = folderName.split("/"); 674 675 makeChildren(auxNameFolder, father); 676 } else { 677 var folder = (folderName != "" ? folderName : get_lang("New Folder")); 678 create_new_local_folder((selected_li.attr('id') ? selected_li.attr('id') : "inbox") , folder); 679 } 680 681 cExecute("$this.imap_functions.get_folders_list&onload=true", update_menu); 682 } else { 683 if($('[id="'+ (selected_li.attr('id')? selected_li.attr('id') : "INBOX") + cyrus_delimiter + $(this).val()+'"]').length){ 684 $(".folders-loading").removeClass("folders-loading"); 685 write_msg(get_lang("Mailbox already exists")); 686 return draw_new_tree_folder(); 687 } 688 $(".new_folder").parent().addClass("folders-loading"); 689 create_new_folder(($(this).val() != "" ? $(this).val() : get_lang("New Folder")), (selected_li.attr('id')? selected_li.attr('id') : "INBOX")); 690 } 691 692 }else if( event.keyCode == 27){ 693 draw_new_tree_folder(); 694 } 695 696 }).focusout(function(){ 697 if(!existsIdenticalFolder){ 698 draw_new_tree_folder(); 699 } 700 701 }); 702 }).end().find(".float-menu-export").click(function(){ 703 //proxy_mensagens.export_all_messages($(this).parents("li:first").attr("id")) 704 705 var name_box = $(this).parents("li:first").attr("id"); 706 707 var name_folder = name_box.split(cyrus_delimiter)[name_box.split(cyrus_delimiter).length-1]; 708 709 710 var hand_export = function(data){ 711 clean_msg(); 712 if(!data){ 907 }).focusout(function() 908 { 909 if(!existsIdenticalFolder) 910 { 911 draw_new_tree_folder(); 912 } 913 914 }); 915 }).end().find(".float-menu-export").click(function() 916 { 917 var name_box = $(this).parents("li:first").attr("id"); 918 919 var name_folder = name_box.split(cyrus_delimiter)[name_box.split(cyrus_delimiter).length - 1]; 920 921 922 var hand_export = function(data) 923 { 924 clean_msg(); 925 if(!data) 926 { 713 927 write_msg(get_lang('Error compressing messages (ZIP). Contact the administrator.')) 714 }else if(data["empty_folder"] || data == "empty_folder"){ 928 } 929 else if(data["empty_folder"] || data == "empty_folder") 930 { 715 931 write_msg(get_lang("The selected folder is empty.")); 716 } else717 download_attachments(null, null, data, null,null, name_folder +'.zip'); 932 } 933 else download_attachments(null, null, data, null, null, name_folder + '.zip'); 718 934 } 719 if($(this).parents("li:first").find("input[type=hidden]:first").val() == "localFolder"){ 720 expresso_mail_archive.listMessages(name_box.split("_")[2]); 721 var msgsArchive = expresso_mail_archive.messageslisted; 722 723 buildExportArchiver(msgsArchive, name_box); 724 725 } else { 726 cExecute("$this.exporteml.export_all",hand_export,"folder="+name_box); 727 } 728 write_msg(get_lang('You must wait while the messages will be exported...'),true); 729 }); 730 //FUNÇÃO DO eventNU FLUTUANTE NOVA PASTA < END 731 } 732 if(!$(".new_folder").length){ 733 $(this).find(".float-menu:first").css("display", ""); 734 } 735 }, 736 function(){ 737 $(this).find(".float-menu:first").hide(); 738 } 739 ); 740 $("#new_m").html($('.selected').find(".folder_unseen").html() ? $('.selected').find(".folder_unseen").html() : "0").css("color", "red"); 935 if($(this).parents("li:first").find("input[type=hidden]:first").val() == "localFolder") 936 { 937 expresso_mail_archive.listMessages(name_box.split("_")[2]); 938 var msgsArchive = expresso_mail_archive.messageslisted; 939 940 buildExportArchiver(msgsArchive, name_box); 941 942 } 943 else 944 { 945 cExecute("$this.exporteml.export_all", hand_export, "folder=" + name_box); 946 } 947 write_msg(get_lang('You must wait while the messages will be exported...'), true); 948 }); 949 //FUNÇÃO DO eventNU FLUTUANTE NOVA PASTA < END 950 } 951 if(!$(".new_folder").length) 952 { 953 $(this).find(".float-menu:first").css("display", ""); 954 } 955 }, function() 956 { 957 $(this).find(".float-menu:first").hide(); 958 }); 959 $("#new_m") 960 .html($('.selected .message_unseen_count:first .folder_unseen').html() ? $('.selected .message_unseen_count:first .folder_unseen').html() : "0") 961 .css("color", "red"); 741 962 } -
branches/2.5/prototype/modules/mail/js/followupflag.js
r7780 r8232 73 73 winElement.dialog("close"); 74 74 $.each(selectedMessageIds, function(index, value){ 75 $('tr#' + value + ' .td-followup-flag') .find('img').remove();75 $('tr#' + value + ' .td-followup-flag')//.find('img').remove(); 76 76 }); 77 77 … … 173 173 alert('Uma ou mais mensagens não puderam ser sinalizadas. \nDetalhes do erro: limite de flags atingido para esta pasta.'); 174 174 } 175 $.each(selectedMessageIds,function(index,value){ 176 var flagged = DataLayer.get('followupflagged', {filter: [ 177 'AND', 178 ['=', 'messageNumber', value], 179 ['=', 'folderName', folder_name] 180 ]}); 181 if (!flagged) 182 $('#td_message_followup_'+value).find(".flag-edited").css("background","#cccccc").find('img').remove(); 183 184 $('tr#' + value + ' .td-followup-flag').find('img').remove(); 185 }); 175 /*DIVIDE O ARRAY EM ARRAYS MENORES*/ 176 var splice = function(arr){ 177 var newArray = []; 178 while (arr.length > 500){ 179 newArray[newArray.length] = arr.splice(0,500); 180 } 181 if (arr.length) 182 newArray[newArray.length] = arr; 183 return newArray; 184 } 185 if (selectedMessageIds.length > 500){ 186 var arrayIndex = selectedMessageIds; 187 $.each(splice(arrayIndex),function(iterator,subarray){ 188 var flaggeds = DataLayer.get('followupflagged', {filter: [ 189 'AND', 190 ['IN', 'messageNumber', subarray], 191 ['IN', 'folderName', folder_name] 192 ]}); 193 $.each(subarray,function(index,value){ 194 var flagged = false; 195 $.each(flaggeds,function(i,v){ 196 if (v.messageNumber == value) 197 flagged = true; 198 }); 199 if (!flagged) 200 $('#td_message_followup_'+value).find(".flag-edited").css("background","#cccccc").find('img').remove(); 201 $('tr#' + value + ' .td-followup-flag').find('img').remove(); 202 }); 203 }); 204 } 186 205 }); 187 206 winElement.find('.menu-configure-followupflag .save').button("option", "disabled", true); … … 267 286 268 287 $.each(selectedMessageIds, function(index, value){ 269 $('tr#' + value + ' .td-followup-flag').find('img') .remove();288 $('tr#' + value + ' .td-followup-flag').find('img')//.remove(); 270 289 }); 271 290 … … 756 775 757 776 } 758 759 $('#main_table').ready(function(){ 760 handlerMessageFilter = function (data) { 761 alarmFollowupflagged(null, data); 762 } 763 /* Busca nas pastas indexadas para ver se há novas mensagens com a flag $FilteredMessage */ 764 cExecute ("$this.imap_functions.getFlaggedAlertMessages&folders="+fromRules, handlerMessageFilter); 765 }); 766 777 778 if(preferences['use_alert_filter_criteria'] == "1") 779 { 780 $('#main_table').ready(function(){ 781 handlerMessageFilter = function (data) { 782 alarmFollowupflagged(null, data); 783 } 784 /* Busca nas pastas indexadas para ver se há novas mensagens com a flag $FilteredMessage */ 785 cExecute ("$this.imap_functions.getFlaggedAlertMessages&folders="+fromRules, handlerMessageFilter); 786 }); 787 } 788 789 -
branches/2.5/prototype/modules/mail/js/label.js
r7750 r8232 83 83 } 84 84 85 function returnLabels(msgsReference){ 86 var folderIndex = {}; 87 for (var i=0; i < msgsReference.length; i++) { 88 if( folderIndex[ msgsReference[i].folderName] ){ 89 folderIndex[ msgsReference[i].folderName].push( msgsReference[i].messageNumber ); 90 }else{ 91 folderIndex[ msgsReference[i].folderName] = [ msgsReference[i].messageNumber ]; 92 } 93 } 94 var labels = []; 95 for(var folder in folderIndex){ 96 var currentLabes = DataLayer.get('labeled',{ filter:[ 97 'AND', 98 ['=', 'folderName', folder ], 99 ['IN', 'messageNumber', folderIndex[ folder ] ] 100 ], criteria: {deepness: '2'}}); 101 102 if( $.isArray( currentLabes ) ) 103 labels = labels.concat( currentLabes ); 104 } 105 var labelsIndex = {}; 106 $.each( labels, function(i, e){ 107 if( labelsIndex[ e.messageNumber ] ){ 108 labelsIndex[ e.messageNumber ][ 'labels' ].push( e.label ); 109 }else{ 110 labelsIndex[ e.messageNumber ] = e; 111 labelsIndex[ e.messageNumber ][ 'labels' ] = []; 112 labelsIndex[ e.messageNumber ][ 'labels' ].push( e.label ); 113 } 114 }); 115 return labelsIndex; 116 } 117 118 85 119 function updateMessageLabels(msgsReference){ 86 for(var i = 0; i < msgsReference.length; i++){ 87 updateLabelsColumn({msg_number: msgsReference[i].messageNumber, boxname: msgsReference[i].folderName}); 88 } 120 var labelsIndex = returnLabels(msgsReference); 121 $.each(labelsIndex,function(index,e){ 122 updateLabelsColumn({msg_number: e.messageNumber, boxname: e.folderName,labels: e.labels, forceIcon: true}); 123 }); 89 124 } 90 125 … … 164 199 winElement.find('.edit').unbind("click").click(editLabel); 165 200 winElement.find('.close').click(deleteLabel); 166 167 draw_tree_labels();201 if( preferences['use_followupflags_and_labels'] == "1" ) 202 draw_tree_labels(); 168 203 var msgsReference = DataLayer.get('labeled', {filter: ['=', 'labelId', ''+labelEdited.id]}, true); 169 204 updateMessageLabels(msgsReference); … … 291 326 .find("li:first") 292 327 .fadeIn("slow").click(configureLabel); 293 294 draw_tree_labels();328 if( preferences['use_followupflags_and_labels'] == "1" ) 329 draw_tree_labels(); 295 330 296 331 $(".label-list-container .label-list li").not(".empty-item").click(function(){ -
branches/2.5/prototype/modules/mail/templates/attachment.ejs
r7697 r8232 1 <div id="fileupload_msg<%=data.ID%>" class="fileupload" style="margin : 5px 0px 0px 0px; padding-bottom : 5px;"> 2 <div class="button-files-upload"> 3 <button class="fileUploadButton">Anexar Arquivos</button> 4 <INPUT type="file" id="fileInput<%=data.ID%>" name="files[]" style="display:none;" multiple></INPUT> 1 <div id="fileupload_msg<%=data.ID%>" class="fileupload" style="margin : 15px 0px -5px -10px; padding-bottom : 5px;"> 2 <div class="row fileupload-buttonbar"> 3 <div class="button-files-upload"> 4 <<%= is_webkit ? 'button' : 'span style="height: 22px; cursor:pointer;"' %> class="fileinput-button button small"> 5 <span style="margin-top: 4px; cursor:pointer;"><i class="icon-plus icon-white"></i>Anexar arquivos</span> 6 <INPUT type="file" id="fileInput<%=data.ID%>" name="files[]" multiple></INPUT> 5 7 </<%= is_webkit ? 'button' : 'span' %>> 6 <button class="message-attach-link button -small">8 <button class="message-attach-link button small"> 7 9 <span>Anexar mensagens</span> 8 10 </button> 9 </div> 10 <div class="files-list"> 11 </div> 12 </div> 13 <br /> 14 <div class="files-list"> 11 15 <div class="attachments-list ui-corner-all" style="display:none;"></div> 12 16 </div> -
branches/2.5/prototype/modules/mail/templates/detailedfoldertree.ejs
r8113 r8232 5 5 Inbox: {name:'Caixa de Entrada', classe:'inbox'}, 6 6 }; 7 specialFolders[outboxfolder] = {name: 'Caixa de Sa ída', classe:'outbox'};7 specialFolders[outboxfolder] = {name: 'Caixa de Saï¿œda', classe:'outbox'}; 8 8 specialFolders[trashfolder] = {name:'Lixeira', classe:'trash'}; 9 9 specialFolders[draftsfolder] = {name:'Rascunhos', classe:'drafts'}; … … 26 26 %><li id="<%= array_trees[i].id %>" class="closed"><span class="folder <%= folder_class %>" title="<%= folder_name %>" style="text-align : left; position : static;"><%= folder_name %> 27 27 <% if(array_trees[i].messageCount.unseen > 0){ %> 28 <span style="text-align : left;">[<label id="dftree_<%= array_trees[i].id%>_unseen" class="folder_unseen" style="color : red; text-align : left;"><%= array_trees[i].messageCount.unseen %></label>]</span>29 28 <span class="message_unseen_count" style="text-align : left;">[<label id="dftree_<%= array_trees[i].id%>_unseen" class="folder_unseen" style="color : red; text-align : left;"><%= array_trees[i].messageCount.unseen %></label>]</span> 29 <% } %> 30 30 <% if(array_trees[i].children_unseen > 0){ %> 31 <span style="text-align : left;">[<label id="dftree_<%= array_trees[i].id%>_children_unseen" class="folder_ unseen" style="color : blue; text-align : left;"><%= array_trees[i].children_unseen %></label>]</span>31 <span style="text-align : left;">[<label id="dftree_<%= array_trees[i].id%>_children_unseen" class="folder_children_unseen" style="color : blue; text-align : left;"><%= array_trees[i].children_unseen %></label>]</span> 32 32 <% } %> 33 33 </span> … … 67 67 68 68 <%}%> 69 <% if(preferences['use_followupflags_and_labels'] == "1"){%> 69 70 <li><span class="folder head_folder all_accomp followup-messages">Para acompanhamento</span> 71 <%}%> 70 72 </li> 71 73 </ul> -
branches/2.5/prototype/rest/catalog/SharedGroupResource.php
r6578 r8232 85 85 86 86 //Recupera os grupos do usuario 87 $groups = Controller::find(array('concept' => 'contactGroup'), false, array('filter' => array('=', 'user', $ownerId), 'order' => array('name'))); 88 87 $groups = Controller::find(array('concept' => 'contactGroup'), false, array('filter' => array('=','id', $id), 'AND' => array('=','user', $ownerId) , 'order' => array('name'))); 89 88 if($groups){ 90 89 foreach($groups[0]['contacts'] as $value){ -
branches/2.5/prototype/services/ImapServiceAdapter.php
r7863 r8232 178 178 $criteria[ $filter[$i][0] ] = array( 'criteria' => $filter[$i][2], 'filter' => $filter[$i][1] ); 179 179 } 180 181 180 return $this->searchSieveRule($criteria); 182 181 } -
branches/2.5/prototype/services/PostgreSQL.php
r7961 r8232 47 47 private $config; //Configuração 48 48 public $error = false; //Armazena um erro caso ocorra 49 private $maps; //Cache de maps 50 private $tables; 51 52 public function find ( $uri, $justthese = false, $criteria = false ) 53 { 54 $condition = ''; 55 56 if(!isset($this->maps[$uri['concept']]) || !isset($this->tables[$uri['concept']])) 57 { 58 $this->maps[$uri['concept']] = Config::get($uri['concept'], 'PostgreSQL.mapping'); 59 $this->tables[$uri['concept']] = Config::get($uri['concept'],'PostgreSQL.concept'); 60 } 61 62 $tables = $this->tables[$uri['concept']]; 63 64 $justthese = self::parseJustthese($justthese, $this->maps[$uri['concept']] , $this->tables[$uri['concept']]); 65 66 if(isset($criteria['condition'])) 67 { 68 $pc = $this->parseCondition($criteria['condition']); 69 70 if(is_array($pc)) 71 { 72 if(!in_array($this->tables[$uri['concept']], $pc['tables'])) 73 $pc['tables'][] = $this->tables[$uri['concept']]; 74 75 $tables = implode(',', $pc['tables'] ); 76 $condition .= ' WHERE ' . $pc['conditions']; 77 } 78 79 } 80 81 $criteria = ($criteria !== false) ? $this->parseCriteria ( $criteria , $this->maps[$uri['concept']] , $condition , $this->tables[$uri['concept']]) : $condition; 82 83 return $this->execSql( 'SELECT '.$justthese['select'].' FROM '. $tables .' '.$criteria ); 84 } 85 86 public function read ( $uri, $justthese = false , $criteria = false) 87 { 88 if(!isset($this->maps[$uri['concept']]) || !isset($this->tables[$uri['concept']])) 89 { 90 $this->maps[$uri['concept']] = Config::get($uri['concept'], 'PostgreSQL.mapping'); 91 $this->tables[$uri['concept']] = Config::get($uri['concept'],'PostgreSQL.concept'); 92 } 93 94 $condition = ' WHERE '.$this->tables[$uri['concept']].'.'.$this->maps[$uri['concept']]['id'].' = \''.addslashes( $uri['id'] ).'\''; 95 $justthese = self::parseJustthese($justthese, $this->maps[$uri['concept']] , $this->tables[$uri['concept']]); 96 $tables = $this->tables[$uri['concept']]; 97 98 if(isset($criteria['condition'])) 99 { 100 $pc = $this->parseCondition($criteria['condition']); 101 102 if(is_array($pc)) 103 { 104 if(!in_array($this->tables[$uri['concept']], $pc['tables'])) 105 $pc['tables'][] = $this->tables[$uri['concept']]; 106 107 $tables = implode(',', $pc['tables'] ); 108 $condition .= ' AND ' . $pc['conditions']; 109 } 110 } 111 112 $criteria = ($criteria !== false) ? $this->parseCriteria ( $criteria , $this->maps[$uri['concept']] , $condition , $this->tables[$uri['concept']]) : $condition; 113 114 return $this->execSql( 'SELECT '.$justthese['select'].' FROM '. $tables . ' ' . $criteria , true ); 49 private $maps; //Cache de maps 50 private $tables; 51 52 public function find ( $uri, $justthese = false, $criteria = false ) 53 { 54 $condition = ''; 55 56 if(!isset($this->maps[$uri['concept']]) || !isset($this->tables[$uri['concept']])) 57 { 58 $this->maps[$uri['concept']] = Config::get($uri['concept'], 'PostgreSQL.mapping'); 59 $this->tables[$uri['concept']] = Config::get($uri['concept'],'PostgreSQL.concept'); 60 } 61 62 $tables = $this->tables[$uri['concept']]; 63 64 $justthese = self::parseJustthese($justthese, $this->maps[$uri['concept']] , $this->tables[$uri['concept']]); 65 66 if(isset($criteria['condition'])) 67 { 68 $pc = $this->parseCondition($criteria['condition']); 69 70 if(is_array($pc)) 71 { 72 if(!in_array($this->tables[$uri['concept']], $pc['tables'])) 73 $pc['tables'][] = $this->tables[$uri['concept']]; 74 75 $tables = implode(',', $pc['tables'] ); 76 $condition .= ' WHERE ' . $pc['conditions']; 77 } 78 79 } 80 81 $criteria = ($criteria !== false) ? $this->parseCriteria ( $criteria , $this->maps[$uri['concept']] , $condition , $this->tables[$uri['concept']]) : $condition; 82 83 return $this->execSql( 'SELECT '.$justthese['select'].' FROM '. $tables .' '.$criteria ); 84 } 85 86 public function read ( $uri, $justthese = false , $criteria = false) 87 { 88 if(!isset($this->maps[$uri['concept']]) || !isset($this->tables[$uri['concept']])) 89 { 90 $this->maps[$uri['concept']] = Config::get($uri['concept'], 'PostgreSQL.mapping'); 91 $this->tables[$uri['concept']] = Config::get($uri['concept'],'PostgreSQL.concept'); 92 } 93 94 $condition = ' WHERE '.$this->tables[$uri['concept']].'.'.$this->maps[$uri['concept']]['id'].' = \''.addslashes( $uri['id'] ).'\''; 95 $justthese = self::parseJustthese($justthese, $this->maps[$uri['concept']] , $this->tables[$uri['concept']]); 96 $tables = $this->tables[$uri['concept']]; 97 98 if(isset($criteria['condition'])) 99 { 100 $pc = $this->parseCondition($criteria['condition']); 101 102 if(is_array($pc)) 103 { 104 if(!in_array($this->tables[$uri['concept']], $pc['tables'])) 105 $pc['tables'][] = $this->tables[$uri['concept']]; 106 107 $tables = implode(',', $pc['tables'] ); 108 $condition .= ' AND ' . $pc['conditions']; 109 } 110 } 111 112 $criteria = ($criteria !== false) ? $this->parseCriteria ( $criteria , $this->maps[$uri['concept']] , $condition , $this->tables[$uri['concept']]) : $condition; 113 114 return $this->execSql( 'SELECT '.$justthese['select'].' FROM '. $tables . ' ' . $criteria , true ); 115 115 } 116 116 … … 132 132 return $this->execSql('UPDATE '.(Config::get($uri['concept'],'PostgreSQL.concept')).' '. self::parseUpdateData( $data ,$map).' '.self::parseCriteria($criteria , $map)); 133 133 } 134 134 135 135 public function update ( $uri, $data, $criteria = false ){ 136 136 $map = Config::get($uri['concept'], 'PostgreSQL.mapping'); 137 $criteria = ($criteria !== false) ? 138 $this->parseCriteria ( $criteria , $map , ' WHERE '.$map['id'].' = \''.pg_escape_string( $uri['id'] ).'\'') : ' WHERE '.$map['id'].' = \''.pg_escape_string( $uri['id'] ).'\''; 137 $criteria = ($criteria !== false) ? 138 $this->parseCriteria ( $criteria , $map , ' WHERE '.$map['id'].' = \''.pg_escape_string( $uri['id'] ).'\'') : ' WHERE '.$map['id'].' = \''.pg_escape_string( $uri['id'] ).'\''; 139 139 140 140 return $this->execSql('UPDATE '.(Config::get($uri['concept'],'PostgreSQL.concept')).' '. self::parseUpdateData( $data ,$map).$criteria); … … 252 252 253 253 private static function parseUpdateData( $data , &$map){ 254 254 255 255 $d = array(); 256 256 foreach ($data as $i => $v) … … 265 265 266 266 private static function parseCriteria( $criteria , &$map , $query = '' ){ 267 267 268 268 if( isset($criteria["filter"]) && $criteria["filter"] !== NULL ) 269 269 { … … 278 278 * array( '=' , 'campo' , 'valor' ) 279 279 */ 280 if($fc = self::parseFilter( $criteria['filter'] , $map)) 281 $query .= ($query === '') ? 'WHERE ('.$fc.')' : ' AND ('.$fc.')'; 280 if($fc = self::parseFilter( $criteria['filter'] , $map)) 281 $query .= ($query === '') ? 'WHERE ('.$fc.')' : ' AND ('.$fc.')'; 282 282 } 283 283 /* … … 372 372 } 373 373 } 374 374 375 375 static function parseJustthese($justthese , &$map , $table = '') 376 376 { 377 377 378 378 if(!is_array($justthese)) //Caso seja um full select pegar todas as keys 379 379 $justthese = array_keys($map); … … 381 381 $return = array(); 382 382 383 if($table) 384 $table .= '.'; 385 386 foreach ($justthese as &$value) 383 if($table) 384 $table .= '.'; 385 386 foreach ($justthese as &$value) 387 387 { 388 388 if(!isset($map[$value])) continue; //Escapa itens não existentes no mapa … … 393 393 $return['select'][] = $table . $map[$value] .' as "'. $value. '"'; 394 394 } 395 395 396 396 $return['select'] = implode(', ', $return['select']); 397 return $return; 398 } 399 400 private function parseCondition( $condition ) 401 { 402 $tables = array(); 403 $conditions = ''; 404 405 $matches = array(); 406 if(preg_match_all('/\s*(AND|^)\s*([a-z]+)\.([a-z]+)\s+\=\s+([a-z]+)\.([a-z]+)(\s|$)+/i', $condition ,$matches,PREG_SET_ORDER)) 407 { 408 foreach ($matches as $i => $v) 409 { 410 if(!isset($this->maps[$v[2]]) || !isset($this->tables[$v[2]])) 411 { 412 $this->maps[$v[2]] = Config::get($v[2], 'PostgreSQL.mapping'); 413 $this->tables[$v[2]] = Config::get($v[2],'PostgreSQL.concept'); 414 } 415 if(!isset($this->maps[$v[4]]) || !isset($this->tables[$v[4]])) 416 { 417 $this->maps[$v[4]] = Config::get($v[4], 'PostgreSQL.mapping'); 418 $this->tables[$v[4]] = Config::get($v[4],'PostgreSQL.concept'); 419 } 420 421 if(isset($this->maps[$v[2]][$v[3]]) && isset($this->maps[$v[4]][$v[5]])) 422 $conditions .= ' '. $v[1] .' '. $this->tables[$v[2]] . '.' . $this->maps[$v[2]][$v[3]] .' = '. $this->tables[$v[4]] . '.' . $this->maps[$v[4]][$v[5]]; 423 else 424 continue; 425 426 if(!in_array( $this->tables[$v[2]], $tables)) 427 $tables[] = $this->tables[$v[2]]; 428 429 if(!in_array( $this->tables[$v[4]], $tables)) 430 $tables[] = $this->tables[$v[4]]; 431 } 432 433 } 434 435 if(preg_match_all('/\s*(AND|OR|^)\s*([a-z]+)\.([a-z]+)\s+([\=\>\<\!]+|like)+\s+([a-z0-9\/\+\=]+)(\s|$)+/i', $condition , $matches ,PREG_SET_ORDER)) 436 { 437 foreach ($matches as $i => $v) 438 { 439 if(!isset($this->maps[$v[2]]) || !isset($this->tables[$v[2]])) 440 { 441 $this->maps[$v[2]] = Config::get($v[2], 'PostgreSQL.mapping'); 442 $this->tables[$v[2]] = Config::get($v[2],'PostgreSQL.concept'); 443 } 444 445 if(isset($this->maps[$v[2]][$v[3]])) 446 $conditions .= ' '. $v[1] .' '. $this->tables[$v[2]] . '.' . $this->maps[$v[2]][$v[3]] .' '.$v[4].' \''. pg_escape_string(base64_decode($v[5])) .'\''; 447 else 448 continue; 449 450 if(!in_array( $this->tables[$v[2]], $tables)) 451 $tables[] = $this->tables[$v[2]]; 452 } 453 } 454 455 return (count($tables) > 0 && count($conditions ) > 0) ? array('tables' => $tables , 'conditions' => $conditions ) : '' ; 397 return $return; 398 } 399 400 private function parseCondition( $condition ) 401 { 402 $tables = array(); 403 $conditions = ''; 404 405 $matches = array(); 406 if(preg_match_all('/\s*(AND|^)\s*([a-z]+)\.([a-z]+)\s+\=\s+([a-z]+)\.([a-z]+)(\s|$)+/i', $condition ,$matches,PREG_SET_ORDER)) 407 { 408 foreach ($matches as $i => $v) 409 { 410 if(!isset($this->maps[$v[2]]) || !isset($this->tables[$v[2]])) 411 { 412 $this->maps[$v[2]] = Config::get($v[2], 'PostgreSQL.mapping'); 413 $this->tables[$v[2]] = Config::get($v[2],'PostgreSQL.concept'); 414 } 415 if(!isset($this->maps[$v[4]]) || !isset($this->tables[$v[4]])) 416 { 417 $this->maps[$v[4]] = Config::get($v[4], 'PostgreSQL.mapping'); 418 $this->tables[$v[4]] = Config::get($v[4],'PostgreSQL.concept'); 419 } 420 421 if(isset($this->maps[$v[2]][$v[3]]) && isset($this->maps[$v[4]][$v[5]])) 422 $conditions .= ' '. $v[1] .' '. $this->tables[$v[2]] . '.' . $this->maps[$v[2]][$v[3]] .' = '. $this->tables[$v[4]] . '.' . $this->maps[$v[4]][$v[5]]; 423 else 424 continue; 425 426 if(!in_array( $this->tables[$v[2]], $tables)) 427 $tables[] = $this->tables[$v[2]]; 428 429 if(!in_array( $this->tables[$v[4]], $tables)) 430 $tables[] = $this->tables[$v[4]]; 431 } 432 433 } 434 435 if(preg_match_all('/\s*(AND|OR|^)\s*([a-z]+)\.([a-z]+)\s+([\=\>\<\!]+|like)+\s+([a-z0-9\/\+\=]+)(\s|$)+/i', $condition , $matches ,PREG_SET_ORDER)) 436 { 437 foreach ($matches as $i => $v) 438 { 439 if(!isset($this->maps[$v[2]]) || !isset($this->tables[$v[2]])) 440 { 441 $this->maps[$v[2]] = Config::get($v[2], 'PostgreSQL.mapping'); 442 $this->tables[$v[2]] = Config::get($v[2],'PostgreSQL.concept'); 443 } 444 445 if(isset($this->maps[$v[2]][$v[3]])) 446 $conditions .= ' '. $v[1] .' '. $this->tables[$v[2]] . '.' . $this->maps[$v[2]][$v[3]] .' '.$v[4].' \''. pg_escape_string(base64_decode($v[5])) .'\''; 447 else 448 continue; 449 450 if(!in_array( $this->tables[$v[2]], $tables)) 451 $tables[] = $this->tables[$v[2]]; 452 } 453 } 454 455 return (count($tables) > 0 && count($conditions ) > 0) ? array('tables' => $tables , 'conditions' => $conditions ) : '' ; 456 456 } 457 457 -
branches/2.5/prototype/services/iCal.php
r7969 r8232 573 573 $schedulable = self::_getSchedulable($uid); 574 574 $calendar = false; 575 $accpeted = true; 576 if ($schedulable) { 577 ///Verifica se o usuario e um participante e se este aceitou o pedido. 578 foreach ($schedulable['participants'] as $value){ 579 if ($value['user']['id'] == $params['owner'] && ($value['status'] == STATUS_UNANSWERED || $value['status'] == STATUS_DECLINED)){ 580 $accpeted = false; 581 } 582 } 583 //Caso o evento exista 584 if (!($calendar = self::_existInMyCalendars($schedulable['id'], $params['owner'])) || !$accpeted ) { 575 $accpeted = true; 576 if ($schedulable) { 577 ///Verifica se o usuario e um participante e se este aceitou o pedido. 578 foreach ($schedulable['participants'] as $value){ 579 if ($value['user']['id'] == $params['owner'] && ($value['status'] == STATUS_UNANSWERED || $value['status'] == STATUS_DECLINED)){ 580 $accpeted = false; 581 } 582 } 583 //Caso o evento exista 584 if (!($calendar = self::_existInMyCalendars($schedulable['id'], $params['owner'])) || !$accpeted ) { 585 585 $calendarToSchedulable = array(); 586 586 $calendarToSchedulable['calendar'] = $params['calendar']; … … 1239 1239 } 1240 1240 else 1241 { 1242 if (self::_getTime($component, 'dtstamp') > $schedulable['dtstamp'] || $component->getProperty('sequence', false, false) > $schedulable['sequence']) //Organizador esta requisitando que você atualize o evento 1243 $interation = ($isOrganizer) ? ICAL_ACTION_ORGANIZER_UPDATE : ICAL_ACTION_UPDATE; 1244 else 1245 $interation = ($isOrganizer) ? ICAL_ACTION_ORGANIZER_NONE : ICAL_ACTION_NONE; 1246 1247 } 1241 { 1242 if (self::_getTime($component, 'dtstamp') > $schedulable['dtstamp'] || $component->getProperty('sequence', false, false) > $schedulable['sequence']) //Organizador esta requisitando que você atualize o evento 1243 $interation = ($isOrganizer) ? ICAL_ACTION_ORGANIZER_UPDATE : ICAL_ACTION_UPDATE; 1244 else 1245 $interation = ($isOrganizer) ? ICAL_ACTION_ORGANIZER_NONE : ICAL_ACTION_NONE; 1246 1247 } 1248 1248 } 1249 } 1249 } 1250 1250 if (!$isParticipant){ 1251 1251 if( self::_existInMyCalendars($schedulable['id'], $params['owner']) ){ -
branches/2.5/reports/setup/setup.inc.php
r7516 r8232 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.5. 0';15 $setup_info['reports']['version'] = '2.5.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.5. 0')43 'versions' => Array('2.5.1.1') 44 44 ); 45 45 ?> -
branches/2.5/setup/check_install.php
r7681 r8232 98 98 'safe_mode' => 'max_execution_time = 30' 99 99 ), 100 'include_path' => array(101 'func' => 'php_ini_check',102 'value' => '.',103 'check' => 'contain',104 'error' => lang('include_path need to contain "." - the current directory'),105 'save_mode' => 'max_execution_time = 30'106 ),100 # 'include_path' => array( 101 # 'func' => 'php_ini_check', 102 # 'value' => '.', 103 # 'check' => 'contain', 104 # 'error' => lang('include_path need to contain "." - the current directory'), 105 # 'save_mode' => 'max_execution_time = 30' 106 # ), 107 107 # 'mysql' => array( 108 108 # 'func' => 'extension_check', -
branches/2.5/workflow/inc/class.Logger.inc.php
r3167 r8232 29 29 30 30 /** 31 * @var object $db Objeto de banco de dados do modulo workflow 32 * @access private 33 */ 34 private $dbGalaxia = null; 35 36 /** 31 37 * @var string $logPath Caminho onde será salvo o arquivo de log, caso o tipo de log Log_file seja adicionado à composição 32 38 * @access private … … 81 87 82 88 $this->db =& Factory::getInstance('WorkflowObjects')->getDBExpresso()->Link_ID; 89 $this->dbGalaxia =& Factory::getInstance('WorkflowObjects')->getDBGalaxia()->Link_ID; 83 90 84 91 if(!empty($curProcessName)){ 92 85 93 $query = ' 86 94 SELECT … … 89 97 egw_wf_processes'; 90 98 91 if(!($result = $this->db ->query($query)))99 if(!($result = $this->dbGalaxia->query($query))) 92 100 throw new Exception(lang('Cannot execute query')); 93 101 … … 131 139 wf_config_name like 'log_level' 132 140 "; 133 $config_value = array_pop($this->db ->query($query)->GetArray(-1));141 $config_value = array_pop($this->dbGalaxia->query($query)->GetArray(-1)); 134 142 $this->logLevel = $config_value['wf_config_value_int']; 135 143 } else { -
branches/2.5/workflow/inc/local/classes/class.wf_instance.php
r5928 r8232 443 443 444 444 /** 445 * Busca uma instância pelo id 446 * @param int $wf_instance_id O id da instância 447 * @return array As instâncias que satisfazem o critério de seleção. 448 * @access public 449 */ 450 public function getById($wf_instance_id) 451 { 452 /* build the SQL query */ 453 $query = 'SELECT i.wf_instance_id AS wf_instance_id, ia.wf_activity_id AS wf_activity_id, ia.wf_started AS wf_started, i.wf_name AS wf_name, i.wf_status AS wf_status, ia.wf_user AS wf_user, i.wf_priority AS wf_priority '; 454 $query .= 'FROM egw_wf_instances i LEFT JOIN egw_wf_instance_activities ia ON (ia.wf_instance_id = i.wf_instance_id)'; 455 $query .= 'WHERE (i.wf_p_id = ?) AND i.wf_instance_id = ?'; 456 457 $resultSet = $this->db->query($query, array($this->processID, intval($wf_instance_id))); 458 459 return $resultSet->GetArray(); 460 } 461 462 /** 445 463 * Busca todas as instâncias que possuem esse nome (identificador). 446 464 * @param string $name O nome da instância que se quer encontrar. … … 456 474 457 475 $resultSet = $this->db->query($query, array($this->processID, $name)); 476 return $resultSet->GetArray(); 477 } 478 479 /** 480 * Busca todas as instâncias que possuem um trecho do nome (identificador). 481 * @param string $name O trecho do nome da instância que se quer encontrar. 482 * @return array As instâncias que satisfazem o critério de seleção. 483 * @access public 484 */ 485 public function getLikeName($name) 486 { 487 /* build the SQL query */ 488 $query = 'SELECT i.wf_instance_id AS wf_instance_id, ia.wf_activity_id AS wf_activity_id, ia.wf_started AS wf_started, i.wf_name AS wf_name, i.wf_status AS wf_status, ia.wf_user AS wf_user, i.wf_priority AS wf_priority '; 489 $query .= 'FROM egw_wf_instances i LEFT JOIN egw_wf_instance_activities ia ON (ia.wf_instance_id = i.wf_instance_id)'; 490 $query .= "WHERE (i.wf_p_id = ?) AND i.wf_name ILIKE '%$name%'"; 491 492 $resultSet = $this->db->query($query, array($this->processID)); 493 458 494 return $resultSet->GetArray(); 459 495 } … … 584 620 return $this->setUser($instanceID, $activityID, 'p' . $roleID); 585 621 } 622 623 /** 624 * Altera o wf_name das instâncias, fazendo o replace no nome da categoria de serviço. 625 * Método chamado quando é alterada a categoria de um serviço e existem ocorrências atrelados a esse serviço. 626 * @param int | array $instanceID se for um array, concatena os instances ids 627 * @param string @currentServiceName Nome da categoria de serviço atual 628 * @param string @newServiceName Nome da nova categoria de serviço 629 * @return resultSet em caso de sucesso ou false 630 * @access public 631 */ 632 public function updateReplaceName($instanceID, $currentServiceName, $newServiceName) 633 { 634 $success = true; 635 636 // Se for array, faz implode concatenando os ids 637 if (is_array($instanceID)) 638 { 639 $instanceID = implode(',', $instanceID); 640 } 641 642 $query = "UPDATE egw_wf_instances SET wf_name = REPLACE(wf_name, '" . $currentServiceName . "', '" . $newServiceName . "') WHERE wf_instance_id IN (" . $instanceID . ")"; 643 $success = $this->db->execute($query); 644 645 return $success; 646 } 586 647 } 587 648 ?> -
branches/2.5/workflow/inc/smarty/wf_plugins/function.wf_select_user.php
r4740 r8232 115 115 116 116 $output .= <<<EOF 117 <a alt="$title" title="$title" href="javascript:void(0)" onclick="openParticipants ('$name', '$extraParams');"><img border="0" alt="" src="$image" /></a>117 <a alt="$title" title="$title" href="javascript:void(0)" onclick="openParticipantsWindow('$name', '$extraParams');"><img border="0" alt="" src="$image" /></a> 118 118 EOF; 119 119 return $output; -
branches/2.5/workflow/js/adminaccess/control_folder.js
r3255 r8232 416 416 bt.setAttribute('name','Selecionar'); 417 417 bt.setAttribute('value','Selecionar'); 418 bt.onclick = function() { openParticipants ('sel_org_user', 'hidegroups=1'); };418 bt.onclick = function() { openParticipantsWindow('sel_org_user', 'hidegroups=1'); }; 419 419 td.appendChild(bt); 420 420 … … 575 575 bt.setAttribute('name','Selecionar'); 576 576 bt.setAttribute('value','Selecionar'); 577 bt.onclick = function() { openParticipants ('sel_proc_user', ''); };577 bt.onclick = function() { openParticipantsWindow('sel_proc_user', ''); }; 578 578 td.appendChild(bt); 579 579 … … 726 726 bt.setAttribute('name','Selecionar'); 727 727 bt.setAttribute('value','Selecionar'); 728 bt.onclick = function() { openParticipants ('sel_mon_user', ''); };728 bt.onclick = function() { openParticipantsWindow('sel_mon_user', ''); }; 729 729 td.appendChild(bt); 730 730 … … 785 785 content += '<td align="right"><input type="button" name="Remover" value="Remover" onclick="deleteExternalApplicationAdmin();"/></td>'; 786 786 content += '<td></td>'; 787 content += '<td align="right"><input type="button" name="Selecionar" value="Selecionar" onclick="openParticipants (\'sel_exa_user\', \'\')"/><input type="button" name="Remover" value="Remover" onclick="del_selected_reg(\'sel_exa_user\');"/></td>';787 content += '<td align="right"><input type="button" name="Selecionar" value="Selecionar" onclick="openParticipantsWindow(\'sel_exa_user\', \'\')"/><input type="button" name="Remover" value="Remover" onclick="del_selected_reg(\'sel_exa_user\');"/></td>'; 788 788 content += '</tr>'; 789 789 content += '<tr><td colspan="3"></td></tr>'; … … 849 849 content += '<td align="right"><input type="button" name="Remover" value="Remover" onclick="deleteWorkflowAdministrators();"/></td>'; 850 850 content += '<td></td>'; 851 content += '<td align="right"><input type="button" name="Selecionar" value="Selecionar" onclick="openParticipants (\'selectWorkflowUsers\', \'\')"/><input type="button" name="Remover" value="Remover" onclick="del_selected_reg(\'selectWorkflowUsers\');"/></td>';851 content += '<td align="right"><input type="button" name="Selecionar" value="Selecionar" onclick="openParticipantsWindow(\'selectWorkflowUsers\', \'\')"/><input type="button" name="Remover" value="Remover" onclick="del_selected_reg(\'selectWorkflowUsers\');"/></td>'; 852 852 content += '</tr>'; 853 853 content += '<tr><td colspan="3"></td></tr>'; … … 901 901 content += '<td align="right"><input type="button" name="Remover" value="Remover" onclick="deleteDevelopmentAdministrators();"/></td>'; 902 902 content += '<td></td>'; 903 content += '<td align="right"><input type="button" name="Selecionar" value="Selecionar" onclick="openParticipants (\'selectDevelopmentUsers\', \'\')"/><input type="button" name="Remover" value="Remover" onclick="del_selected_reg(\'selectDevelopmentUsers\');"/></td>';903 content += '<td align="right"><input type="button" name="Selecionar" value="Selecionar" onclick="openParticipantsWindow(\'selectDevelopmentUsers\', \'\')"/><input type="button" name="Remover" value="Remover" onclick="del_selected_reg(\'selectDevelopmentUsers\');"/></td>'; 904 904 content += '</tr>'; 905 905 content += '<tr><td colspan="3"></td></tr>'; -
branches/2.5/workflow/js/jscode/participants.js
r3729 r8232 364 364 } 365 365 366 function openParticipants (target, option)366 function openParticipantsWindow(target, option) 367 367 { 368 368 newWidth = 500; -
branches/2.5/workflow/js/monitors/processes.js
r795 r8232 101 101 content += '<td><input type="hidden" name="newUser" id="newUser" value="" />'; 102 102 content += '<input type="input" name="newUser_desc" id="newUser_desc" value="" readonly="true" size="32" />'; 103 content += '<a href="javascript:void(0)" onclick="openParticipants (\'newUser\', \'uid=1&hidegroups=1\');"><img border="0" width="16" height="16" src="workflow/templateFile.php?file=images/add_user.png"/></a></td></tr>';103 content += '<a href="javascript:void(0)" onclick="openParticipantsWindow(\'newUser\', \'uid=1&hidegroups=1\');"><img border="0" width="16" height="16" src="workflow/templateFile.php?file=images/add_user.png"/></a></td></tr>'; 104 104 content += '<tr><td colspan="2"><button onclick="clickLoadActivities(' + pid + ');return false;">Próximo >></button></td></tr></table>'; 105 105 content += '</td>'; -
branches/2.5/workflow/js/orgchart/organization.js
r7379 r8232 736 736 content += '<input type="hidden" name="funcionario_id" id="funcionario_id" value="" />'; 737 737 content += '<input type="input" name="funcionario_id_desc" id="funcionario_id_desc" value="" readonly="true" size="40" />'; 738 content += '<a href="javascript:void(0)" onclick="openParticipants (\'funcionario_id\', \'uid=1&hidegroups=1\');" id="addEmployeeLink"><img border="0" width="16" height="16" src="workflow/templateFile.php?file=images/add_user.png" /></a>';738 content += '<a href="javascript:void(0)" onclick="openParticipantsWindow(\'funcionario_id\', \'uid=1&hidegroups=1\');" id="addEmployeeLink"><img border="0" width="16" height="16" src="workflow/templateFile.php?file=images/add_user.png" /></a>'; 739 739 content += '</td></tr>'; 740 740 content += '<tr><td><label for="funcionario_status_id">Status</label></td><td id="comboStatus"><i>carregando</i></td></tr>'; … … 801 801 content += '<input type="hidden" name="titular_funcionario_id" id="titular_funcionario_id" value="" />'; 802 802 content += '<input type="input" name="titular_funcionario_id_desc" id="titular_funcionario_id_desc" value="" readonly="true" size="40" />'; 803 content += '<a href="javascript:void(0)" onclick="openParticipants (\'titular_funcionario_id\', \'uid=1&hidegroups=1\');"><img border="0" width="16" height="16" src="workflow/templateFile.php?file=images/add_user.png" /></a>';803 content += '<a href="javascript:void(0)" onclick="openParticipantsWindow(\'titular_funcionario_id\', \'uid=1&hidegroups=1\');"><img border="0" width="16" height="16" src="workflow/templateFile.php?file=images/add_user.png" /></a>'; 804 804 content += ' <a href="javascript:void(0)" onclick="$(\'titular_funcionario_id\').value=\'\'; $(\'titular_funcionario_id_desc\').value=\'\'; return false;"><img border="0" width="16" height="16" src="workflow/templateFile.php?file=images/delete_user.png" /></a>'; 805 805 content += '</td></tr>'; … … 807 807 content += '<input type="hidden" name="auxiliar_funcionario_id" id="auxiliar_funcionario_id" value="" />'; 808 808 content += '<input type="input" name="auxiliar_funcionario_id_desc" id="auxiliar_funcionario_id_desc" value="" readonly="true" size="40" />'; 809 content += '<a href="javascript:void(0)" onclick="openParticipants (\'auxiliar_funcionario_id\', \'uid=1&hidegroups=1\');"><img border="0" width="16" height="16" src="workflow/templateFile.php?file=images/add_user.png" /></a>';809 content += '<a href="javascript:void(0)" onclick="openParticipantsWindow(\'auxiliar_funcionario_id\', \'uid=1&hidegroups=1\');"><img border="0" width="16" height="16" src="workflow/templateFile.php?file=images/add_user.png" /></a>'; 810 810 content += ' <a href="javascript:void(0)" onclick="$(\'auxiliar_funcionario_id\').value=\'\'; $(\'auxiliar_funcionario_id_desc\').value=\'\'; return false;"><img border="0" width="16" height="16" src="workflow/templateFile.php?file=images/delete_user.png" /></a>'; 811 811 content += '</td></tr>'; … … 882 882 content += '<input type="hidden" name="substituto_funcionario_id" id="substituto_funcionario_id" value="" />'; 883 883 content += '<input type="input" name="substituto_funcionario_id_desc" id="substituto_funcionario_id_desc" value="" readonly="true" size="40" />'; 884 content += '<a href="javascript:void(0)" onclick="openParticipants (\'substituto_funcionario_id\', \'uid=1&hidegroups=1\');"><img border="0" width="16" height="16" src="workflow/templateFile.php?file=images/add_user.png" /></a>';884 content += '<a href="javascript:void(0)" onclick="openParticipantsWindow(\'substituto_funcionario_id\', \'uid=1&hidegroups=1\');"><img border="0" width="16" height="16" src="workflow/templateFile.php?file=images/add_user.png" /></a>'; 885 885 content += ' <a href="javascript:void(0)" onclick="$(\'substituto_funcionario_id\').value=\'\'; $(\'substituto_funcionario_id_desc\').value=\'\'; return false;"><img border="0" width="16" height="16" src="workflow/templateFile.php?file=images/delete_user.png" /></a>'; 886 886 content += '</td></tr>'; -
branches/2.5/workflow/setup/setup.inc.php
r7516 r8232 13 13 $setup_info['workflow']['name'] = 'workflow'; 14 14 $setup_info['workflow']['title'] = 'Workflow Management'; 15 $setup_info['workflow']['version'] = '2.5. 0';15 $setup_info['workflow']['version'] = '2.5.1'; 16 16 $setup_info['workflow']['app_order'] = 10; 17 17 $setup_info['workflow']['enable'] = 1; … … 59 59 $setup_info['workflow']['depends'][] = array( 60 60 'appname' => 'phpgwapi', 61 'versions' => Array(' 1.2', '2.0', '2.2', '2.4', '2.5')61 'versions' => Array('2.5.1.1') 62 62 ); 63 63 $setup_info['workflow']['depends'][] = array( 64 64 'appname' => 'preferences', 65 'versions' => Array(' 0.9.13.002', '2.0', '2.2', '2.5.0')65 'versions' => Array('2.5.1') 66 66 ); 67 67 ?> -
branches/2.5/workflow/setup/tables_update.inc.php
r7516 r8232 360 360 return $GLOBALS['setup_info']['workflow']['currentver']; 361 361 } 362 $test[] = '2.4.2'; 363 function workflow_upgrade2_4_2() 364 { 365 $GLOBALS['setup_info']['workflow']['currentver'] = '2.5.0'; 366 return $GLOBALS['setup_info']['workflow']['currentver']; 367 } 362 363 $test[] = '2.4.2'; 364 function workflow_upgrade2_4_2() 365 { 366 $GLOBALS['setup_info']['workflow']['currentver'] = '2.5.0'; 367 return $GLOBALS['setup_info']['workflow']['currentver']; 368 } 369 370 $test[] = '2.5.0'; 371 function workflow_upgrade2_5_0() 372 { 373 $GLOBALS['setup_info']['workflow']['currentver'] = '2.5.1'; 374 return $GLOBALS['setup_info']['workflow']['currentver']; 375 } 368 376 369 377 -
branches/2.5/workflow/templates/default/admin_activities.tpl
r1710 r8232 178 178 <div id="div_default_user_option_0" style="display:none;"> 179 179 <input type="input" name="default_user_desc" id="default_user_desc" value="{wf_default_user_desc}" readonly="true" size="40" /> 180 <a href="javascript:void(0)" onclick="openParticipants ('default_user', 'uid=1&hidegroups=1');"><img border="0" src="workflow/templateFile.php?file=images/add_user.png" /></a>180 <a href="javascript:void(0)" onclick="openParticipantsWindow('default_user', 'uid=1&hidegroups=1');"><img border="0" src="workflow/templateFile.php?file=images/add_user.png" /></a> 181 181 <button onclick="document.getElementById('default_user_desc').value=''; document.getElementById('default_user').value='*'; return false">{lang_without_default_user}</button> 182 182 <br> -
branches/2.5/workflow/templates/default/admin_roles.tpl
r795 r8232 123 123 </select> 124 124 </td><td valign=center align=center> 125 <a href='javascript:void(0)' onclick="openParticipants ('user_list', 'entities=ug&usePreffix=1');"><img border=0 src={src_img_add_users}></a>125 <a href='javascript:void(0)' onclick="openParticipantsWindow('user_list', 'entities=ug&usePreffix=1');"><img border=0 src={src_img_add_users}></a> 126 126 <br> 127 <a href='javascript:void(0)' onclick="openParticipants ('user_list', 'entities=ug&usePreffix=1');">{lang_Add}</a>127 <a href='javascript:void(0)' onclick="openParticipantsWindow('user_list', 'entities=ug&usePreffix=1');">{lang_Add}</a> 128 128 <br><br> 129 129 <a href="javascript:void(0)" onclick="participantsRemoveUser(document.getElementById('user_list'));"><img border=0 src={src_img_del_users}></a> -
branches/2.5/zpush/backend/expresso/expresso.php
r7671 r8232 24 24 private function getProvider( $folderId ) 25 25 { 26 27 26 28 foreach($this->providers as $provider) 27 29 { … … 109 111 public function ChangeFolder($folderid, $oldid, $displayname, $type) 110 112 { 111 // TODO: Implement ChangeFolder() method.113 return $this->getProvider($oldid ? $oldid: $folderid)->ChangeFolder($folderid, $oldid, $displayname, $type); 112 114 } 113 115 … … 124 126 public function DeleteFolder($id, $parentid) 125 127 { 126 // TODO: Implement DeleteFolder() method.128 return $this->getProvider($id)->DeleteFolder($id, $parentid); 127 129 } 128 130 -
branches/2.5/zpush/backend/expresso/providers/calendarProvider.php
r8032 r8232 30 30 { 31 31 $return = array(); 32 $criteria = CALENDAR_SYNC_SIGNED_CALENDARS ? array( 'filter' => array( 'AND' , array( '=' , 'type' , '0' ) , array( '=' , 'user' , $this->_uidnumber ))) : array( 'filter' => array ( 'AND' ,array( '=' , 'isOwner' , '1' ),array( '=' , 'type' , '0' ) , array( '=' , 'user' , $this->_uidnumber ))); 33 $sigs = Controller::find(array('concept' => 'calendarSignature'), array( 'id','calendar' ), $criteria); 34 35 if(Request::GetDeviceType() == 'iPhone' || Request::GetDeviceType() == 'iPad') 36 { 37 foreach($sigs as $sig) 38 { 39 $calendar = Controller::read( array( 'concept' => 'calendar' , 'id' => $sig['calendar'] )); 40 $tmpSig = array(); 41 $tmpSig["id"] = 'calendar'.$sig['id']; 42 $tmpSig["parent"] = 0; 43 $tmpSig["mod"] = $calendar['name']; 44 $return[] = $tmpSig; 45 } 46 } 47 else 48 { 49 $defaultCalendar = Controller::find(array('concept' => 'modulePreference'), array('value','id') , array('filter' => array( 'and' , array('=' , 'name' , 'defaultCalendar') , array('=' , 'module' , 'expressoCalendar') , array('=' , 'user' , $this->_uidnumber ) )) ); 50 51 if(isset($defaultCalendar[0])) //Prioriza agenda default de importaà §Ã£o pois o android so sincroniza a primeira agenda.52 { 53 foreach($sigs as $i => $sig) 54 { 55 if($sig['calendar'] == $defaultCalendar[0]['value']) 56 { 57 $calendar = Controller::read( array( 'concept' => 'calendar' , 'id' => $sig['calendar'] )); 58 $tmpSig = array(); 59 $tmpSig["id"] = 'calendar'.$sig['id']; 60 $tmpSig["parent"] = 0; 61 $tmpSig["mod"] = $calendar['name']; 62 $return[] = $tmpSig; 63 } 64 } 65 } 66 else 67 { 68 $sig = $sigs[0]; 69 $calendar = Controller::read( array( 'concept' => 'calendar' , 'id' => $sig['calendar'] )); 70 $tmpSig = array(); 71 $tmpSig["id"] = 'calendar'.$sig['id']; 72 $tmpSig["parent"] = 0; 73 $tmpSig["mod"] = $calendar['name']; 74 $return[] = $tmpSig; 75 76 } 32 $criteria = CALENDAR_SYNC_SIGNED_CALENDARS ? array( 'filter' => array( 'AND' , array( '=' , 'type' , '0' ) , array( '=' , 'user' , $this->_uidnumber ))) : array( 'filter' => array ( 'AND' ,array( '=' , 'isOwner' , '1' ),array( '=' , 'type' , '0' ) , array( '=' , 'user' , $this->_uidnumber ))); 33 $sigs = Controller::find(array('concept' => 'calendarSignature'), array( 'id','calendar' ), $criteria); 34 35 if(Request::GetDeviceType() == 'iPhone' || Request::GetDeviceType() == 'iPad') 36 { 37 foreach($sigs as $sig) 38 { 39 $calendar = Controller::read( array( 'concept' => 'calendar' , 'id' => $sig['calendar'] )); 40 $tmpSig = array(); 41 $tmpSig["id"] = 'calendar'.$sig['id']; 42 $tmpSig["parent"] = 0; 43 $tmpSig["mod"] = $calendar['name']; 44 $return[] = $tmpSig; 45 } 46 } 47 else 48 { 49 $defaultCalendar = Controller::find(array('concept' => 'modulePreference'), array('value','id') , array('filter' => array( 'and' , array('=' , 'name' , 'defaultCalendar') , array('=' , 'module' , 'expressoCalendar') , array('=' , 'user' , $this->_uidnumber ) )) ); 50 51 if(isset($defaultCalendar[0])) //Prioriza agenda default de importação pois o android so sincroniza a primeira agenda. 52 { 53 foreach($sigs as $i => $sig) 54 { 55 if($sig['calendar'] == $defaultCalendar[0]['value']) 56 { 57 $calendar = Controller::read( array( 'concept' => 'calendar' , 'id' => $sig['calendar'] )); 58 $tmpSig = array(); 59 $tmpSig["id"] = 'calendar'.$sig['id']; 60 $tmpSig["parent"] = 0; 61 $tmpSig["mod"] = $calendar['name']; 62 $return[] = $tmpSig; 63 } 64 } 65 } 66 else 67 { 68 $sig = $sigs[0]; 69 $calendar = Controller::read( array( 'concept' => 'calendar' , 'id' => $sig['calendar'] )); 70 $tmpSig = array(); 71 $tmpSig["id"] = 'calendar'.$sig['id']; 72 $tmpSig["parent"] = 0; 73 $tmpSig["mod"] = $calendar['name']; 74 $return[] = $tmpSig; 75 76 } 77 77 } 78 78 … … 154 154 public function ChangeFolder($folderid, $oldid, $displayname, $type) 155 155 { 156 return false; 156 if($oldid) 157 { 158 $idNumber = (int)str_replace('calendar' , '' , $oldid); 159 $calendarSignature = Controller::read( array( 'concept' => 'calendarSignature' , 'id' => $idNumber )); 160 161 Controller::update( array('concept' => 'calendar' , 'id' => $calendarSignature['calendar']), array( 'name' => $displayname) ); 162 163 return $this->StatFolder($oldid); 164 } 165 else 166 { 167 $cal = array('name' => $displayname, 168 'timezone' => 'America/Sao_Paulo', 169 'type' => '0' 170 ); 171 172 $calCreated = Controller::create(array('concept' => 'calendar'), $cal); 173 174 if(!$calCreated){ 175 return false; 176 } 177 178 $sig = array('user' => $_SESSION['wallet']['user']['uidNumber'], 179 'calendar' => $calCreated['id'], 180 'isOwner' => '1', 181 'dtstamp' => time() . '000', 182 'fontColor' => 'FFFFFF', 183 'backgroundColor' => '3366CC', 184 'borderColor' => '3366CC', 185 ); 186 187 $sigCreated = Controller::create(array('concept' => 'calendarSignature'), $sig); 188 189 if(!$sigCreated){ 190 return false; 191 } 192 else 193 { 194 $return = array(); 195 $return["id"] = 'calendar'.$calCreated; 196 $return["parent"] = 0; 197 $return["mod"] = $displayname; 198 return $return; 199 } 200 } 201 202 return false; 157 203 158 204 } … … 168 214 * @throws StatusException could throw specific SYNC_FSSTATUS_* exceptions 169 215 */ 170 public function DeleteFolder($id, $parentid) 171 { 172 return false; 216 public function DeleteFolder($id, $parent) 217 { 218 $interation = array(); 219 $idNumber = (int)str_replace('calendar' , '' , $id); 220 $calendarSignature = Controller::read( array( 'concept' => 'calendarSignature' , 'id' => $idNumber )); 221 222 $interation['calendar://' . $calendarSignature['calendar']] = false; 223 ob_start(); 224 $args = $interation; 225 include EXPRESSO_PATH.'/prototype/Sync.php'; 226 ob_end_clean(); 227 228 return true; 173 229 } 174 230 … … 302 358 break; 303 359 case 'd': 304 $mult = 3600;360 $mult = 1440; 305 361 break; 306 362 default: … … 316 372 case STATUS_ACCEPTED: 317 373 $message->busystatus = 2; 318 break;374 break; 319 375 case STATUS_TENTATIVE: 320 376 $message->busystatus = 1; … … 333 389 //------------------------------------------------------------------------------------------------------------// 334 390 335 /*336 * Sincronização de Recorrência337 */391 /* 392 * Sincronização de Recorrência 393 */ 338 394 $repeats = Controller::find(array('concept' => 'repeat'), null , array( 'filter' => array( 'and' , array( '=' , 'schedulable' , $schedulable['id'] ),array( '!=' , 'frequency' , 'none' ) ) )); 339 395 if(is_array($repeats) && count($repeats) > 0) … … 359 415 360 416 if($repeat['endTime']) 361 $recur->until = (int) substr($repeat['endTime'], 0, -3);417 $recur->until = (int) substr($repeat['endTime'], 0, -3); 362 418 363 419 $recur->interval = $repeat['interval'] ? $repeat['interval'] : 1; … … 558 614 $schedulable['timezone'] = $calendar['timezone']; 559 615 560 561 $sv = new DateTime('@'.($message->starttime + $GMT_CEL), $calendarSignatureTimezone); 562 563 if($sv->format('I') == 0) 564 $schedulable['startTime'] = $schedulable['startTime'] - 3600000; 565 566 $ev = new DateTime('@'.($message->endtime + $GMT_CEL), $calendarSignatureTimezone); 567 568 if($ev->format('I') == 0) 569 $schedulable['endTime'] = $schedulable['endTime'] - 3600000; 570 616 617 $sv = new DateTime('@'.($message->starttime + $GMT_CEL), $calendarSignatureTimezone); 618 619 if($sv->format('I') == 0) 620 $schedulable['startTime'] = $schedulable['startTime'] - 3600000; 621 622 $ev = new DateTime('@'.($message->endtime + $GMT_CEL), $calendarSignatureTimezone); 623 624 if($ev->format('I') == 0) 625 $schedulable['endTime'] = $schedulable['endTime'] - 3600000; 626 571 627 $schedulable['allDay'] = $message->alldayevent; 572 628 $schedulable['description'] = $message->body; … … 741 797 if($v['user']['id'] == $this->_uidnumber ) 742 798 { 743 $schedulable['participants'][$i]['status'] = $this->formatBusy($message->busystatus);799 $schedulable['participants'][$i]['status'] = $this->formatBusy($message->busystatus); 744 800 } 745 801 } … … 779 835 $schedulable['startTime'] = (($message->starttime + $GMT_CEL) + ($calendarSignatureTimezone->getOffset(new DateTime('@'.($message->starttime + $GMT_CEL), new DateTimeZone('UTC'))) * -1) ) *1000; //$message->starttime * 1000; 780 836 $schedulable['endTime'] = (($message->endtime + $GMT_CEL) + ($calendarSignatureTimezone->getOffset(new DateTime('@'.($message->endtime + $GMT_CEL), new DateTimeZone('UTC')))* -1)) *1000;//$message->endtime * 1000; 781 782 $sv = new DateTime('@'.($message->starttime + $GMT_CEL), $calendarSignatureTimezone); 783 784 if($sv->format('I') == 0) 785 $schedulable['startTime'] = $schedulable['startTime'] - 3600000; 786 787 $ev = new DateTime('@'.($message->endtime + $GMT_CEL), $calendarSignatureTimezone); 788 789 if($ev->format('I') == 0) 790 $schedulable['endTime'] = $schedulable['endTime'] - 3600000; 791 837 838 $sv = new DateTime('@'.($message->starttime + $GMT_CEL), $calendarSignatureTimezone); 839 840 if($sv->format('I') == 0) 841 $schedulable['startTime'] = $schedulable['startTime'] - 3600000; 842 843 $ev = new DateTime('@'.($message->endtime + $GMT_CEL), $calendarSignatureTimezone); 844 845 if($ev->format('I') == 0) 846 $schedulable['endTime'] = $schedulable['endTime'] - 3600000; 847 792 848 $schedulable['timezone'] = $calendar['timezone']; 793 849 … … 803 859 $participant['isOrganizer'] = '1'; 804 860 $participant['acl'] = 'rowi'; 805 $participant['status'] = '1'; 861 $participant['status'] = '1'; 806 862 807 863 if($message->organizeremail) … … 1021 1077 if($v['user']['id'] == $this->_uidnumber && $v['user']['isOrganizer'] == '1') 1022 1078 { 1023 $delete = true;1079 $delete = true; 1024 1080 } 1025 1081 } … … 1262 1318 break; 1263 1319 case 0: 1264 return STATUS_UNANSWERED;1320 return STATUS_UNANSWERED; 1265 1321 break; 1266 1322 } -
branches/2.5/zpush/backend/expresso/providers/imapProvider.php
r8169 r8232 497 497 if (!empty($bccaddr)) $headers .= "\nBcc: $bccaddr"; 498 498 // changed by mku ZP-330 499 500 require_once(__DIR__."/../../../../library/Mail/Mail.php"); 501 $mail_object =& Mail::factory("smtp", $GLOBALS['config']['SMTP']); 502 $send = $mail_object->send($toaddr, $message->headers , $body); 503 // $send = @mail ( $toaddr, $message->headers["subject"], $body, $headers, $envelopefrom ); 499 500 require_once(__DIR__."/../../../../library/Mail/Mail.php"); 501 $mail_object =& Mail::factory("smtp", $GLOBALS['config']['SMTP']); 502 $send = $mail_object->send($toaddr, $message->headers , $body); 503 // $send = @mail ( $toaddr, $message->headers["subject"], $body, $headers, $envelopefrom ); 504 504 } 505 505 … … 904 904 905 905 // build name for new mailboxBackendMaildir 906 $displayname = Utils::Utf7_iconv_encode(Utils::Utf8_to_utf7($displayname)); 907 $newname = $this->server . $folderid . $this->serverdelimiter . $displayname; 908 906 $displayname = Utils::Utf7_iconv_encode(Utils::Utf8_to_utf7($displayname));; 907 $new = $this->server . $this->getImapIdFromFolderId($folderid) . $this->serverdelimiter. $displayname; 909 908 $csts = false; 910 // if $id is set => rename mailbox, otherwise create 911 if ($oldid) { 912 // rename doesn't work properly with IMAP 913 // the activesync client doesn't support a 'changing ID' 914 // TODO this would be solved by implementing hex ids (Mantis #459) 915 //$csts = imap_renamemailbox($this->mbox, $this->server . imap_utf7_encode(str_replace(".", $this->serverdelimiter, $oldid)), $newname); 916 } 917 else { 918 $csts = @imap_createmailbox($this->mbox, $newname); 919 } 909 910 $csts = ($oldid) ? imap_renamemailbox($this->mbox, $this->server .$this->getImapIdFromFolderId($oldid) , $new) : imap_createmailbox($this->mbox, $new); 911 920 912 if ($csts) { 921 return $this->StatFolder($folderid . $this->serverdelimiter . $displayname); 913 $newId = $this->convertImapId($new); 914 return $this->StatFolder($newId); 922 915 } 923 916 else … … 936 929 * 937 930 */ 938 public function DeleteFolder($id, $parentid){ 939 // TODO implement 940 return false; 931 public function DeleteFolder($id, $parentid) 932 { 933 $ret = imap_deletemailbox($this->mbox , $this->server .$this->getImapIdFromFolderId($id) ); 934 imap_expunge( $this->mbox ); 935 return $ret; 941 936 } 942 937 -
branches/2.5/zpush/config.php
r8169 r8232 284 284 $row = pg_fetch_assoc( $rs ); 285 285 286 $smtpConfig = parse_ini_file(EXPRESSO_PATH . '/prototype/config/SMTP.srv' , true ); 287 $GLOBALS['config']['SMTP'] = $smtpConfig['config']; 288 286 $smtpConfig = parse_ini_file(EXPRESSO_PATH . '/prototype/config/SMTP.srv' , true ); 287 $GLOBALS['config']['SMTP'] = $smtpConfig['config']; 288 289 289 // ************************ 290 290 // BackendIMAP settings … … 314 314 define('IMAP_USE_IMAPMAIL', false); 315 315 316 define('CALENDAR_SYNC_SIGNED_CALENDARS', false); 316 define('CALENDAR_SYNC_SIGNED_CALENDARS', false); 317 317 318 318 $rs = pg_query( $GLOBALS['connections']['db'], 'SELECT app_id FROM phpgw_applications WHERE app_name = \'zpush\'' ); -
branches/2.5/zpush/lib/utils/utils.php
r7589 r8232 446 446 static public function IsSystemFolder($foldertype) { 447 447 return ($foldertype == SYNC_FOLDER_TYPE_INBOX || $foldertype == SYNC_FOLDER_TYPE_DRAFTS || $foldertype == SYNC_FOLDER_TYPE_WASTEBASKET || $foldertype == SYNC_FOLDER_TYPE_SENTMAIL || 448 $foldertype == SYNC_FOLDER_TYPE_OUTBOX || $foldertype == SYNC_FOLDER_TYPE_TASK || $foldertype == SYNC_FOLDER_TYPE_APPOINTMENT|| $foldertype == SYNC_FOLDER_TYPE_CONTACT ||448 $foldertype == SYNC_FOLDER_TYPE_OUTBOX || $foldertype == SYNC_FOLDER_TYPE_TASK /*|| $foldertype == SYNC_FOLDER_TYPE_APPOINTMENT */|| $foldertype == SYNC_FOLDER_TYPE_CONTACT || 449 449 $foldertype == SYNC_FOLDER_TYPE_NOTE || $foldertype == SYNC_FOLDER_TYPE_JOURNAL) ? true:false; 450 450 } -
branches/2.5/zpush/setup/setup.inc.php
r7589 r8232 13 13 $setup_info['zpush']['title'] = 'Z-Push' ; 14 14 /* Ao incrementar versão, não esquecer de declarar função do tables_update.inc.php*/ 15 $setup_info['zpush']['version'] = '2.5. 0';15 $setup_info['zpush']['version'] = '2.5.1'; 16 16 $setup_info['zpush']['app_order'] = 10; 17 17
Note: See TracChangeset
for help on using the changeset viewer.