source: trunk/expressoAdmin1_2/js/jscode/assing_calendar.js @ 5804

Revision 5804, 15.6 KB checked in by acoutinho, 12 years ago (diff)

Ticket #2434 - Implementada funcionalidade de criacao de agenda para contas compartilhadas e imposicao de agendas

Line 
1function assing_calendar_user(path){
2       
3        path = !!path ? path : 'templates/default/';
4        var html = DataLayer.render(path+'assing_calendar.ejs', {});   
5       
6        //Variaval global para manipulação dos usuários
7        //melhor perforface
8        currentUsers = {};
9        currentUsers[User.me.id] = true;
10       
11        searchType = 'calendar';
12       
13        if (!UI.dialogs.assingCalendar) {
14                        UI.dialogs.assingCalendar = jQuery('#assingCalendar').append('<div title="Compatilhamento de Agenda" class="assing-calendar active"> <div>').find('.assing-calendar.active').html(html).dialog({
15                                resizable: false,
16                                modal:true,
17                                autoOpen: false,
18                                width:620,
19                                position: 'center',
20                                close: function(event, ui) {
21                                        //Implementações de cancelar
22                                        currentUsers = {};
23                                }
24                        });
25                } else {
26                        UI.dialogs.assingCalendar.html(html);
27                }               
28               
29                UI.dialogs.assingCalendar.find('.button').button()
30                .filter('.cancel').click(function(evt){
31                        UI.dialogs.assingCalendar.dialog("close");
32                }).end()
33                .filter('.save').click(function(evt){
34                        //TODO - API ainda não suporta
35                        //UI.dialogs.assingCalendar.find('form').submit();
36                        var calendarSelected = UI.dialogs.assingCalendar.find('dd.calendar input[name="calendarId"]').val();
37                        var save = function(){
38                                if($('li.not-user').length == 0)
39                                $.each(UI.dialogs.assingCalendar.find('.user-list li.new'), function( i , element ){
40                                        var user = $(element).find('input[name="user[]"]').val();
41                                        var acl = $(element).find('input[name="attendeeAcl[]"]').val()+'p';
42                                        if(acl == "")
43                                            return true;
44                                       
45                                        DataLayer.put('calendarToPermission', {calendar: calendarSelected, type: 0, user: user, acl: acl});
46
47                                        DataLayer.put('calendarSignature',
48                                        {
49                                            calendar: calendarSelected,
50                                            isOwner: 0,
51                                            user: user,
52                                            fontColor: '120d0d',
53                                            backgroundColor: 'e36d76',
54                                            borderColor: 'd5130b'
55                                        });
56                                });
57                               
58                                $.each(UI.dialogs.assingCalendar.find('.user-list li.current'), function( i , element ){
59                                   
60                                    var user = $(element).find('input[name="user[]"]').val();
61                                    var acl = $(element).find('input[name="attendeeAcl[]"]').val()+'p';
62                                    var id = $(element).find('input[name="permission[]"]').val();
63                                    if(acl == "")
64                                        DataLayer.remove('calendarToPermission', id);
65                                       
66                                    DataLayer.put('calendarToPermission', {id: id, calendar: calendarSelected, type: 0, user: user, acl: acl});
67                                   
68                                });
69                               
70                                DataLayer.commit(false, false, function(data){
71                                        UI.dialogs.assingCalendar.dialog("close");
72                                });
73                        };
74
75                        if(!!UI.dialogs.assingCalendar.find('.user-list li input[name="attendeeAcl[]"][value=""]').length){
76                                $.Zebra_Dialog('Alguns usuários estão sem permissões e serão automáticamente removidos, deseja continuar ?', {
77                                        'type':     'question',
78                                        'overlay_opacity': '0.5',
79                                        'buttons':  ['Continuar', 'Cancelar'],
80                                        'onClose':  function(clicked) {
81                                                if(clicked == 'Continuar') {
82                                                        save();
83                                                }
84                                        }
85                                });
86                        }else
87                                save();         
88                });
89               
90                UI.dialogs.assingCalendar.find('.add-user-search .ui-icon-search').click(function(event) {
91                        UI.dialogs.assingCalendar.find('.add-user-search input').keydown();
92                });
93               
94                var incompatibleAcl = function (obj, acls, buttons){
95                        for (var i = 0; i < acls.length; i++){
96                                var objremove = obj.parent().find('.'+buttons[i]+'');
97                                if(objremove.hasClass('attendee-permissions-change-button'))
98                                        changeAcl(objremove, acls[i]);
99                        }
100                }
101
102                var removeAcl = function(current, acl){
103                        var acls = '';
104                        for(var i = 0; i < current.length; i++)
105                                if(current.charAt(i) != acl)
106                                        acls += current.charAt(i) ;
107                        return acls;
108                }
109
110                var dependsAcl = function(obj, acls, buttons){
111                        for (var i = 0; i < acls.length; i++){
112                                var objremove = obj.parent().find('.'+buttons[i]+'');
113                                if(!objremove.hasClass('attendee-permissions-change-button'))
114                                        changeAcl(objremove, acls[i]);
115                        }
116                }
117               
118                var changeAcl = function(obj, acl){
119                        if(obj.hasClass('attendee-permissions-change-button')){
120                                 obj.parent().siblings('input[name="attendeeAcl[]"]').val(removeAcl( obj.parent().siblings('input[name="attendeeAcl[]"]').val(), acl)) ;
121                        }else{
122                                var acls = obj.parent().siblings('input[name="attendeeAcl[]"]').val();
123                                obj.parent().siblings('input[name="attendeeAcl[]"]').val(acls + acl);
124                        }
125                        obj.toggleClass('attendee-permissions-change-button')
126                        .find('span:first').toggleClass('attendee-permissions-change').end(); 
127                }
128               
129               
130                UI.dialogs.assingCalendar.find('.add-user-search input').keydown(function(event) {
131                        if(event.keyCode == '13' || typeof(event.keyCode) == 'undefined') {
132                           
133                                var result = '';
134                                var group  = '';
135                                if(searchType == 'calendar')
136                                    result = DataLayer.get('calendarToPermission', {filter: ['AND', ['=','type','1'], ['OR', ['i*','name', $(this).val()], ['i*', 'description', $(this).val()] ] ] , criteria: {deepness: 2}});
137                                else{
138                                    result = DataLayer.get('user', ["*", "name", $(this).val()], true);
139                                    group = DataLayer.get('group', ["*", "name", $(this).val()], true);
140                               
141                                    if(!!group){
142                                        if(!!result)
143                                                DataLayer.merge(result, group);
144                                        else
145                                                result = group;
146                                    }
147                                }
148                                /**
149                                * TODO: trocar por template
150                                */
151                                UI.dialogs.assingCalendar.find('ul.search-result-list').empty().css('overflow', 'hidden');
152                                if (!result) {
153                                        UI.dialogs.assingCalendar.find('ul.search-result-list').append('<li><label class="empty">Nenhum resultado encontrado.</label></li>');
154                                }
155
156                                if(searchType == 'calendar')
157                                     for(i=0; i<result.length; i++){
158                                        result[i].name = result[i].calendar.name;
159                                        result[i].id = result[i].calendar.id;
160                                        result[i].enabled = true;
161                                     }
162                                else
163                                    for(i=0; i<result.length; i++)
164                                        result[i].enabled = currentUsers[result[i].id] ? false : true;
165
166                                UI.dialogs.assingCalendar.find('ul.search-result-list').append(DataLayer.render( path+'participants_search_itemlist.ejs', result));
167
168                                UI.dialogs.assingCalendar.find('ul.search-result-list li').click(function(event, ui){
169                                        if ($(event.target).is('input')) {
170                                             old_item = $(event.target).parents('li');
171                                             
172                                             if(searchType == 'calendar'){
173                                                 
174                                                 searchType = 'user';
175                                                 
176                                                 UI.dialogs.assingCalendar.find('dd.calendar input[name="calendarId"]').val(old_item.find('.id').html());
177                                                 
178                                                 //TODO - Trocar por template
179                                                 UI.dialogs.assingCalendar.find('dd.calendar ul').append('<li class="calendar-selected">' + old_item.find('.name').html() +
180                                                 '<a class="button tiny removeCalendar"></a></li>');
181                                             
182                                             
183                                                 var currentData = DataLayer.get('calendarToPermission:detail', {filter: ['AND', ['=','calendar', old_item.find('.id').html()], ['i*','acl','p'] ],  criteria: {deepness: 2}})
184                                                 
185                                                 if(currentData){
186                                                     for(var i = 0; i < currentData.length; i++){
187                                                         
188                                                         currentUsers[currentData[i].user.id] = currentData[i].user;
189                                                         
190                                                         UI.dialogs.assingCalendar.find('dd.calendar-list ul.user-list')
191                                                        .append(DataLayer.render(path+'user_shared_add_itemlist.ejs', [{id: currentData[i].user.id, name: currentData[i].user.name, mail: currentData[i].user.mail, isCurrent: true, permission: currentData[i].id}]))
192                                                        .scrollTo('max');
193
194                                                        $('li.not-user').remove();
195                                                        callbackSharedCotactsAdd();
196                                                       
197                                                        for (var f in currentData[i].acl){
198                                                            if(currentData[i].acl[f]){
199                                                                    UI.dialogs.assingCalendar.find('.'+f+':last').toggleClass('attendee-permissions-change-button')
200                                                                    .find('span:first').toggleClass('attendee-permissions-change').end(); 
201                                                            }
202                                                        }
203                                                         
204                                                     }
205                                                     
206                                                 }
207
208                                                 UI.dialogs.assingCalendar.find('.removeCalendar').button({
209                                                        icons: {
210                                                                primary: "ui-icon-close"
211                                                        },
212                                                        text: false
213                                                }).click(function(evt){
214                                                        $(this).parents('li').remove();
215                                                        searchType = 'calendar';
216                                                       
217                                                        UI.dialogs.assingCalendar.find('ul.search-result-list li').remove();
218                                                        UI.dialogs.assingCalendar.find('dt.add-user.search').html('Pesquisa agendas');
219                                                 });
220                                                 
221                                                 UI.dialogs.assingCalendar.find('ul.search-result-list li').remove();
222                                                 UI.dialogs.assingCalendar.find('dt.add-user.search').html('Pesquisa usuários');
223                                                 
224                                                 
225                                             }else{
226                                               
227                                                var id = old_item.find('.id').html();
228                                               
229                                                currentUsers [id] = {
230                                                        id: id,
231                                                        name: old_item.find('.name').html(),
232                                                        mail: old_item.find('.mail').html()
233                                                };
234                                                                                       
235                                                UI.dialogs.assingCalendar.find('dd.calendar-list ul.user-list')
236                                                .append(DataLayer.render(path+'user_shared_add_itemlist.ejs', [{id: id, name: currentUsers [id] .name, mail: currentUsers [id] .mail}]))
237                                                .scrollTo('max');
238                                               
239                                                $('li.not-user').remove();
240                                                callbackSharedCotactsAdd();
241                                                old_item.remove();
242                                            }
243                                        }
244                                });
245                                event.preventDefault();
246                        }
247                });
248
249                var callbackSharedCotactsAdd = function(event){
250                        UI.dialogs.assingCalendar.find('.button').filter(".read.new").button({
251                                icons: {
252                                        primary: "ui-icon-circle-zoomin"
253                                },
254                                text: false
255                        }).click(function () {
256                                incompatibleAcl($(this), ['b'], ['busy']);
257                                changeAcl($(this), 'r');
258                        })
259                        .addClass('tiny disable ui-button-disabled ui-state-disabled')
260                        .removeClass('new').end()
261                       
262                        .filter(".write.new").button({
263                                icons: {
264                                        primary: "ui-icon-key"
265                                },
266                                text: false
267                        }).click(function () {
268                                incompatibleAcl($(this), ['b'], ['busy']);
269                                dependsAcl($(this), ['r'], ['read']);
270                                changeAcl($(this), 'w');
271                        })
272                        .addClass('tiny disable ui-button-disabled ui-state-disabled')
273                        .removeClass('new').end()
274                       
275                        .filter(".remove.new").button({
276                                icons: {
277                                        primary: "ui-icon-trash"
278                                },
279                                text: false
280                        }).click(function () {
281                                incompatibleAcl($(this), ['b'], ['busy']);
282                                dependsAcl($(this), ['r'], ['read']);
283                                changeAcl($(this), 'd');
284                        })
285                        .addClass('tiny disable ui-button-disabled ui-state-disabled')
286                        .removeClass('new').end()
287                       
288                        .filter(".busy.new").button({
289                                icons: {
290                                        primary: "ui-icon-clock"
291                                },
292                                text: false
293                        }).click(function () {
294                                //Remove incompativbilidade de acls
295                                incompatibleAcl($(this), ['r', 'w', 'd', 's' ], ['read', 'write', 'remove', 'shared']);
296                                changeAcl($(this), 'b');
297                        })
298                        .addClass('tiny disable ui-button-disabled ui-state-disabled')
299                        .removeClass('new').end()
300                       
301                        .filter(".shared.new").button({
302                                icons: {
303                                        primary: "ui-icon-transferthick-e-w"
304                                },
305                                text: false
306                        }).click(function () {
307                                incompatibleAcl($(this), ['b',], ['busy']);
308                                dependsAcl($(this), ['r'], ['read']);
309                                changeAcl($(this), 's');
310                        })
311                        .addClass('tiny disable ui-button-disabled ui-state-disabled')
312                        .removeClass('new').end()
313
314                        .filter(".close.new").button({
315                                icons: {
316                                        primary: "ui-icon-close"
317                                },
318                                text: false
319                        }).click(function () {
320                                currentUsers[$(this).parents().find('input[name="user[]"]').val()] = false;
321                                var id = false;
322                               
323                                if(id = $(this).parents().find('input[name="permission[]"]').val())
324                                    DataLayer.remove('calendarToPermission', id);
325                               
326                                $(this).parents('li').remove();
327                        })
328                        .addClass('tiny disable ui-button-disabled ui-state-disabled')
329                        .removeClass('new').end();
330
331                UI.dialogs.assingCalendar.find('.user-list li').hover(
332                        function () {
333                                $(this).addClass("hover-user");
334                                $(this).find('.button').removeClass('disable ui-button-disabled ui-state-disabled').end()
335                                .find('.user-acls-shared-calendar').addClass('hover-user');
336                        },
337                        function () {
338                                $(this).removeClass("hover-user");
339                                $(this).find('.button').addClass('disable ui-button-disabled ui-state-disabled').end()
340                                .find('.user-acls-shared-calendar').removeClass('hover-user');;
341                        }
342                );             
343        }
344        UI.dialogs.assingCalendar.dialog('open');
345}
346
Note: See TracBrowser for help on using the repository browser.