- Timestamp:
- 06/14/12 01:17:45 (12 years ago)
- Location:
- sandbox/expressoServiceImap
- Files:
-
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
sandbox/expressoServiceImap/expressoMail1_2/js/draw_api.js
r6469 r6486 3829 3829 autoOpen:false 3830 3830 }); 3831 3832 3831 3833 3832 jQuery.getScript("../prototype/modules/attach_message/attach_message.js", function(){ 3834 3833 jQuery('#message-attach-dialog').dialog('open'); … … 3879 3878 jQuery('#message-attach-dialog').dialog('close'); 3880 3879 }); 3881 }); 3880 }).fail(function( jqxhr, settings, exception ){ 3881 3882 alert( exception ); 3883 console.log( exception ); 3884 3885 }) 3882 3886 }); 3887 3888 DataLayer.codec( 'folder', 'tree', { 3889 3890 encoder: function( data ){ 3891 3892 if( preferences.use_local_messages == 1 || expresso_offline) 3893 { 3894 var folders = expresso_local_messages.list_local_folders(); 3895 3896 var stripParents = /^(.*)\/([^\/]*)/; 3897 3898 $.each( folders, function( i, folder ){ 3899 3900 if(typeof(folder) == 'undefined') return; 3901 3902 var id = 'local_messages/' + folder[0]; 3903 3904 var parts = stripParents.exec( id ); 3905 3906 data[data.length] = { 'id' : id, 3907 'commonName' : parts[2], 3908 'parentFolder' : parts[1] }; 3909 }); 3910 } 3911 3912 var trees = [[],[],[]], 3913 3914 root = { inbox: /^INBOX/, share: /^user/, local: /^local_messages/ }; 3915 3916 for (var i = 0; i < data.length; i++ ) 3917 { 3918 var index = root.inbox.test(data[i].id) ? 0 : 3919 root.share.test(data[i].id) ? 1 : 3920 root.local.test(data[i].id) ? 2 : 3921 'false'; 3922 3923 if( isNaN(index) ) continue; 3924 3925 if (!unorphanize(trees[index], data[i])) 3926 { 3927 data[i].children = []; 3928 trees[index].push(data[i]); 3929 } 3930 } 3931 3932 return( { folders: trees } ); 3933 } 3934 } ); 3935 3936 current_folder = 'INBOX'; 3937 3938 DataLayer.codec( 'message', 'jqGrid', { 3939 3940 encoder: function( data, crit ){ 3941 3942 if( !crit.criteria.properties.context.folder.indexOf( 'local_messages/' ) ) 3943 { 3944 var msgs = expresso_local_messages.get_local_range_msgs( crit.criteria.properties.context.folder.replace(dots, "/").replace("local_messages/", ""), 3945 crit.offset + 1, crit.limit, "SORTARRIVAL", crit.orderDesc, "ALL", 1, 1 ); 3946 3947 for( var i = 0; i < msgs.length; i++ ) 3948 { 3949 msgs[i].size = msgs[i].Size; 3950 msgs[i].timestamp = msgs[i].udate * 1000; 3951 msgs[i].flags = []; 3952 3953 for( var ii = 0; ii < flags.length; ii++ ) 3954 if( f = $.trim( msgs[i][ flags[ii] ] ) ) 3955 msgs[i].flags[ msgs[i].flags.length ] = f; 3956 3957 msgs[i].flags = msgs[i].flags.join(','); 3958 } 3959 3960 return( {"rows": msgs, 3961 "records": msgs.length, 3962 "page": crit.page, 3963 "total": Math.ceil( msgs.num_msgs / crit.limit )} ); 3964 } 3965 3966 return( data ); 3967 }, 3968 criteria: function( crit ){ 3969 3970 return { criteria: { properties: {context:{folder: current_folder || 'INBOX'}}, offset: crit.rows * ( crit.page - 1 ), limit: crit.rows, orderDesc: crit.sord == "desc" } }; 3971 3972 } 3973 }); 3974 3883 3975 return ID; 3884 3976 } -
sandbox/expressoServiceImap/prototype/Sync.php
r6328 r6486 152 152 $dt = prepare( $concept, $id, $dt, $data, $oldIds, $mounted, $synced ); 153 153 154 ob_start(); 155 print "\n"; 156 print "dt: "; 157 print_r( $dt ); 158 $output = ob_get_clean(); 159 file_put_contents( "/tmp/prototype233.log", $output , FILE_APPEND ); 160 154 161 try{ 155 162 $result = Controller::put( array( 'concept' => $concept, 'id' => $id ), $dt ); … … 160 167 continue; 161 168 } 169 170 ob_start(); 171 print "\n"; 172 print "result: "; 173 print_r( $result ); 174 $output = ob_get_clean(); 175 file_put_contents( "/tmp/prototype233.log", $output , FILE_APPEND ); 176 ob_start(); 177 print "\n"; 178 print "old ids "; 179 print_r( $oldIds ); 180 $output = ob_get_clean(); 181 file_put_contents( "/tmp/prototype233.log", $output , FILE_APPEND ); 162 182 163 183 if( !$result ) -
sandbox/expressoServiceImap/prototype/api/newcontroller.php
r5715 r6486 125 125 $return = array(); 126 126 127 for ( $data as $concept => $dt )127 foreach( $data as $concept => $dt ) 128 128 $return[] = self::put( $dt, array_merge( array( 'concept' => $concept ), $options ) ); 129 129 … … 176 176 177 177 if( $txId ) 178 178 return self::commit( $options['service'], $txId ); 179 179 } 180 180 catch( Exception $e ) -
sandbox/expressoServiceImap/prototype/config/OpenLDAP.srv
r6173 r6486 4 4 idAtribute = "uidNumber" 5 5 host = 127.0.0.1 6 context = " LDAP_DN"6 context = "dc=prognus" 7 7 ; Caso o LDAP requisite autenticacao, configure os parametros a seguir 8 8 ;user = -
sandbox/expressoServiceImap/prototype/config/PostgreSQL.srv
r6081 r6486 7 7 ;host = 127.0.0.1 8 8 port = 5432 9 dbname = expresso 10 user = postgres 11 ; Caso o usuario tenha senha... 9 dbname= expresso24natan 10 user=postgres 12 11 ;password= -
sandbox/expressoServiceImap/prototype/modules/attach_message/attach_message.js
r6303 r6486 6 6 dashes = /\//gi; 7 7 flags = [ 'Attachment', 'Forwarded' ,'Recent', 'Unseen', 'Answered', 'Draft', 'Deleted', 'Flagged', 'Followupflag', 'Label' ]; 8 9 $.ajaxPrefilter(function( options, originalOptions, jqXHR ){ 10 11 var offlineAction = isOffline.exec( options.url ); 12 13 if( offlineAction ) 14 { 15 offlineAction = offlineAction[1] || ""; 16 17 jqXHR.abort(); 18 19 var params = {}; 20 21 if( offlineAction ) 22 offlineAction += options.data ? "&" + options.data : ""; 23 24 offlineAction = offlineAction.split( breakParams ); 25 26 for( var i = 0; i < offlineAction.length; ) 27 params[ offlineAction[i++] ] = offlineAction[i++]; 28 29 rest = params["q"].split("/"); 30 31 if( !(rest.length % 2) ) 32 var id = rest.pop(); 33 34 var concept = rest.pop(); 35 36 for( var i = 0; i < rest.length; ) 37 params[ rest[i++] ] = rest[ i++ ]; 38 39 switch( concept ) 40 { 41 case "message": 42 { 43 if( id ){ 44 var mail = expresso_local_messages.get_local_mail( id ); 45 mail.eml = expresso_local_messages.get_src( mail.url_export_file ); 46 47 ( options.success || options.complete )( mail ); 48 return; 49 } 50 51 var msgs = expresso_local_messages.get_local_range_msgs( params["folder"].replace(dots, "/").replace("local_messages/", ""), 52 params["rows"] * ( params["page"] - 1 ) + 1, 53 params["rows"], "SORTARRIVAL", (params["sord"] == "desc"), 54 "ALL", 1, 1 ); 55 56 for( var i = 0; i < msgs.length; i++ ) 57 { 58 msgs[i].size = msgs[i].Size; 59 msgs[i].timestamp = msgs[i].udate * 1000; 60 msgs[i].flags = []; 61 62 for( var ii = 0; ii < flags.length; ii++ ) 63 if( f = $.trim( msgs[i][ flags[ii] ] ) ) 64 msgs[i].flags[ msgs[i].flags.length ] = f; 65 66 msgs[i].flags = msgs[i].flags.join(','); 67 } 68 69 ( options.success || options.complete )( {"rows": msgs, 70 "records": msgs.length, 71 "page": params["page"], 72 "total": Math.ceil( msgs.num_msgs / params["rows"] )} ); 73 } 74 } 75 } 76 }); 8 months = ['Jan','Feb','Mar','Apr','May','June','July','Aug','Sept','Oct','Nov','Dec']; 77 9 78 10 var BASE_PATH = '../prototype/'; … … 146 78 } 147 79 148 function numberMonths (months){149 switch(months){150 case 'Jan':151 return 1;152 case 'Feb':153 return 2;154 case 'Mar':155 return 3;156 case 'Apr':157 return 4;158 case 'May':159 return 5;160 case 'June':161 return 6;162 case 'July':163 return 7;164 case 'Aug':165 return 8;166 case 'Sept':167 return 9;168 case 'Oct':169 return 10;170 case 'Nov':171 return 11;172 case 'Dec':173 return 12;174 }175 }176 177 80 NormaliseFrom = function(cellvalue, options, rowObject) { 178 81 rowObject['flags'] = rowObject['flags'].split(","); … … 189 92 date2Time = function (timestamp) { 190 93 date = new Date(); 94 if( typeof timestamp === "string" ) 95 timestamp = parseInt( timestamp, 10 ); 191 96 dat = new Date(timestamp); 192 97 if ((date.getTime() - timestamp) < (24*60*60*1000)) { … … 196 101 if(is_ie){ 197 102 var b = date.toString().split(' '); 198 var c = b[2] + "/" + numberMonths(b[1]) + "/" + b[5];103 var c = b[2] + "/" + months.indexOf(b[1]) + "/" + b[5]; 199 104 return '<span class="datable">' + c + '</span>'; 200 105 }else{ … … 209 114 // jQuery('#foldertree').attr('tabIndex', '1').focus(); 210 115 } 211 212 116 213 117 selectedMessagesCount = function() { … … 231 135 var selectedFolder = {}; 232 136 233 function adaptOffline( data )234 {235 if( preferences.use_local_messages == 1 || expresso_offline)236 {237 var folders = expresso_local_messages.list_local_folders();238 239 var stripParents = /^(.*)\/([^\/]*)/;240 241 $.each( folders, function( i, folder ){242 243 if(typeof(folder) == 'undefined') return;244 245 var id = 'local_messages/' + folder[0];246 247 var parts = stripParents.exec( id );248 249 data[data.length] = {'id' : id,250 'commonName' : parts[2],251 'parentFolder' : parts[1]};252 });253 }254 255 return( data );256 257 }258 259 137 $mailpreview_tabs_label_length = 15; 260 138 … … 263 141 jQuery('#buttons-container .button').button(); 264 142 265 jQuery.ajax({ 266 url: BASE_PATH + "REST.php?q=folder", 267 dataType: 'json', 268 269 success: function( data ){ 270 271 data = adaptOffline( data ); 272 273 var tree1 = new Array(); 274 var tree2 = new Array(); 275 var tree3 = new Array(); 276 for (var i=0; i<data.length; i++) { 277 278 if (/^INBOX/.test(data[i].id)) { 279 if (!unorphanize(tree1, data[i])) { 280 data[i].children = new Array(); 281 tree1.push(data[i]); 282 } 283 } 284 else if (/^user/.test(data[i].id)) { 285 if (!unorphanize(tree2, data[i])) { 286 data[i].children = new Array(); 287 tree2.push(data[i]); 288 } 289 } 290 else if (/^local_messages/.test(data[i].id)) { 291 if (!unorphanize(tree3, data[i])) { 292 data[i].children = new Array(); 293 tree3.push(data[i]); 294 } 295 } 296 297 } 298 299 var firstFolder = jQuery("#foldertree-container") 300 .removeClass('empty-container') 301 .html(DataLayer.render(BASE_PATH + 'api/templates/foldertree.ejs', {folders: [tree1, tree2, tree3]})) 302 .find("#foldertree").treeview() 303 .click(function(event){ 304 //request new selected folder messages 305 var target = $(event.target); 306 307 if( target.is('.collapsable-hitarea, .expandable-hitarea, .lastCollapsable, .lastExpandable, .treeview') ) 308 return; 309 310 if( !target.attr('id') ) 311 target = target.parent(); 312 313 if (target.attr('id') == "foldertree") return; 314 315 var targetId = target.attr('id'); 316 var child = target.find('.folder'); 317 318 $('.filetree span.folder.selected').removeClass('selected'); 319 if(!target.is('#foldertree > .expandable, #foldertree > .collapsable')) 320 $(target).children('.folder').addClass('selected'); 321 322 selectedFolder = { 323 id: targetId, 324 name: child.attr('title'), 325 'class': child.attr('class') 326 }; 327 328 var grid = $("#message_attacher_grid"), offlineCase = ""; 329 330 if( !targetId.indexOf( 'local_messages/' ) ) 331 offlineCase = ":offline"; 332 333 334 grid.jqGrid('setGridParam',{url:BASE_PATH + 'REST.php'+offlineCase+'?q=folder/'+targetId.replace(dashes, '.')+'/message'}) 335 .trigger("reloadGrid") 336 .jqGrid('setCaption', '<span class="'+child.attr('class')+'">'+child.attr('title')+'</span>'); 337 }) 338 .find('span:first-child'); 339 $('span.folder.inbox').addClass('selected'); 340 selectedFolder = { 341 id: firstFolder.parent().attr('id'), 342 name: firstFolder.attr('title'), 343 'class': firstFolder.attr('class') 344 }; 345 346 //jqgrid 347 jQuery("#mailgrid-container") 348 .removeClass('empty-container') 349 .html(DataLayer.render(BASE_PATH + 'api/templates/messagegrid.ejs', {})) 350 .find("#message_attacher_grid") 351 .jqGrid({ 352 url:BASE_PATH + 'REST.php?q=folder/INBOX/message', 353 datatype: "json", 354 mtype: 'GET', 355 colNames:['#',' ', 'De', 'Assunto', 'Data', 'Tamanho'], 356 colModel:[ 357 {name:'msg_number',index:'msg_number', width:45, hidden:true, sortable:false}, 358 {name:'flags',index:'msg_number',edittype: 'image', width:100, sortable:false, formatter:flags2Class, title :false}, 359 {name:'from.name',index:'msg_number', width:70, sortable:false, formatter:NormaliseFrom}, 360 {name:'subject',index:'subject', width:245, sortable:false,formatter:NormaliseSubject}, 361 {name:'timestamp',index:'timestamp', width:65, align:"center", sortable:false, formatter:date2Time}, 362 {name:'size',index:'size', width:55, align:"right", sortable:false, formatter:bytes2Size} 363 ], 364 jsonReader : { 365 root:"rows", 366 page: "page", 367 total: "total", 368 records: "records", 369 repeatitems: false, 370 id: "0" 371 }, 372 rowNum:10, 373 rowList:[10,25,50], 374 pager: '#message_attacher_grid_pager', 375 sortname: 'id', 376 viewrecords: true, 377 sortorder: "desc", 378 multiselect: true, 379 autowidth: true, 380 loadComplete: function(data) { 381 lastLoadedMessages = data.rows; 382 383 // aplica o contador 384 jQuery('.timable').each(function (i) { 385 jQuery(this).countdown({ 386 since: new Date(parseInt(this.title)), 387 significant: 1, 388 layout: 'há {d<}{dn} {dl} {d>}{h<}{hn} {hl} {h>}{m<}{mn} {ml} {m>}{s<}{sn} {sl}{s>}', 389 description: ' atrás' 390 }); 391 }); 392 393 // reconstrói a seleção das mensagens mesmo depois da mudança de pasta 394 if (selectedMessages[selectedFolder.id]) { 395 for (var message in selectedMessages[selectedFolder.id]){ 396 for (var j=0; j<data.rows.length; j++){ 397 if (selectedMessages[selectedFolder.id][message] && message == data.rows[j].msg_number) { 398 jQuery("#message_attacher_grid").setSelection(jQuery("#message_attacher_grid").getDataIDs()[j], false); 399 } 400 } 401 } 402 } 403 $('#cb_message_attacher_grid').css('display', 'none'); 404 405 }, 406 onSelectRow: function (id, selected) { 407 var message = false; 408 for (var i=0; i<lastLoadedMessages.length; i++){ 409 if (lastLoadedMessages[i].msg_number == id) { 410 message = lastLoadedMessages[i]; 411 break; 412 } 413 } 414 415 var tabPanelTemplateId = 'mailpreview_tab_' + selectedFolder.id.replace(/[.\/]/g, '_') + '_' + message.msg_number; 416 var tabPanelTemplateId = tabPanelTemplateId.replace(/[\s\/]/g, '-'); 417 418 if (selected) { 419 if (onceOpenedMessages[selectedFolder.id] && onceOpenedMessages[selectedFolder.id][message.msg_number]) { 420 if (!selectedMessages[selectedFolder.id]) 421 selectedMessages[selectedFolder.id] = {}; 422 423 selectedMessages[selectedFolder.id][message.msg_number] = true; 424 $('#mailpreview-container').unblock(); 425 426 var tabPanelTemplateLabel = html_entities(onceOpenedMessages[selectedFolder.id][message.msg_number].subject); 427 if (tabPanelTemplateLabel.length > $mailpreview_tabs_label_length + 3) 428 tabPanelTemplateLabel = tabPanelTemplateLabel.substring(0, $mailpreview_tabs_label_length) + '...'; 429 430 if (!$('#' + tabPanelTemplateId).length) { 431 $mailpreview_tabs.tabs("add", '#' + tabPanelTemplateId, tabPanelTemplateLabel) 432 .find('.message.empty-container').hide().end() 433 .find('#' + tabPanelTemplateId).html(onceOpenedMessages[selectedFolder.id][message.msg_number].body); 434 } else { 435 $mailpreview_tabs.tabs('select', '#' + tabPanelTemplateId) 436 .find('#' + tabPanelTemplateId + ', [href="#' + tabPanelTemplateId + '"]').removeClass('preview-message-unselected'); 437 } 438 439 } else { 440 jQuery('#mailpreview_container').block({ 441 message: '<div id="loading-content"><div class="image"></div></div>', 442 css: { 443 backgroundImage: 'url('+BASE_PATH+'modules/attach_message/images/loading.gif)', 444 backgroundRepeat: 'no-repeat', 445 backgroundPosition: 'center', 446 backgroundColor: 'transparent', 447 width: '32px', 448 height: '32px', 449 border:'none' 450 }, 451 overlayCSS: { 452 backgroundColor: '#CCC', 453 opacity: 0.5 454 } 455 }); 456 457 var offlineCase = ""; 458 459 if( !selectedFolder.id.indexOf( 'local_messages/' ) ) 460 offlineCase = ":offline"; 461 462 if (!selectedMessages[selectedFolder.id]) 463 selectedMessages[selectedFolder.id] = {}; 464 selectedMessages[selectedFolder.id][message.msg_number] = true; 465 $.ajax({ 466 accepts: 'text/html', 467 url: BASE_PATH + 'REST.php'+offlineCase+'?q=folder/'+selectedFolder.id.replace(dashes, '.')+'/message/'+id, 468 dataType: 'json', 469 success: function( mail_preview ){ 470 //selectedMessagesCount(); 471 if (!onceOpenedMessages[selectedFolder.id]) 472 onceOpenedMessages[selectedFolder.id] = {}; 473 onceOpenedMessages[selectedFolder.id][message.msg_number] = jQuery.extend(true, message, mail_preview); 474 475 $('#mailpreview_container').unblock(); 476 477 var tabPanelTemplateLabel = html_entities(onceOpenedMessages[selectedFolder.id][message.msg_number].subject); 478 if (tabPanelTemplateLabel.length > $mailpreview_tabs_label_length + 3) 479 tabPanelTemplateLabel = tabPanelTemplateLabel.substring(0, $mailpreview_tabs_label_length) + '...'; 480 selectedMessagesCount(); 481 482 if (!$('#' + tabPanelTemplateId).length) { 483 $mailpreview_tabs.tabs("add", '#' + tabPanelTemplateId, tabPanelTemplateLabel) 484 .find('.message.empty-container').hide().end() 485 .find('#' + tabPanelTemplateId).html(onceOpenedMessages[selectedFolder.id][message.msg_number].body) 486 .prepend( 487 '<div class="mailpreview-message-info">' + 488 get_lang('Subject') + ': ' + 489 html_entities(onceOpenedMessages[selectedFolder.id][message.msg_number].subject) + 490 '</div>' 491 ) 492 .find('[class^="ExpressoCssWrapper"]').addClass("mailpreview-message-body"); 493 } else { 494 $mailpreview_tabs.tabs('select', '#' + tabPanelTemplateId) 495 .find('#' + tabPanelTemplateId + ', [href="#' + tabPanelTemplateId + '"]').removeClass('preview-message-unselected'); 496 } 497 } 498 }); 499 } 500 } else { 501 /** 502 * if you wants to remove tab on unselect message, 503 * but still needs to uselect message on remove tab. 504 * 505 */ 506 /* 507 if ($('#' + tabPanelTemplateId).length) { 508 $mailpreview_tabs.tabs('remove', '#' + tabPanelTemplateId); 509 } 510 */ 511 selectedMessages[selectedFolder.id][message.msg_number] = false; 512 $mailpreview_tabs.find('#' + tabPanelTemplateId + ', [href="#' + tabPanelTemplateId + '"]').addClass('preview-message-unselected'); 513 } 514 515 if (onceOpenedMessages[selectedFolder.id] && onceOpenedMessages[selectedFolder.id][message.msg_number]) 516 selectedMessagesCount(); 517 }, 518 caption: '<span class="'+selectedFolder['class']+'">'+selectedFolder.name+'</span>' 519 }); 520 //.jqGrid('navGrid','#message_attacher_grid_pager',{edit:false,add:false,del:false}); 521 var title = [get_lang("First page"), get_lang("Prev page"), get_lang("Next page"), get_lang("Last page")]; 522 $("#first_message_attacher_grid_pager").attr("title",title[0]); 523 $("#prev_message_attacher_grid_pager").attr("title",title[1]); 524 $("#next_message_attacher_grid_pager").attr("title",title[2]); 525 $("#last_message_attacher_grid_pager").attr("title",title[3]); 526 } 143 var firstFolder = jQuery("#foldertree-container") 144 .removeClass('empty-container') 145 .html(DataLayer.render(BASE_PATH + 'api/templates/foldertree.ejs', 'folder:tree', false, false, true)) 146 .find("#foldertree").treeview() 147 .click(function(event){ 148 //request new selected folder messages 149 var target = $(event.target); 150 151 if( target.is('.collapsable-hitarea, .expandable-hitarea, .lastCollapsable, .lastExpandable, .treeview') ) 152 return; 153 154 if( !target.attr('id') ) 155 target = target.parent(); 156 157 if (target.attr('id') == "foldertree") return; 158 159 var targetId = target.attr('id'); 160 var child = target.find('.folder'); 161 162 $('.filetree span.folder.selected').removeClass('selected'); 163 if(!target.is('#foldertree > .expandable, #foldertree > .collapsable')) 164 $(target).children('.folder').addClass('selected'); 165 166 selectedFolder = { 167 id: targetId, 168 name: child.attr('title'), 169 'class': child.attr('class') 170 }; 171 172 current_folder = targetId.replace(dashes, '.'); 173 174 $("#message_attacher_grid").trigger("reloadGrid") 175 .jqGrid('setCaption', '<span class="'+child.attr('class')+'">'+child.attr('title')+'</span>'); 176 }) 177 .find('span:first-child'); 178 $('span.folder.inbox').addClass('selected'); 179 selectedFolder = { 180 id: firstFolder.parent().attr('id'), 181 name: firstFolder.attr('title'), 182 'class': firstFolder.attr('class') 183 }; 184 185 //jqgrid 186 jQuery("#mailgrid-container") 187 .removeClass('empty-container') 188 .html(DataLayer.render(BASE_PATH + 'api/templates/messagegrid.ejs', {})) 189 .find("#message_attacher_grid") 190 .jqGrid({ 191 url: 'message:jqGrid', 192 datatype: "json", 193 mtype: 'GET', 194 colNames:['#',' ', 'De', 'Assunto', 'Data', 'Tamanho'], 195 colModel:[ 196 {name:'msg_number',index:'msg_number', width:45, sortable:false, hidden:true}, 197 {name:'flags', index:'msg_number', width:100, sortable:false, formatter:flags2Class, edittype: 'image', title :false}, 198 {name:'from.name', index:'msg_number', width:70, sortable:false, formatter:NormaliseFrom}, 199 {name:'subject', index:'subject', width:245, sortable:false, formatter:NormaliseSubject}, 200 {name:'timestamp', index:'timestamp', width:65, sortable:false, formatter:date2Time, align:"center"}, 201 {name:'size', index:'size', width:55, sortable:false, formatter:bytes2Size, align:"right"} 202 ], 203 jsonReader : { 204 root:"rows", 205 page: "page", 206 total: "total", 207 records: "records", 208 repeatitems: false, 209 id: "0" 210 }, 211 rowNum:10, 212 rowList:[10,25,50], 213 pager: '#message_attacher_grid_pager', 214 sortname: 'id', 215 viewrecords: true, 216 sortorder: "desc", 217 multiselect: true, 218 autowidth: true, 219 loadComplete: function(data) { 220 lastLoadedMessages = data.rows; 221 222 // aplica o contador 223 jQuery('.timable').each(function (i) { 224 jQuery(this).countdown({ 225 since: new Date(parseInt(this.title)), 226 significant: 1, 227 layout: 'há {d<}{dn} {dl} {d>}{h<}{hn} {hl} {h>}{m<}{mn} {ml} {m>}{s<}{sn} {sl}{s>}', 228 description: ' atrás' 229 }); 230 }); 231 232 // reconstrói a seleção das mensagens mesmo depois da mudança de pasta 233 if (selectedMessages[selectedFolder.id]) { 234 for (var message in selectedMessages[selectedFolder.id]){ 235 for (var j=0; j<data.rows.length; j++){ 236 if (selectedMessages[selectedFolder.id][message] && message == data.rows[j].msg_number) { 237 jQuery("#message_attacher_grid").setSelection(jQuery("#message_attacher_grid").getDataIDs()[j], false); 238 } 239 } 240 } 241 } 242 $('#cb_message_attacher_grid').css('display', 'none'); 243 244 }, 245 onSelectRow: function (id, selected) { 246 var message = false; 247 for (var i=0; i<lastLoadedMessages.length; i++){ 248 if (lastLoadedMessages[i].msg_number == id) { 249 message = lastLoadedMessages[i]; 250 break; 251 } 252 } 253 254 var tabPanelTemplateId = 'mailpreview_tab_' + selectedFolder.id.replace(/[.\/]/g, '_') + '_' + message.msg_number; 255 var tabPanelTemplateId = tabPanelTemplateId.replace(/[\s\/]/g, '-'); 256 257 if (selected) { 258 if (onceOpenedMessages[selectedFolder.id] && onceOpenedMessages[selectedFolder.id][message.msg_number]) { 259 if (!selectedMessages[selectedFolder.id]) 260 selectedMessages[selectedFolder.id] = {}; 261 262 selectedMessages[selectedFolder.id][message.msg_number] = true; 263 $('#mailpreview-container').unblock(); 264 265 var tabPanelTemplateLabel = html_entities(onceOpenedMessages[selectedFolder.id][message.msg_number].subject); 266 if (tabPanelTemplateLabel.length > $mailpreview_tabs_label_length + 3) 267 tabPanelTemplateLabel = tabPanelTemplateLabel.substring(0, $mailpreview_tabs_label_length) + '...'; 268 269 if (!$('#' + tabPanelTemplateId).length) { 270 $mailpreview_tabs.tabs("add", '#' + tabPanelTemplateId, tabPanelTemplateLabel) 271 .find('.message.empty-container').hide().end() 272 .find('#' + tabPanelTemplateId).html(onceOpenedMessages[selectedFolder.id][message.msg_number].body); 273 } else { 274 $mailpreview_tabs.tabs('select', '#' + tabPanelTemplateId) 275 .find('#' + tabPanelTemplateId + ', [href="#' + tabPanelTemplateId + '"]').removeClass('preview-message-unselected'); 276 } 277 278 } else { 279 jQuery('#mailpreview_container').block({ 280 message: '<div id="loading-content"><div class="image"></div></div>', 281 css: { 282 backgroundImage: 'url('+BASE_PATH+'modules/attach_message/images/loading.gif)', 283 backgroundRepeat: 'no-repeat', 284 backgroundPosition: 'center', 285 backgroundColor: 'transparent', 286 width: '32px', 287 height: '32px', 288 border:'none' 289 }, 290 overlayCSS: { 291 backgroundColor: '#CCC', 292 opacity: 0.5 293 } 294 }); 295 296 if (!selectedMessages[selectedFolder.id]) 297 selectedMessages[selectedFolder.id] = {}; 298 selectedMessages[selectedFolder.id][message.msg_number] = true; 299 300 var folder = selectedFolder.id.replace(dashes, '.'), mail_preview = null; 301 302 if( !folder.indexOf( 'local_messages/' ) ) 303 { 304 mail_preview = expresso_local_messages.get_local_mail( id ); 305 mail_preview.eml = expresso_local_messages.get_src( mail_preview.url_export_file ); 306 } 307 else 308 mail_preview = DataLayer.get( 'message', { filter: id, criteria: { properties: {context:{folder:folder}} } } ); 309 310 if (!onceOpenedMessages[selectedFolder.id]) 311 onceOpenedMessages[selectedFolder.id] = {}; 312 onceOpenedMessages[selectedFolder.id][message.msg_number] = jQuery.extend(true, message, mail_preview); 313 314 $('#mailpreview_container').unblock(); 315 316 var tabPanelTemplateLabel = html_entities(onceOpenedMessages[selectedFolder.id][message.msg_number].subject); 317 if (tabPanelTemplateLabel.length > $mailpreview_tabs_label_length + 3) 318 tabPanelTemplateLabel = tabPanelTemplateLabel.substring(0, $mailpreview_tabs_label_length) + '...'; 319 selectedMessagesCount(); 320 321 if (!$('#' + tabPanelTemplateId).length) { 322 $mailpreview_tabs.tabs("add", '#' + tabPanelTemplateId, tabPanelTemplateLabel) 323 .find('.message.empty-container').hide().end() 324 .find('#' + tabPanelTemplateId).html(onceOpenedMessages[selectedFolder.id][message.msg_number].body) 325 .prepend( 326 '<div class="mailpreview-message-info">' + 327 get_lang('Subject') + ': ' + 328 html_entities(onceOpenedMessages[selectedFolder.id][message.msg_number].subject) + 329 '</div>' 330 ) 331 .find('[class^="ExpressoCssWrapper"]').addClass("mailpreview-message-body"); 332 } else { 333 $mailpreview_tabs.tabs('select', '#' + tabPanelTemplateId) 334 .find('#' + tabPanelTemplateId + ', [href="#' + tabPanelTemplateId + '"]').removeClass('preview-message-unselected'); 335 } 336 } 337 } else { 338 /** 339 * if you wants to remove tab on unselect message, 340 * but still needs to uselect message on remove tab. 341 * 342 */ 343 /* 344 if ($('#' + tabPanelTemplateId).length) { 345 $mailpreview_tabs.tabs('remove', '#' + tabPanelTemplateId); 346 } 347 */ 348 selectedMessages[selectedFolder.id][message.msg_number] = false; 349 $mailpreview_tabs.find('#' + tabPanelTemplateId + ', [href="#' + tabPanelTemplateId + '"]').addClass('preview-message-unselected'); 350 } 351 352 if (onceOpenedMessages[selectedFolder.id] && onceOpenedMessages[selectedFolder.id][message.msg_number]) 353 selectedMessagesCount(); 354 }, 355 caption: '<span class="'+selectedFolder['class']+'">'+selectedFolder.name+'</span>' 527 356 }); 528 357 //.jqGrid('navGrid','#message_attacher_grid_pager',{edit:false,add:false,del:false}); 358 var title = [get_lang("First page"), get_lang("Prev page"), get_lang("Next page"), get_lang("Last page")]; 359 $("#first_message_attacher_grid_pager").attr("title",title[0]); 360 $("#prev_message_attacher_grid_pager").attr("title",title[1]); 361 $("#next_message_attacher_grid_pager").attr("title",title[2]); 362 $("#last_message_attacher_grid_pager").attr("title",title[3]); 529 363 530 364 var $mailpreview_tabs = $( "#mailpreview_container").tabs({ -
sandbox/expressoServiceImap/prototype/modules/filters/filters.js
r6452 r6486 1 /* Verifica se a regra fora de escrit ório estáativa */1 /* Verifica se a regra fora de escritório está ativa */ 2 2 function outOfficeVerify() { 3 3 DataLayer.remove('filter', false); … … 18 18 } 19 19 20 /* Valida as informa ções do formulário de filtro de mensagens */20 /* Valida as informações do formulário de filtro de mensagens */ 21 21 valid_save = function(){ 22 22 var accord = list_container.find(".rule-details-container").accordion({autoHeight: false}); … … 154 154 } 155 155 156 /* Mostra os detalhes do filtro para edi ção */156 /* Mostra os detalhes do filtro para edição */ 157 157 showDetails = function( filter ){ 158 158 … … 311 311 var allMessages = false; 312 312 313 /* Bloqueio de usu ários na tela de mensagem do ExpressoMail */313 /* Bloqueio de usuários na tela de mensagem do ExpressoMail */ 314 314 function block_user_email(email) { 315 315 delete selectedMessages; 316 316 var idd = urlencode(email); 317 /** TODO - Mudar quando API abstrair atualiza ções no cache */317 /** TODO - Mudar quando API abstrair atualizações no cache */ 318 318 DataLayer.remove('filter', false); 319 319 var filters = DataLayer.get('filter'); … … 400 400 } 401 401 }); 402 403 var numRows = 10; 402 404 403 405 var data = DataLayer.get( 'message', { filter: criterias_, criteria: { properties: { context: { folder: 'INBOX' } } } }, true ); 404 406 407 var total = data.length ? Math.ceil( data.length / numRows ) : 0; 408 409 delete DataLayer.criterias['message:jqGrid']; 405 410 DataLayer.register( 'criterias', 'message:jqGrid', function( crit ){ 406 411 407 crit.properties = { context: { folder: 'INBOX' } }; 408 409 return { filter: [ "msgNumber", "IN", data ], criteria: crit }; 412 if( crit.page > total ) 413 crit.page = total; 414 415 var start = crit.rows * ( crit.page - 1 ); 416 417 var msgNumber = []; 418 419 for( var i = start; i < start + crit.rows && !!data[i]; i++ ) 420 msgNumber.push( data[i] ); 421 422 if( !msgNumber.length ) 423 return( false ); 424 425 return { filter: [ "msgNumber", "IN", msgNumber ], criteria: { properties: { context: { folder: 'INBOX' }, order: crit.sidx } } }; 410 426 }); 411 427 … … 438 454 id: "0" 439 455 }, 440 rowNum: 10,456 rowNum:numRows, 441 457 //rowList:[10,25,50], 442 458 rowList:[10], … … 483 499 } 484 500 485 /* Gerencia a listagem de filtros do usu ário */501 /* Gerencia a listagem de filtros do usuário */ 486 502 function list_filters(html){ 487 503 outOfficeVerify(); … … 589 605 }); 590 606 }).end().filter('.button.search').click(function() { 591 /* Valida se o usu ário preencheu as informações */607 /* Valida se o usuário preencheu as informações */ 592 608 if(valid_save()) 593 609 showGridMessages($(this)); … … 650 666 'onClose': function(caption) { 651 667 if(caption == get_lang('Yes')){ 652 /** TODO - Mudar quando API abstrair atualiza ções no cache */668 /** TODO - Mudar quando API abstrair atualizações no cache */ 653 669 DataLayer.remove('filter', false); 654 670 DataLayer.get('filter'); … … 689 705 'onClose': function(caption) { 690 706 if(caption == get_lang('Yes')){ 691 /** TODO - Mudar quando API abstrair atualiza ções no cache */707 /** TODO - Mudar quando API abstrair atualizações no cache */ 692 708 DataLayer.remove('filter', false); 693 709 DataLayer.get('filter'); -
sandbox/expressoServiceImap/prototype/services/ImapServiceAdapter.php
r6457 r6486 89 89 { 90 90 //begin: for grid 91 $page = isset($criteria['page']) ? $criteria['page'] : 1 ; //{1} get the requested page92 $limit = isset($criteria['rows']) ? $criteria['rows'] : 10 ; //{10} get how many rows we want to have into the grid93 $sidx = isset($criteria['sidx']) ? $criteria['sidx'] : 0; //{id} get index row - i.e. user click to sort94 $sord = isset($criteria['sord']) ? $criteria['sord'] : ''; //{desc} get the direction91 // $page = isset($criteria['page']) ? $criteria['page'] : 1 ; //{1} get the requested page 92 // $limit = isset($criteria['rows']) ? $criteria['rows'] : 10 ; //{10} get how many rows we want to have into the grid 93 // $sidx = isset($criteria['sidx']) ? $criteria['sidx'] : 0; //{id} get index row - i.e. user click to sort 94 // $sord = isset($criteria['sord']) ? $criteria['sord'] : ''; //{desc} get the direction 95 95 96 96 $filter = isset($criteria['filter']) ? $criteria['filter'] : ''; 97 97 98 if( !$sidx ) $sidx = 1;98 // if( !$sidx ) $sidx = 1; 99 99 100 100 $folder_name = isset($URI['folder']) ? $URI['folder'] : str_replace( '.', $this->imap_delimiter, isset($context['folder']) ? $context['folder'] : 'INBOX'); 101 101 102 102 $count = imap_num_msg( $this->open_mbox( $folder_name ) ); 103 104 $total_pages = $count > 0 ? ceil( $count/$limit ) : 0; 105 106 if( $page > $total_pages ) 107 $page = $total_pages; 108 109 $start = $limit * $page - $limit; 103 // 104 // $total_pages = $count > 0 ? ceil( $count/$limit ) : 0; 105 // 106 // if( $page > $total_pages ) 107 // $page = $total_pages; 108 // 109 // $start = $limit * $page - $limit; 110 110 111 // do not put $limit*($page - 1) 111 112 //end: for grid … … 162 163 if( $filter[0] !== 'msgNumber' ) 163 164 { 164 for( $i = 0; $i < count($filter); $i++ )165 {166 if( count( $filter[$i] ) === 4 )167 $criteria['isExact'] = ( array_shift( $filter[$i] ) === 'AND' );168 169 $criteria[ $filter[$i][0] ] = array( 'criteria' => $filter[$i][2], 'filter' => $filter[$i][1] );170 }171 172 return $this->searchSieveRule($criteria);173 } 174 175 $msgNumber = array();176 177 for( $i = $start; $i < $start + $limit && isset( $filter[2][$i] ); $i++ )178 $msgNumber[] = $filter[2][$i];179 180 if( empty( $msgNumber ) )181 return( false );165 for( $i = 0; $i < count($filter); $i++ ) 166 { 167 if( count( $filter[$i] ) === 4 ) 168 $criteria['isExact'] = ( array_shift( $filter[$i] ) === 'AND' ); 169 170 $criteria[ $filter[$i][0] ] = array( 'criteria' => $filter[$i][2], 'filter' => $filter[$i][1] ); 171 } 172 173 return $this->searchSieveRule($criteria); 174 } 175 176 // $msgNumber = array(); 177 // 178 // for( $i = $start; $i < $start + $limit && isset( $filter[2][$i] ); $i++ ) 179 // $msgNumber[] = $filter[2][$i]; 180 // 181 // if( empty( $msgNumber ) ) 182 // return( false ); 182 183 183 184 $result = $this->get_info_msgs( array( 'folder' => $folder_name, 184 'msgs_number' => implode( ',', $ msgNumber) ) );185 'msgs_number' => implode( ',', $filter[2] ) ) ); 185 186 186 187 foreach( $result as $i => $val ) … … 193 194 array( 194 195 'folder' => $folder_name, //INBOX 195 'msg_range_begin' => $ start+ 1, //??196 'msg_range_end' => $ start + $limit, //$limit = $_GET['rows']; // get how many rows we want to have into the grid196 'msg_range_begin' => $criteria['offset'] + 1, //?? 197 'msg_range_end' => $criteria['limit'], //$limit = $_GET['rows']; // get how many rows we want to have into the grid 197 198 'sort_box_type' => 'SORTARRIVAL', 198 199 'search_box_type' => 'ALL', … … 203 204 //return var_export($result); 204 205 205 $response = array( "page" => $page, "total" => $total_pages, "records" => $count ); 206 $response = array( "page" => $count > 0 ? ceil( $criteria['offset'] / $criteria['limit'] ) + 1 : 0, 207 "total" => $count > 0 ? ceil( $count/$criteria['limit'] ) : 0, 208 "records" => $count ); 206 209 207 210 for ($i=0; $i<count($result); $i++)
Note: See TracChangeset
for help on using the changeset viewer.