Changeset 6052
- Timestamp:
- 04/26/12 16:55:33 (12 years ago)
- Location:
- trunk/prototype/modules/calendar
- Files:
-
- 1 added
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/prototype/modules/calendar/js/calendar.shared.js
r5863 r6052 1 1 function show_modal_shared(calendarId){ 2 var html = DataLayer.render('templates/shared_calendar.ejs', {calendar: Calendar.calendars}); 3 4 //Variaval global para manipulação dos usuários 5 //melhor perforface 6 currentUsers = {}; 7 currentUsers[User.me.id] = true; 8 changePublic = false; 9 10 if (!UI.dialogs.sharedCalendar) { 11 UI.dialogs.sharedCalendar = jQuery('#calendarShared').append('<div title="Compatilhamento de Agenda" class="shared-calendar active"> <div>').find('.shared-calendar.active').html(html).dialog({ 12 resizable: false, 13 modal:true, 14 autoOpen: false, 15 width:620, 16 position: 'center', 17 close: function(event, ui) { 18 //Implementações de cancelar 19 DataLayer.rollback('calendarToPermission'); 20 currentUsers = {}; 21 } 22 }); 23 } else { 24 UI.dialogs.sharedCalendar.html(html); 25 } 26 27 /*Seleciona a agenda selecionada para compartilhamento*/ 28 UI.dialogs.sharedCalendar.find('option[value="'+calendarId+'"]').attr('selected','selected').trigger('change'); 29 30 UI.dialogs.sharedCalendar.find('input[name="isPublic"]').change(function(event){ 31 $(this).parent().find('.free-busy').toggleClass('hidden'); 32 changePublic = changePublic ? false: true; 2 var html = DataLayer.render('templates/shared_calendar.ejs', { 3 calendar: Calendar.calendars 4 }); 5 6 //Variaval global para manipulação dos usuários 7 //melhor perforface 8 currentUsers = {}; 9 currentUsers[User.me.id] = true; 10 changePublic = false; 11 12 if (!UI.dialogs.sharedCalendar) { 13 UI.dialogs.sharedCalendar = jQuery('#calendarShared').append('<div title="Compatilhamento de Agenda" class="shared-calendar active"> <div>').find('.shared-calendar.active').html(html).dialog({ 14 resizable: false, 15 modal:true, 16 autoOpen: false, 17 width:620, 18 position: 'center', 19 close: function(event, ui) { 20 //Implementações de cancelar 21 DataLayer.rollback('calendarToPermission'); 22 currentUsers = {}; 23 } 24 }); 25 } else { 26 UI.dialogs.sharedCalendar.html(html); 27 } 28 29 /*Seleciona a agenda selecionada para compartilhamento*/ 30 UI.dialogs.sharedCalendar.find('option[value="'+calendarId+'"]').attr('selected','selected').trigger('change'); 31 32 UI.dialogs.sharedCalendar.find('input[name="isPublic"]').change(function(event){ 33 $(this).parent().find('.free-busy').toggleClass('hidden'); 34 changePublic = changePublic ? false: true; 35 }); 36 37 UI.dialogs.sharedCalendar.find('.button').button() 38 .filter('.cancel').click(function(evt){ 39 UI.dialogs.sharedCalendar.dialog("close"); 40 }).end() 41 .filter('.save').click(function(evt){ 42 //TODO - API ainda não suporta 43 //UI.dialogs.sharedCalendar.find('form').submit(); 44 var calendarSelected = UI.dialogs.sharedCalendar.find('option:selected').val(); 45 var save = function(){ 46 if($('li.not-user').length == 0) 47 $.each(UI.dialogs.sharedCalendar.find('.user-list li.new'), function( i , element ){ 48 var user = $(element).find('input[name="user[]"]').val(); 49 var acl = $(element).find('input[name="attendeeAcl[]"]').val(); 50 if(acl == "") 51 return true; 52 DataLayer.put('calendarToPermission', { 53 calendar: calendarSelected, 54 type: 0, 55 user: user, 56 acl: acl 57 }); 33 58 }); 34 35 UI.dialogs.sharedCalendar.find('.button').button() 36 .filter('.cancel').click(function(evt){ 37 UI.dialogs.sharedCalendar.dialog("close"); 38 }).end() 39 .filter('.save').click(function(evt){ 40 //TODO - API ainda não suporta 41 //UI.dialogs.sharedCalendar.find('form').submit(); 42 var calendarSelected = UI.dialogs.sharedCalendar.find('option:selected').val(); 43 var save = function(){ 44 if($('li.not-user').length == 0) 45 $.each(UI.dialogs.sharedCalendar.find('.user-list li.new'), function( i , element ){ 46 var user = $(element).find('input[name="user[]"]').val(); 47 var acl = $(element).find('input[name="attendeeAcl[]"]').val(); 48 if(acl == "") 49 return true; 50 DataLayer.put('calendarToPermission', {calendar: calendarSelected, type: 0, user: user, acl: acl}); 51 }); 52 53 $.each(UI.dialogs.sharedCalendar.find('.user-list li.current'), function( i , element ){ 54 var id = $(element).find('input[type="checkbox"]').val(); 55 var acl = $(element).find('input[name="attendeeAcl[]"]').val(); 56 if(acl == "") 57 DataLayer.remove('calendarToPermission', id); 58 else 59 DataLayer.put('calendarToPermission', {calendar: calendarSelected, type: 0, id: id, acl: acl}); 60 }); 61 62 63 DataLayer.commit(false, false, function(data){ 64 UI.dialogs.sharedCalendar.dialog("close"); 65 }); 66 }; 67 68 //Trata a criação de um acesso público a agenda 69 if(changePublic){ 70 if(UI.dialogs.sharedCalendar.find('input[name="isPublic"]').is(':checked')){ 71 var acl = UI.dialogs.sharedCalendar.find('input[name="busy"]').is(':checked') ? 'b' : 'w'; 72 DataLayer.put('calendarToPermission', {calendar: calendarSelected, type: '1', user: '0', acl: acl}); 73 }else{ 74 //TODO - remover quando for implementado remove com criteria 75 var permission = DataLayer.get('calendarToPermission', {filter: ['AND', ['=', 'calendar', calendarId], ['=', 'user', '0']]}, true); 76 if($.isArray(permission)) 77 permission = permission[0]; 78 79 DataLayer.remove('calendarToPermission', permission.id); 80 } 81 } 82 if(!!UI.dialogs.sharedCalendar.find('.user-list li input[name="attendeeAcl[]"][value=""]').length){ 83 $.Zebra_Dialog('Alguns usuários estão sem permissões e serão automáticamente removidos, deseja continuar ?', { 84 'type': 'question', 85 'overlay_opacity': '0.5', 86 'buttons': ['Continuar', 'Cancelar'], 87 'onClose': function(clicked) { 88 if(clicked == 'Continuar') { 89 save(); 90 } 91 } 92 }); 93 }else 94 save(); 59 60 $.each(UI.dialogs.sharedCalendar.find('.user-list li.current'), function( i , element ){ 61 var id = $(element).find('input[type="checkbox"]').val(); 62 var acl = $(element).find('input[name="attendeeAcl[]"]').val(); 63 if(acl == "") 64 DataLayer.remove('calendarToPermission', id); 65 else 66 DataLayer.put('calendarToPermission', { 67 calendar: calendarSelected, 68 type: 0, 69 id: id, 70 acl: acl 71 }); 72 }); 73 74 75 DataLayer.commit(false, false, function(data){ 76 UI.dialogs.sharedCalendar.dialog("close"); 77 }); 78 }; 79 80 //Trata a criação de um acesso público a agenda 81 if(changePublic){ 82 if(UI.dialogs.sharedCalendar.find('input[name="isPublic"]').is(':checked')){ 83 var acl = UI.dialogs.sharedCalendar.find('input[name="busy"]').is(':checked') ? 'b' : 'w'; 84 DataLayer.put('calendarToPermission', { 85 calendar: calendarSelected, 86 type: '1', 87 user: '0', 88 acl: acl 95 89 }); 96 97 UI.dialogs.sharedCalendar.find('.add-user-search .ui-icon-search').click(function(event) { 98 UI.dialogs.sharedCalendar.find('.add-user-search input').keydown(); 99 }); 100 101 var incompatibleAcl = function (obj, acls, buttons){ 102 for (var i = 0; i < acls.length; i++){ 103 var objremove = obj.parent().find('.'+buttons[i]+''); 104 if(objremove.hasClass('attendee-permissions-change-button')) 105 changeAcl(objremove, acls[i]); 106 } 107 } 108 109 var removeAcl = function(current, acl){ 110 var acls = ''; 111 for(var i = 0; i < current.length; i++) 112 if(current.charAt(i) != acl) 113 acls += current.charAt(i) ; 114 return acls; 115 } 116 117 var dependsAcl = function(obj, acls, buttons){ 118 for (var i = 0; i < acls.length; i++){ 119 var objremove = obj.parent().find('.'+buttons[i]+''); 120 if(!objremove.hasClass('attendee-permissions-change-button')) 121 changeAcl(objremove, acls[i]); 122 } 123 } 124 125 var changeAcl = function(obj, acl){ 126 if(obj.hasClass('attendee-permissions-change-button')){ 127 obj.parent().siblings('input[name="attendeeAcl[]"]').val(removeAcl( obj.parent().siblings('input[name="attendeeAcl[]"]').val(), acl)) ; 128 }else{ 129 var acls = obj.parent().siblings('input[name="attendeeAcl[]"]').val(); 130 obj.parent().siblings('input[name="attendeeAcl[]"]').val(acls + acl); 131 } 132 obj.toggleClass('attendee-permissions-change-button') 133 .find('span:first').toggleClass('attendee-permissions-change').end(); 134 } 135 136 137 UI.dialogs.sharedCalendar.find('.add-user-search input').keydown(function(event) { 138 if(event.keyCode == '13' || typeof(event.keyCode) == 'undefined') { 139 var result = DataLayer.get('user', ["*", "name", $(this).val()], true); 140 /** 90 }else{ 91 //TODO - remover quando for implementado remove com criteria 92 var permission = DataLayer.get('calendarToPermission', { 93 filter: ['AND', ['=', 'calendar', calendarId], ['=', 'user', '0']] 94 }, true); 95 if($.isArray(permission)) 96 permission = permission[0]; 97 98 DataLayer.remove('calendarToPermission', permission.id); 99 } 100 } 101 if(!!UI.dialogs.sharedCalendar.find('.user-list li input[name="attendeeAcl[]"][value=""]').length){ 102 $.Zebra_Dialog('Alguns usuários estão sem permissões e serão automáticamente removidos, deseja continuar ?', { 103 'type': 'question', 104 'overlay_opacity': '0.5', 105 'buttons': ['Continuar', 'Cancelar'], 106 'onClose': function(clicked) { 107 if(clicked == 'Continuar') { 108 save(); 109 } 110 } 111 }); 112 }else 113 save(); 114 }); 115 116 UI.dialogs.sharedCalendar.find('.add-user-search .ui-icon-search').click(function(event) { 117 UI.dialogs.sharedCalendar.find('.add-user-search input').keydown(); 118 }); 119 120 var incompatibleAcl = function (obj, acls, buttons){ 121 for (var i = 0; i < acls.length; i++){ 122 var objremove = obj.parent().find('.'+buttons[i]+''); 123 if(objremove.hasClass('attendee-permissions-change-button')) 124 changeAcl(objremove, acls[i]); 125 } 126 } 127 128 var removeAcl = function(current, acl){ 129 var acls = ''; 130 for(var i = 0; i < current.length; i++) 131 if(current.charAt(i) != acl) 132 acls += current.charAt(i) ; 133 return acls; 134 } 135 136 var dependsAcl = function(obj, acls, buttons){ 137 for (var i = 0; i < acls.length; i++){ 138 var objremove = obj.parent().find('.'+buttons[i]+''); 139 if(!objremove.hasClass('attendee-permissions-change-button')) 140 changeAcl(objremove, acls[i]); 141 } 142 } 143 144 var changeAcl = function(obj, acl){ 145 if(obj.hasClass('attendee-permissions-change-button')){ 146 obj.parent().siblings('input[name="attendeeAcl[]"]').val(removeAcl( obj.parent().siblings('input[name="attendeeAcl[]"]').val(), acl)) ; 147 }else{ 148 var acls = obj.parent().siblings('input[name="attendeeAcl[]"]').val(); 149 obj.parent().siblings('input[name="attendeeAcl[]"]').val(acls + acl); 150 } 151 obj.toggleClass('attendee-permissions-change-button') 152 .find('span:first').toggleClass('attendee-permissions-change').end(); 153 } 154 155 156 UI.dialogs.sharedCalendar.find('.add-user-search input').keydown(function(event) { 157 if(event.keyCode == '13' || typeof(event.keyCode) == 'undefined') { 158 var result = DataLayer.get('user', ["*", "name", $(this).val()], true); 159 /** 141 160 * TODO: trocar por template 142 161 */ 143 144 145 146 147 148 149 150 151 152 153 154 155 156 162 UI.dialogs.sharedCalendar.find('ul.search-result-list').empty().css('overflow', 'hidden'); 163 if (!result) { 164 UI.dialogs.sharedCalendar.find('ul.search-result-list').append('<li><label class="empty">Nenhum resultado encontrado.</label></li>'); 165 } 166 167 for(i=0; i<result.length; i++) 168 result[i].enabled = currentUsers[result[i].id] ? false : true; 169 170 UI.dialogs.sharedCalendar.find('ul.search-result-list').append(DataLayer.render( 'templates/participants_search_itemlist.ejs', result)); 171 172 UI.dialogs.sharedCalendar.find('ul.search-result-list li').click(function(event, ui){ 173 if ($(event.target).is('input')) { 174 old_item = $(event.target).parents('li'); 175 var id = old_item.find('.id').html(); 157 176 158 159 160 161 162 177 currentUsers [id] = { 178 id: id, 179 name: old_item.find('.name').html(), 180 mail: old_item.find('.mail').html() 181 }; 163 182 164 UI.dialogs.sharedCalendar.find('dd.user-list ul.user-list') 165 .append(DataLayer.render('templates/user_shared_add_itemlist.ejs', [{id: id, name: currentUsers [id] .name, mail: currentUsers [id] .mail}])) 166 .scrollTo('max'); 183 UI.dialogs.sharedCalendar.find('dd.user-list ul.user-list') 184 .append(DataLayer.render('templates/user_shared_add_itemlist.ejs', [{ 185 id: id, 186 name: currentUsers [id] .name, 187 mail: currentUsers [id] .mail 188 }])) 189 .scrollTo('max'); 167 190 168 $('li.not-user').remove(); 169 callbackSharedCotactsAdd(); 170 old_item.remove(); 171 } 172 }); 173 event.preventDefault(); 174 } 191 $('li.not-user').remove(); 192 callbackSharedCotactsAdd(); 193 old_item.remove(); 194 } 195 }); 196 event.preventDefault(); 197 } 198 }); 199 200 var callbackSharedCotactsAdd = function(event){ 201 UI.dialogs.sharedCalendar.find('.button').filter(".read.new").button({ 202 icons: { 203 primary: "ui-icon-circle-zoomin" 204 }, 205 text: false 206 }).click(function () { 207 incompatibleAcl($(this), ['b'], ['busy']); 208 changeAcl($(this), 'r'); 209 }) 210 .addClass('tiny disable ui-button-disabled ui-state-disabled') 211 .removeClass('new').end() 212 213 .filter(".write.new").button({ 214 icons: { 215 primary: "ui-icon-key" 216 }, 217 text: false 218 }).click(function () { 219 incompatibleAcl($(this), ['b'], ['busy']); 220 dependsAcl($(this), ['r'], ['read']); 221 changeAcl($(this), 'w'); 222 }) 223 .addClass('tiny disable ui-button-disabled ui-state-disabled') 224 .removeClass('new').end() 225 226 .filter(".remove.new").button({ 227 icons: { 228 primary: "ui-icon-trash" 229 }, 230 text: false 231 }).click(function () { 232 incompatibleAcl($(this), ['b'], ['busy']); 233 dependsAcl($(this), ['r'], ['read']); 234 changeAcl($(this), 'd'); 235 }) 236 .addClass('tiny disable ui-button-disabled ui-state-disabled') 237 .removeClass('new').end() 238 239 .filter(".busy.new").button({ 240 icons: { 241 primary: "ui-icon-clock" 242 }, 243 text: false 244 }).click(function () { 245 //Remove incompativbilidade de acls 246 incompatibleAcl($(this), ['r', 'w', 'd', 's' ], ['read', 'write', 'remove', 'shared']); 247 changeAcl($(this), 'b'); 248 }) 249 .addClass('tiny disable ui-button-disabled ui-state-disabled') 250 .removeClass('new').end() 251 252 .filter(".shared.new").button({ 253 icons: { 254 primary: "ui-icon-transferthick-e-w" 255 }, 256 text: false 257 }).click(function () { 258 incompatibleAcl($(this), ['b',], ['busy']); 259 dependsAcl($(this), ['r'], ['read']); 260 changeAcl($(this), 's'); 261 }) 262 .addClass('tiny disable ui-button-disabled ui-state-disabled') 263 .removeClass('new').end() 264 265 .filter(".close.new").button({ 266 icons: { 267 primary: "ui-icon-close" 268 }, 269 text: false 270 }).click(function () { 271 currentUsers[$(this).parents().find('input[name="user[]"]').val()] = false; 272 //remove permissão 273 if($(this).parents('li.current').length) 274 DataLayer.remove('calendarToPermission', $(this).parents('li.current').find('input[type="checkbox"]').val()); 275 276 $(this).parents('li').remove(); 277 }) 278 .addClass('tiny disable ui-button-disabled ui-state-disabled') 279 .removeClass('new').end(); 280 281 UI.dialogs.sharedCalendar.find('.user-list li').hover( 282 function () { 283 $(this).addClass("hover-user"); 284 $(this).find('.button').removeClass('disable ui-button-disabled ui-state-disabled').end() 285 .find('.user-acls-shared-calendar').addClass('hover-user'); 286 }, 287 function () { 288 $(this).removeClass("hover-user"); 289 $(this).find('.button').addClass('disable ui-button-disabled ui-state-disabled').end() 290 .find('.user-acls-shared-calendar').removeClass('hover-user');; 291 } 292 ); 293 } 294 295 //Carrega os dados já cadastrados 296 var dataCurrent = DataLayer.get('calendarToPermission:detail', { 297 filter: ['=','calendar', calendarId] , 298 criteria: { 299 deepness: 2 300 } 301 }); 302 if(dataCurrent){ 303 for(var i = 0; i < dataCurrent.length; i++){ 304 if(dataCurrent[i].user == "0"){ 305 UI.dialogs.sharedCalendar.find('input[name="isPublic"]').attr('checked', 'checked') 306 .parent().find('.free-busy').toggleClass('hidden'); 307 if(dataCurrent[i].acl['busy']) 308 UI.dialogs.sharedCalendar.find('input[name="busy"]').attr('checked', 'checked'); 309 }else{ 310 currentUsers[dataCurrent[i].user.id] = true; 311 312 UI.dialogs.sharedCalendar.find('dd.user-list ul.user-list') 313 .append(DataLayer.render('templates/user_shared_add_itemlist.ejs', [{ 314 id: dataCurrent[i].user.id, 315 name: dataCurrent[i].user.name, 316 mail: dataCurrent[i].user.mail, 317 acl:dataCurrent[i].acl, 318 aclValue: dataCurrent[i].aclValues, 319 current: true, 320 idPermission: dataCurrent[i].id 321 }])) 322 .scrollTo('max'); 323 $('li.not-user').remove(); 324 callbackSharedCotactsAdd(); 325 326 for (var f in dataCurrent[i].acl){ 327 if(dataCurrent[i].acl[f]){ 328 UI.dialogs.sharedCalendar.find('.'+f+':last').toggleClass('attendee-permissions-change-button') 329 .find('span:first').toggleClass('attendee-permissions-change').end(); 330 } 331 } 332 } 333 } 334 } 335 UI.dialogs.sharedCalendar.dialog('open'); 336 } 337 338 function show_modal_search_shared(){ 339 340 var html = DataLayer.render('templates/shared_calendar.ejs', {}); 341 342 //Variaval global para manipulação dos usuários 343 //melhor perforface 344 currentCalendars = {}; 345 346 if (!UI.dialogs.sharedCalendar) { 347 UI.dialogs.sharedCalendar = jQuery('#calendarShared').append('<div title="Pesquisar Agendas" class="shared-calendar active"> <div>').find('.shared-calendar.active').html(html).dialog({ 348 resizable: false, 349 modal:true, 350 autoOpen: false, 351 width:620, 352 position: 'center', 353 close: function(event, ui) { 354 //Implementações de cancelar :D 355 currentCalendars = {}; 356 $('.signed-calendars').find('.calendar-shared-search input').val('').Watermark('Pesquisar agendas...'); 357 } 358 }); 359 } else { 360 UI.dialogs.sharedCalendar.html(html); 361 } 362 363 UI.dialogs.sharedCalendar.find('.button').button() 364 .filter('.cancel').click(function(evt){ 365 DataLayer.rollback('calendarSignature'); 366 UI.dialogs.sharedCalendar.dialog("close"); 367 }).end() 368 .filter('.save').click(function(evt){ 369 $.each(UI.dialogs.sharedCalendar.find('.user-list li.new'), function( i , element ){ 370 var idPermission = $(element).find('input[name="idpermission[]"]').val(); 371 var calendarId = $(element).find('input[name="calendar[]"]').val(); 372 var type = parseInt($(element).find('input[name="type[]"]').val()); 373 DataLayer.put('calendarSignature', DataLayer.merge({ 374 calendar: calendarId, 375 isOwner: 0, 376 user: User.me.id, 377 fontColor: '120d0d', 378 backgroundColor: (!!type ? 'fbec88' : '8c8c8c'), 379 borderColor: (!!type ? 'fad24e' : '120d0d') 380 }, !!idPermission ? { 381 id: idPermission 382 } : {} )); 383 }); 384 385 DataLayer.commit( false, false, function( received ){ 386 delete Calendar.currentViewKey; 387 Calendar.load(); 388 refresh_calendars(); 389 }); 390 391 UI.dialogs.sharedCalendar.dialog("close"); 392 393 }); 394 395 UI.dialogs.sharedCalendar.find('.add-user-search .ui-icon-search').click(function(event) { 396 UI.dialogs.sharedCalendar.find('.add-user-search input').keydown(); 397 }); 398 399 UI.dialogs.sharedCalendar.find('.add-user-search input').keydown(function(event) { 400 if(event.keyCode == '13' || typeof(event.keyCode) == 'undefined') { 401 var result = DataLayer.get('calendarToPermission', { 402 filter: ['AND', ['=','user',User.me.id], ['OR', ['i*','name',$(this).val()], ["i*", "description", $(this).val()]]] , 403 criteria: { 404 deepness: 2 405 } 406 }, true); 407 var resultPublic = DataLayer.get('calendarToPermission', { 408 filter: ['AND', ['=','type',1], ['OR', ['i*','name',$(this).val()], ["i*", "description", $(this).val()]]] , 409 criteria: { 410 deepness: 2 411 } 412 }, true); 413 414 /** 415 * TODO: trocar por template 416 */ 417 UI.dialogs.sharedCalendar.find('ul.search-result-list').empty().css('overflow', 'hidden'); 418 if (!result && !resultPublic) { 419 UI.dialogs.sharedCalendar.find('ul.search-result-list').append('<li><label class="empty">Nenhum resultado encontrado.</label></li>'); 420 } 421 422 if(resultPublic){ 423 var notConflict = []; 424 var conflit = false; 425 for(var i = 0; i < resultPublic.length; i++){ 426 for(var j = 0; j < result.length; j++){ 427 if(resultPublic[i].id == result[j].calendar.id) 428 conflit = true; 429 } 430 if(!conflit){ 431 notConflict.push(resultPublic[i]); 432 conflit = false; 433 } 434 } 435 } 436 resultPublic = notConflict; 437 438 var resultNormalize = []; 439 for(i=0; i<result.length; i++){ 440 resultNormalize.push({ 441 id: result[i].calendar.id, 442 name:result[i].calendar.name, 443 mail: result[i].calendar.description, 444 type: 0 445 }) 446 resultNormalize[i].enabled = currentCalendars[result[i].id] ? false : true; 447 } 448 if(resultPublic) 449 for(i=0; i<resultPublic.length; i++){ 450 resultNormalize.push({ 451 id: resultPublic[i].calendar.id, 452 name:resultPublic[i].calendar.name, 453 mail: resultPublic[i].calendar.description, 454 type: 1 455 }) 456 resultNormalize[i].enabled = currentCalendars[resultPublic[i].id] ? false : true; 457 } 458 459 UI.dialogs.sharedCalendar.find('ul.search-result-list').append(DataLayer.render( 'templates/calendar_search_itemlist.ejs', resultNormalize)); 460 461 UI.dialogs.sharedCalendar.find('ul.search-result-list li').click(function(event, ui){ 462 if ($(event.target).is('input')) { 463 old_item = $(event.target).parents('li'); 464 var id = old_item.find('.id').html(); 465 466 for(var i = 0; i<resultNormalize.length; i++){ 467 if(resultNormalize[i].id == id) 468 currentCalendars[id] = { 469 id: id, 470 name: resultNormalize[i].name, 471 description: resultNormalize[i].description, 472 type: resultNormalize[i].type, 473 isCalendar: true 474 }; 475 } 476 477 UI.dialogs.sharedCalendar.find('dd.calendar-list ul.user-list') 478 .append(DataLayer.render('templates/user_shared_add_itemlist.ejs', [currentCalendars[id]])) 479 .scrollTo('max'); 480 481 $('li.not-user').remove(); 482 callbackSharedCalendarAdd(); 483 old_item.remove(); 484 } 485 }); 486 event.preventDefault(); 487 } 488 }); 489 490 var callbackSharedCalendarAdd = function(event){ 491 492 UI.dialogs.sharedCalendar.find('.button').filter(".close.new").button({ 493 icons: { 494 primary: "ui-icon-close" 495 }, 496 text: false 497 }).click(function () { 498 var id = $(this).parents('li').find('input[name="idPermission"]').val(); 499 currentCalendars[$(this).parents().find('input[name="calendar[]"]').val()] = false; 500 $(this).parents('li').remove(); 501 if(!!id) 502 DataLayer.remove('calendarSignature', id); 503 }) 504 .addClass('tiny disable ui-button-disabled ui-state-disabled') 505 .removeClass('new').end(); 506 507 UI.dialogs.sharedCalendar.find('.user-list li').hover( 508 function () { 509 $(this).addClass("hover-user"); 510 $(this).find('.button').removeClass('disable ui-button-disabled ui-state-disabled').end() 511 .find('.user-acls-shared-calendar').addClass('hover-user'); 512 }, 513 function () { 514 $(this).removeClass("hover-user"); 515 $(this).find('.button').addClass('disable ui-button-disabled ui-state-disabled').end() 516 .find('.user-acls-shared-calendar').removeClass('hover-user');; 517 } 518 ); 519 } 520 521 //Carrega os dados já cadastrados 522 for (var i = 0; i < Calendar.signatures.length; i++) 523 if(Calendar.signatures[i].isOwner == "0"){ 524 var dataCurrent = Calendar.signatures[i].calendar; 525 currentCalendars[Calendar.signatures[i].permission.id] = { 526 id: dataCurrent.id, 527 idPermission:Calendar.signatures[i].id , 528 name: dataCurrent.name, 529 description: dataCurrent.description, 530 type: Calendar.signatures[i].permission.type, 531 isCalendar: true, 532 current: true 533 }; 534 535 UI.dialogs.sharedCalendar.find('dd.calendar-list ul.user-list') 536 .append(DataLayer.render('templates/user_shared_add_itemlist.ejs', [currentCalendars[Calendar.signatures[i].permission.id]])) 537 .scrollTo('max'); 538 539 $('li.not-user').remove(); 540 callbackSharedCalendarAdd(); 541 } 542 543 UI.dialogs.sharedCalendar.dialog('open'); 544 } 545 546 function cancel_signature(signatureId){ 547 $.Zebra_Dialog('Confirma a remoção desta assinatura ?', { 548 'type': 'question', 549 'overlay_opacity': '0.5', 550 'buttons': ['Sim', 'Não'], 551 'onClose': function(clicked) { 552 if(clicked == 'Sim'){ 553 DataLayer.remove('calendarSignature', ''+signatureId); 554 DataLayer.commit( false, false, function( received ){ 555 delete Calendar.currentViewKey; 556 Calendar.load(); 557 refresh_calendars(); 175 558 }); 176 177 var callbackSharedCotactsAdd = function(event){ 178 UI.dialogs.sharedCalendar.find('.button').filter(".read.new").button({ 179 icons: { 180 primary: "ui-icon-circle-zoomin" 181 }, 182 text: false 183 }).click(function () { 184 incompatibleAcl($(this), ['b'], ['busy']); 185 changeAcl($(this), 'r'); 186 }) 187 .addClass('tiny disable ui-button-disabled ui-state-disabled') 188 .removeClass('new').end() 189 190 .filter(".write.new").button({ 191 icons: { 192 primary: "ui-icon-key" 193 }, 194 text: false 195 }).click(function () { 196 incompatibleAcl($(this), ['b'], ['busy']); 197 dependsAcl($(this), ['r'], ['read']); 198 changeAcl($(this), 'w'); 199 }) 200 .addClass('tiny disable ui-button-disabled ui-state-disabled') 201 .removeClass('new').end() 202 203 .filter(".remove.new").button({ 204 icons: { 205 primary: "ui-icon-trash" 206 }, 207 text: false 208 }).click(function () { 209 incompatibleAcl($(this), ['b'], ['busy']); 210 dependsAcl($(this), ['r'], ['read']); 211 changeAcl($(this), 'd'); 212 }) 213 .addClass('tiny disable ui-button-disabled ui-state-disabled') 214 .removeClass('new').end() 215 216 .filter(".busy.new").button({ 217 icons: { 218 primary: "ui-icon-clock" 219 }, 220 text: false 221 }).click(function () { 222 //Remove incompativbilidade de acls 223 incompatibleAcl($(this), ['r', 'w', 'd', 's' ], ['read', 'write', 'remove', 'shared']); 224 changeAcl($(this), 'b'); 225 }) 226 .addClass('tiny disable ui-button-disabled ui-state-disabled') 227 .removeClass('new').end() 228 229 .filter(".shared.new").button({ 230 icons: { 231 primary: "ui-icon-transferthick-e-w" 232 }, 233 text: false 234 }).click(function () { 235 incompatibleAcl($(this), ['b',], ['busy']); 236 dependsAcl($(this), ['r'], ['read']); 237 changeAcl($(this), 's'); 238 }) 239 .addClass('tiny disable ui-button-disabled ui-state-disabled') 240 .removeClass('new').end() 241 242 .filter(".close.new").button({ 243 icons: { 244 primary: "ui-icon-close" 245 }, 246 text: false 247 }).click(function () { 248 currentUsers[$(this).parents().find('input[name="user[]"]').val()] = false; 249 //remove permissão 250 if($(this).parents('li.current').length) 251 DataLayer.remove('calendarToPermission', $(this).parents('li.current').find('input[type="checkbox"]').val()); 252 253 $(this).parents('li').remove(); 254 }) 255 .addClass('tiny disable ui-button-disabled ui-state-disabled') 256 .removeClass('new').end(); 257 258 UI.dialogs.sharedCalendar.find('.user-list li').hover( 259 function () { 260 $(this).addClass("hover-user"); 261 $(this).find('.button').removeClass('disable ui-button-disabled ui-state-disabled').end() 262 .find('.user-acls-shared-calendar').addClass('hover-user'); 263 }, 264 function () { 265 $(this).removeClass("hover-user"); 266 $(this).find('.button').addClass('disable ui-button-disabled ui-state-disabled').end() 267 .find('.user-acls-shared-calendar').removeClass('hover-user');; 268 } 269 ); 270 } 271 272 //Carrega os dados já cadastrados 273 var dataCurrent = DataLayer.get('calendarToPermission:detail', {filter: ['=','calendar', calendarId] , criteria: {deepness: 2}}); 274 if(dataCurrent){ 275 for(var i = 0; i < dataCurrent.length; i++){ 276 if(dataCurrent[i].user == "0"){ 277 UI.dialogs.sharedCalendar.find('input[name="isPublic"]').attr('checked', 'checked') 278 .parent().find('.free-busy').toggleClass('hidden'); 279 if(dataCurrent[i].acl['busy']) 280 UI.dialogs.sharedCalendar.find('input[name="busy"]').attr('checked', 'checked'); 281 }else{ 282 currentUsers[dataCurrent[i].user.id] = true; 283 284 UI.dialogs.sharedCalendar.find('dd.user-list ul.user-list') 285 .append(DataLayer.render('templates/user_shared_add_itemlist.ejs', [{id: dataCurrent[i].user.id, name: dataCurrent[i].user.name, mail: dataCurrent[i].user.mail, acl:dataCurrent[i].acl, aclValue: dataCurrent[i].aclValues, current: true, idPermission: dataCurrent[i].id }])) 286 .scrollTo('max'); 287 $('li.not-user').remove(); 288 callbackSharedCotactsAdd(); 289 290 for (var f in dataCurrent[i].acl){ 291 if(dataCurrent[i].acl[f]){ 292 UI.dialogs.sharedCalendar.find('.'+f+':last').toggleClass('attendee-permissions-change-button') 293 .find('span:first').toggleClass('attendee-permissions-change').end(); 294 } 295 } 296 } 297 } 298 } 299 UI.dialogs.sharedCalendar.dialog('open'); 559 } 560 } 561 }); 300 562 } 301 302 function show_modal_search_shared(){303 304 var html = DataLayer.render('templates/shared_calendar.ejs', {});305 306 //Variaval global para manipulação dos usuários307 //melhor perforface308 currentCalendars = {};309 310 if (!UI.dialogs.sharedCalendar) {311 UI.dialogs.sharedCalendar = jQuery('#calendarShared').append('<div title="Pesquisar Agendas" class="shared-calendar active"> <div>').find('.shared-calendar.active').html(html).dialog({312 resizable: false,313 modal:true,314 autoOpen: false,315 width:620,316 position: 'center',317 close: function(event, ui) {318 //Implementações de cancelar :D319 currentCalendars = {};320 $('.signed-calendars').find('.calendar-shared-search input').val('').Watermark('Pesquisar agendas...');321 }322 });323 } else {324 UI.dialogs.sharedCalendar.html(html);325 }326 327 UI.dialogs.sharedCalendar.find('.button').button()328 .filter('.cancel').click(function(evt){329 UI.dialogs.sharedCalendar.dialog("close");330 }).end()331 .filter('.save').click(function(evt){332 $.each(UI.dialogs.sharedCalendar.find('.user-list li'), function( i , element ){333 var idPermission = $(element).find('input[name="idpermission[]"]').val();334 var calendarId = $(element).find('input[name="calendar[]"]').val();335 var type = parseInt($(element).find('input[name="type[]"]').val());336 DataLayer.put('calendarSignature', DataLayer.merge({calendar: calendarId, isOwner: 0, user: User.me.id, fontColor: '120d0d', backgroundColor: (!!type ? 'fbec88' : '8c8c8c'), borderColor: (!!type ? 'fad24e' : '120d0d')}, !!idPermission ? {id: idPermission} : {} ));337 });338 339 DataLayer.commit( false, false, function( received ){340 delete Calendar.currentViewKey;341 Calendar.load();342 refresh_calendars();343 });344 345 UI.dialogs.sharedCalendar.dialog("close");346 347 });348 349 UI.dialogs.sharedCalendar.find('.add-user-search .ui-icon-search').click(function(event) {350 UI.dialogs.sharedCalendar.find('.add-user-search input').keydown();351 });352 353 UI.dialogs.sharedCalendar.find('.add-user-search input').keydown(function(event) {354 if(event.keyCode == '13' || typeof(event.keyCode) == 'undefined') {355 var result = DataLayer.get('calendarToPermission', {filter: ['AND', ['=','user',User.me.id], ['OR', ['i*','name',$(this).val()], ["i*", "description", $(this).val()]]] , criteria: {deepness: 2}}, true);356 var resultPublic = DataLayer.get('calendarToPermission', {filter: ['AND', ['=','type',1], ['OR', ['i*','name',$(this).val()], ["i*", "description", $(this).val()]]] , criteria: {deepness: 2}}, true);357 358 /**359 * TODO: trocar por template360 */361 UI.dialogs.sharedCalendar.find('ul.search-result-list').empty().css('overflow', 'hidden');362 if (!result && !resultPublic) {363 UI.dialogs.sharedCalendar.find('ul.search-result-list').append('<li><label class="empty">Nenhum resultado encontrado.</label></li>');364 }365 366 if(resultPublic){367 var notConflict = [];368 var conflit = false;369 for(var i = 0; i < resultPublic.length; i++){370 for(var j = 0; j < result.length; j++){371 if(resultPublic[i].id == result[j].calendar.id)372 conflit = true;373 }if(!conflit){374 notConflict.push(resultPublic[i]);375 conflit = false;376 }377 }378 }379 resultPublic = notConflict;380 381 var resultNormalize = [];382 for(i=0; i<result.length; i++){383 resultNormalize.push({id: result[i].calendar.id, name:result[i].calendar.name, mail: result[i].calendar.description, type: 0 })384 resultNormalize[i].enabled = currentCalendars[result[i].id] ? false : true;385 }386 if(resultPublic)387 for(i=0; i<resultPublic.length; i++){388 resultNormalize.push({id: resultPublic[i].calendar.id, name:resultPublic[i].calendar.name, mail: resultPublic[i].calendar.description,type: 1 })389 resultNormalize[i].enabled = currentCalendars[resultPublic[i].id] ? false : true;390 }391 392 UI.dialogs.sharedCalendar.find('ul.search-result-list').append(DataLayer.render( 'templates/participants_search_itemlist.ejs', resultNormalize));393 394 UI.dialogs.sharedCalendar.find('ul.search-result-list li').click(function(event, ui){395 if ($(event.target).is('input')) {396 old_item = $(event.target).parents('li');397 var id = old_item.find('.id').html();398 399 for(var i = 0; i<resultNormalize.length; i++){400 if(resultNormalize[i].id == id)401 currentCalendars[id] = { id: id, name: resultNormalize[i].name, description: resultNormalize[i].description, type: resultNormalize[i].type, isCalendar: true};402 }403 404 UI.dialogs.sharedCalendar.find('dd.calendar-list ul.user-list')405 .append(DataLayer.render('templates/user_shared_add_itemlist.ejs', [currentCalendars[id]]))406 .scrollTo('max');407 408 $('li.not-user').remove();409 callbackSharedCalendarAdd();410 old_item.remove();411 }412 });413 event.preventDefault();414 }415 });416 417 var callbackSharedCalendarAdd = function(event){418 419 UI.dialogs.sharedCalendar.find('.button').filter(".close.new").button({420 icons: {421 primary: "ui-icon-close"422 },423 text: false424 }).click(function () {425 currentCalendars[$(this).parents().find('input[name="calendar[]"]').val()] = false;426 $(this).parents('li').remove();427 })428 .addClass('tiny disable ui-button-disabled ui-state-disabled')429 .removeClass('new').end();430 431 UI.dialogs.sharedCalendar.find('.user-list li').hover(432 function () {433 $(this).addClass("hover-user");434 $(this).find('.button').removeClass('disable ui-button-disabled ui-state-disabled').end()435 .find('.user-acls-shared-calendar').addClass('hover-user');436 },437 function () {438 $(this).removeClass("hover-user");439 $(this).find('.button').addClass('disable ui-button-disabled ui-state-disabled').end()440 .find('.user-acls-shared-calendar').removeClass('hover-user');;441 }442 );443 }444 445 //Carrega os dados já cadastrados446 for (var i = 0; i < Calendar.signatures.length; i++)447 if(Calendar.signatures[i].isOwner == "0"){448 var dataCurrent = Calendar.signatures[i].calendar;449 currentCalendars[Calendar.signatures[i].permission.id] = { id: dataCurrent.id, idPermission:Calendar.signatures[i].id ,name: dataCurrent.name, description: dataCurrent.description, type: Calendar.signatures[i].permission.type, isCalendar: true};450 451 UI.dialogs.sharedCalendar.find('dd.calendar-list ul.user-list')452 .append(DataLayer.render('templates/user_shared_add_itemlist.ejs', [currentCalendars[Calendar.signatures[i].permission.id]]))453 .scrollTo('max');454 455 $('li.not-user').remove();456 callbackSharedCalendarAdd();457 }458 459 UI.dialogs.sharedCalendar.dialog('open');460 }461 462 function cancel_signature(signatureId){463 $.Zebra_Dialog('Confirma a remoção desta assinatura ?', {464 'type': 'question',465 'overlay_opacity': '0.5',466 'buttons': ['Sim', 'Não'],467 'onClose': function(clicked) {468 if(clicked == 'Sim'){469 DataLayer.remove('calendarSignature', ''+signatureId);470 DataLayer.commit( false, false, function( received ){471 delete Calendar.currentViewKey;472 Calendar.load();473 refresh_calendars();474 });475 }476 }477 });478 } -
trunk/prototype/modules/calendar/templates/user_shared_add_itemlist.ejs
r5903 r6052 9 9 <input type="hidden" name="calendar[]" value="<%=data[0].id%>"> 10 10 <input type="hidden" name="type[]" value="<%=data[0].type%>"> 11 <label title="<%= data[0].description%>" class="name"><%= data[0].name ? data[0].name : '' %></label>11 <label title="<%= !!data[0].description ? data[0].description : data[0].name %>" class="name"><%= data[0].name ? data[0].name : '' %></label> 12 12 <%}else{%> 13 13 <div class="user-acls-shared-calendar">
Note: See TracChangeset
for help on using the changeset viewer.