Changeset 6286


Ignore:
Timestamp:
05/23/12 17:11:17 (8 years ago)
Author:
acoutinho
Message:

Ticket #2479 - Iconsistencia ao remover evento de duas agendas simultaneas

Location:
trunk/prototype
Files:
1 added
7 edited

Legend:

Unmodified
Added
Removed
  • trunk/prototype/api/datalayer.js

    r6008 r6286  
    554554        if( oneSide ) 
    555555            this.commit( concept, ids ); 
     556 
     557        this.broadcast( concept, oneSide ? 'server' : bothSides ? 'serverclient' : 'client', false ); 
     558    }, 
     559     
     560    /* 
     561     * RemoveFilter = método para remoção de objetos por critério, funcionalidade não implementada no método remove 
     562     * TODO - A remoção é feira em tempo real, onde ainda o mesmo não suporta remoção apenas na camada do cliente 
     563     * caso necessária tao funcionalidade a mesma será implementada no futuro 
     564     **/ 
     565    removeFilter: function( concept, filter, oneSide ){ 
     566        //remover 
     567        oneSide = true; 
     568 
     569        if(filter) 
     570            filter = this.criteria(concept, filter); 
     571        else 
     572            return; 
     573         
     574        if ( $.type(filter) === "array" ) 
     575            filter = { filter: filter, criteria: false }; 
     576 
     577        var toRemove = {}; 
     578 
     579        toRemove[concept] = []; 
     580         
     581        toRemove[concept][toRemove[concept].length] = {filter: filter.filter, criteria: filter.criteria, method: 'delete'}; 
     582 
     583        this.dispatch( 'call', toRemove, false, true ); 
    556584 
    557585        this.broadcast( concept, oneSide ? 'server' : bothSides ? 'serverclient' : 'client', false ); 
  • trunk/prototype/modules/calendar/interceptors/DBMapping.php

    r6250 r6286  
    560560    public function deepnessReadParticipant( &$uri , &$result , &$criteria , $original ){ 
    561561         
    562          
    563562       if(isset($original['criteria']['deepness']) && $original['criteria']['deepness'] != 0) 
    564563       { 
    565             if(isset($result['id'])) 
     564            if(isset($result['id']) && isset($result['user'])) 
    566565            { 
    567566                $result['user'] = Controller::read( array( 'concept' => 'user' , 'id' => $result['user'] , 'service' => ( $result['isExternal'] == 1 ? 'PostgreSQL' : 'OpenLDAP' ) ) ); 
     
    713712        if (Config::module('useCaldav', 'expressoCalendar')) 
    714713            require_once ROOTPATH . '/modules/calendar/interceptors/DAViCalAdapter.php'; 
     714         
     715        if(isset($criteria['filter']) && $criteria['filter'] && isset($criteria['filter'][1][2])){ 
     716            $idSchedulable = $criteria['filter'][1][2]; 
     717            $idCalendar = $criteria['filter'][2][2]; 
     718             
     719            if(!self::ownerSchedulable($idSchedulable)){ 
     720                $isPermissionFromOwner = self::permissionFromCalendarSignature($idCalendar, $idSchedulable); 
     721                 
     722                if($isPermissionFromOwner){ 
     723                    Controller::delete(array('concept' => 'schedulable', 'id' => $idSchedulable)); 
     724 
     725                }else{ 
     726                    $calendarsToSchedulable = self::schedulable2calendarToObject($idSchedulable); 
     727 
     728                    foreach($calendarsToSchedulable as $value) 
     729                        if($value['calendar_id'] == $idCalendar){ 
     730                            Controller::delete(array('concept' => 'calendarToSchedulable', 'id' => $value['calendar_to_calendar_object'])); 
     731                            break; 
     732                        } 
     733                } 
     734                return false; 
     735            } 
     736 
     737            $uri['id'] = $idSchedulable; 
     738        } 
    715739 
    716740        $calendarsToSchedulable = self::schedulable2calendarToObject($uri['id']); 
     
    973997    } 
    974998 
     999    private static function permissionFromCalendarSignature($idCalendar, $idEvent) { 
     1000        $signature = Controller::find(array('concept' => 'calendarSignature'), false, array( 'filter' => array('AND', array('=', 'calendar', $idCalendar), array('=', 'isOwner', '1')), 'deepness' => 2)); 
     1001         
     1002        $signature = is_array($signature) ? $signature[0] : $signature; 
     1003 
     1004        if($signature['user']['id'] == Config::me('uidNumber')){ 
     1005            return false; 
     1006        }else{ 
     1007           $isOwner = Controller::find(array('concept' => 'participant'), array('id'), array('filter' => 
     1008                    array('AND', 
     1009                        array('=', 'isOrganizer', '1'), 
     1010                        array('=', 'user', $signature['user']['id']), 
     1011                        array('=', 'schedulable', $idEvent) 
     1012                        ))); 
     1013 
     1014        return ( isset($isOwner[0]['id']) ) ? true : false; 
     1015        } 
     1016    } 
     1017     
     1018     
    9751019    private static function ownerSchedulable($id) { 
    9761020 
  • trunk/prototype/modules/calendar/js/calendar.codecs.js

    r6198 r6286  
    10621062                            return (attendee.acl.indexOf('w') >= 0 || attendee.acl.indexOf('o') >= 0 ) ? { 
    10631063                                selectable: true,  
    1064                                 className: 'fullcalendar-context-menu  event-id-'+idEvent+ (isRecurrence ? ' isRecurrence Recurrence-id-'+Recurrence : '') 
     1064                                className: 'fullcalendar-context-menu  event-id-'+idEvent+' calendar-id-'+calendar.id+ (isRecurrence ? ' isRecurrence Recurrence-id-'+Recurrence : '') 
    10651065                                } : { 
    10661066                                editable: false,  
     
    10711071                    return { 
    10721072                        editable: false,  
    1073                         className: 'blocked-event-permision  fullcalendar-not-context-menu event-id-'+idEvent 
     1073                        className: 'blocked-event-permision  fullcalendar-not-context-menu event-id-'+idEvent+' calendar-id-'+calendar.id 
    10741074                        selectable: true,  
    10751075                        disableDragging: isRecurrence 
     
    10821082                        var returns = "" 
    10831083                        returns += acl['write'] ? "" :  'blocked-event-permision '; 
    1084                         returns += acl['busy'] ? 'fullcalendar-not-context-menu ' : (acl['read']  ?  'fullcalendar-context-menu '+ idEvent + (isRecurrence ? ' isRecurrence Recurrence-id-'+Recurrence : '') : ''); 
    1085                         returns += 'event-id-'+idEvent; 
     1084                        returns += acl['busy'] ? 'fullcalendar-not-context-menu ' : (acl['read']  ?  'fullcalendar-context-menu '+ (isRecurrence ? ' isRecurrence Recurrence-id-'+Recurrence : '') : ''); 
     1085                        returns += 'event-id-'+idEvent+' calendar-id-'+calendar.id; 
    10861086                        return returns; 
    10871087                    }                            
  • trunk/prototype/modules/calendar/js/calendar.contentMenu.js

    r5863 r6286  
    88                 
    99                var classes = $(this).attr('class').split(" "); 
    10                 var idEvent = false; 
    11                 var idRecurrence = false; 
     10                var idEvent = false, idRecurrence = false, idCalendar = false; 
    1211                 
    1312                //recupera o id do calendar eo id do evento para tratamento 
     
    1918                        idRecurrence = classes[i].replace(/[a-zA-Z-]+/g, ''); 
    2019                        continue; 
     20                    }else if (classes[i].indexOf("calendar-id-") >= 0 ){ 
     21                        idCalendar = classes[i].replace(/[a-zA-Z-]+/g, ''); 
     22                        continue; 
    2123                    } 
    2224                } 
    2325 
    2426                var schedulable = DataLayer.get('schedulable', idEvent); 
    25                  
     27 
    2628                var isRecurrence = DataLayer.get('repeat', schedulable.repeat).frequency; 
    27                  
     29 
    2830                var template = DataLayer.render( 'templates/menu_context_event.ejs', {event: schedulable.id , 
    2931                    top: (event.clientY - 135), left: (event.clientX - 445),  
    30                     signature: Calendar.signatureOf[schedulable.calendar], 
     32                    signature: Calendar.signatureOf[idCalendar], 
    3133                    calendars: Calendar.calendars, isRecurrence: isRecurrence == 'none' ? false : true, 
    3234                    idRecurrence: idRecurrence 
  • trunk/prototype/modules/calendar/js/helpers.js

    r6209 r6286  
    780780            if(clicked == 'Sim'){ 
    781781                canDiscardEventDialog = true; 
    782                 DataLayer.remove( "schedulable", UI.dialogs.addEvent.find(".id-event").val() ); 
     782                /* Remove por filtro */ 
     783                DataLayer.removeFilter('schedulable', {filter: ['AND', ['=', 'id', objEvent.id], ['=', 'calendar', objEvent.calendar]]}); 
     784                Calendar.rerenderView(true); 
     785                /********************/ 
    783786                UI.dialogs.addEvent.dialog("close"); 
    784787            } 
     
    19051908} 
    19061909 
    1907 function remove_event(eventId){ 
     1910function remove_event(eventId, idCalendar){ 
    19081911    $.Zebra_Dialog('Tem certeza que deseja excluir o evento?', { 
    19091912        'type':     'question', 
     
    19121915        'onClose':  function(clicked) { 
    19131916            if(clicked == 'Sim'){ 
    1914                 DataLayer.remove('schedulable', ''+eventId); 
    1915                 DataLayer.commit(); 
     1917                DataLayer.removeFilter('schedulable', {filter: ['AND', ['=','id',eventId], ['=','calendar',idCalendar]]}) 
     1918                Calendar.rerenderView(true); 
    19161919            } 
    19171920        } 
  • trunk/prototype/modules/calendar/templates/menu_context_event.ejs

    r5746 r6286  
    1212                        <li role="menuitem" class="menu-item"><a href="../prototype/modules/calendar/export.php?event=<%=data.event%>" class="ui-corner-all">Exportar</a></li> 
    1313                         <%if(data.isRecurrence){%> 
    14                                 <li role="menuitem" class="menu-item"><a href="#" onclick="remove_event(<%= data.event%>);" class="ui-corner-all">Remover repetição</a></li> 
     14                                <li role="menuitem" class="menu-item"><a href="#" onclick="remove_event(<%= data.event%>, <%= signature.calendar.id %>);" class="ui-corner-all">Remover repetição</a></li> 
    1515                                <li role="menuitem" class="menu-item"><a href="#" onclick="remove_ocurrence(<%= data.event%>, <%= data.idRecurrence%>);" class="ui-corner-all">Remover ocorrência</a></li> 
    1616                            <%}else{%> 
    17                                 <li role="menuitem" class="menu-item"><a href="#" onclick="remove_event(<%= data.event%>);" class="ui-corner-all">Remover</a></li> 
     17                                <li role="menuitem" class="menu-item"><a href="#" onclick="remove_event(<%= data.event%>, <%= signature.calendar.id %>);" class="ui-corner-all">Remover</a></li> 
    1818                            <%}%> 
    1919                <%}else{%> 
     
    2525                        <%if(signature.permission.acl['write'] || signature.permission.acl['remove']){%> 
    2626                            <%if(data.isRecurrence){%> 
    27                                 <li role="menuitem" class="menu-item"><a href="#" onclick="remove_event(<%= data.event%>);" class="ui-corner-all">Remover repetição</a></li> 
     27                                <li role="menuitem" class="menu-item"><a href="#" onclick="remove_event(<%= data.event%>, <%= signature.calendar.id %>);" class="ui-corner-all">Remover repetição</a></li> 
    2828                                <li role="menuitem" class="menu-item"><a href="#" onclick="remove_ocurrence(<%= data.event%>, <%= data.idRecurrence%>);" class="ui-corner-all">Remover ocorrência</a></li> 
    2929                            <%}else{%> 
    30                                 <li role="menuitem" class="menu-item"><a href="#" onclick="remove_event(<%= data.event%>);" class="ui-corner-all">Remover</a></li> 
     30                                <li role="menuitem" class="menu-item"><a href="#" onclick="remove_event(<%= data.event%>, <%= signature.calendar.id %>);" class="ui-corner-all">Remover</a></li> 
    3131                            <%}%> 
    3232                        <%}%> 
  • trunk/prototype/post.php

    r6071 r6286  
    88if( count($_FILES) ) 
    99{ 
    10         $files = array(); 
    11         foreach( $_FILES as $name => $file ) 
     10    $files = array(); 
     11    foreach( $_FILES as $name => $file ) 
     12    { 
     13        if( is_array( $file['name'] ) ) 
    1214        { 
    13                 if( is_array( $file['name'] ) ) 
    14                 { 
    15                         foreach( $file['name'] as $key => $value ){ 
    16                                 $counter = count($files); 
    17                                 $files[$name.$counter] = array('name' => $file['name'][$counter],  
    18                                         'type' => $file['type'][$counter], 
    19                                         'source' => base64_encode(file_get_contents( $file['tmp_name'][$counter], $file['size'][$counter])), 
    20                                         'size' => $file['size'][$counter], 
    21                                         'error' => $file['error'][$counter] 
    22                                 ); 
    23                         } 
    24                 }else 
    25                         $files[$name] = $file; 
    26         }  
    27          
    28         $_FILES = $files;        
     15            foreach( $file['name'] as $key => $value ){ 
     16                $counter = count($files); 
     17                $files[$name.$counter] = array('name' => $file['name'][$counter],  
     18                        'type' => $file['type'][$counter], 
     19                        'source' => base64_encode(file_get_contents( $file['tmp_name'][$counter], $file['size'][$counter])), 
     20                        'size' => $file['size'][$counter], 
     21                        'error' => $file['error'][$counter] 
     22                ); 
     23            } 
     24        }else 
     25            $files[$name] = $file; 
     26    }  
     27 
     28    $_FILES = $files;    
     29 
     30 
     31    if(isset($data['MAX_FILE_SIZE'])) 
     32        unset($data['MAX_FILE_SIZE']);   
    2933} 
    3034 
    31 if(isset($data['MAX_FILE_SIZE'])) 
    32         unset($data['MAX_FILE_SIZE']); 
    3335         
    3436require_once "api/controller.php"; 
Note: See TracChangeset for help on using the changeset viewer.