Changeset 6295


Ignore:
Timestamp:
05/24/12 16:26:24 (8 years ago)
Author:
acoutinho
Message:

Ticket #2795 - Problema ao tentar aceitar convite da agenda para a conta compartilhada

Location:
trunk
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • trunk/expressoMail1_2/inc/class.db_functions.inc.php

    r6105 r6295  
    434434                                $_REQUEST['params']['calendar'] = $params['selected']; 
    435435                                $_REQUEST['readable'] = $params['readable'] ? true : false; 
    436                 $_REQUEST['analize'] = isset($params['analize']) ? true : false; 
     436                                $_REQUEST['analize'] = isset($params['analize']) ? true : false; 
    437437                                $_REQUEST['params']['status'] = $params['status']; 
     438                                $_REQUEST['params']['fromPermission'] = $params['fromPermission']; 
    438439                                $_REQUEST['params']['owner'] = $_SESSION['phpgw_info']['expressomail']['user']['account_id']; 
    439440                                if(isset($params['acceptedSuggestion'])){ 
  • trunk/expressoMail1_2/js/main.js

    r6288 r6295  
    36173617 
    36183618                                        var createDialog = function(typeImport, propaget){ 
    3619                                                          
     3619                                             
     3620                                                if(typeof(typeImport) == "object"){ 
     3621                                                    var calendarPermission = typeImport.calendar; 
     3622                                                    typeImport = typeImport.action; 
     3623                                                } 
     3624                                                 
    36203625                                                switch(parseInt(typeImport)){ 
    36213626                                                case 1: 
    36223627                                                case 7: 
    3623                                                         $("#select-agenda").html(''); 
    3624                                                                 for(var id in Calendar.calendars){ 
    3625                                                                                 var doc = document .createElement("OPTION"); 
    3626                                                                                 doc.value = Calendar.calendars[id].id; 
    3627                                                                                 doc.innerHTML = Calendar.calendars[id].name; 
    3628                                                                                 $("#select-agenda").append(doc); 
    3629                                                                            
    3630                                                                 }; 
    3631                                                                 $("#import-dialog" ).dialog({ 
    3632                                                                         buttons: { 
    3633                                                                                 Cancel: function() { 
    3634                                                                                                 $( this ).dialog( "close" ); 
    3635                                                                                 }, 
    3636                                                                                 "Importar" : function(){ 
    3637  
    3638                                                                                          $.ajax({ 
    3639                                                                                                          url: "controller.php?action="+import_url+'&from_ajax=true&selected='+$("#select-agenda option:selected").val()+'&status='+$("#select-status option:selected").val(), 
    3640                                                                                                          success: function(msg){ 
    3641  
    3642                                                                                                                         var alt = ( (msg = connector.unserialize(msg)) == "ok") ? "Importado com sucesso para " : "Ocorreu um erro ao importar o evento para a agenda "; 
    3643                                                                                                                         alert( alt + $("#select-agenda option:selected").text() ); 
    3644                                                                                                         } 
    3645                                                                                                 }); 
    3646                                                                                  
    3647                                                                                         $( this ).dialog( "close" ); 
    3648                                                                                 } 
     3628                                                case 10: 
     3629                                                    $("#select-agenda").html(''); 
     3630 
     3631                                                    var shared = '', options = ''; 
     3632 
     3633                                                    if(typeImport == 10){ 
     3634                                                        shared = '&fromPermission='+calendarPermission; 
     3635                                                         
     3636                                                        options += '<option value="'+calendarPermission+'">'+Calendar.signatureOf[calendarPermission].calendar.name+'</option>' 
     3637                                                    }else{ 
     3638                                                        for(var id in Calendar.calendars) 
     3639                                                           options += '<option value="'+Calendar.calendars[id].id+'">'+Calendar.calendars[id].name+'</option>'; 
     3640 
     3641                                                        $("#select-agenda").append(options); 
     3642                                                    } 
     3643                                                    $("#import-dialog" ).dialog({ 
     3644                                                        buttons: { 
     3645                                                            Cancel: function() { 
     3646                                                                $( this ).dialog( "close" ); 
     3647                                                            }, 
     3648                                                            "Importar" : function(){ 
     3649                                                                    $.ajax({ 
     3650                                                                        url: "controller.php?action="+import_url+'&from_ajax=true&selected='+$("#select-agenda option:selected").val()+'&status='+$("#select-status option:selected").val()+shared, 
     3651                                                                        success: function(msg){ 
     3652                                                                            var alt = ( (msg = connector.unserialize(msg)) == "ok") ? "Importado com sucesso para " : "Ocorreu um erro ao importar o evento para a agenda "; 
     3653                                                                            alert( alt + $("#select-agenda option:selected").text() ); 
    36493654                                                                        } 
    3650                                                                  }); 
    3651                                                                   
    3652                                                                  if(typeImport == 7){ 
    3653                                                                      $("#import-dialog").find('#select-status option[value=1]').attr('selected','selected').trigger('change'); 
    3654                                                                      $("#import-dialog").find('#select-status').attr('disabled','disabled'); 
    3655                                                                  } 
    3656                                                         break; 
     3655                                                                    }); 
     3656                                                                    $( this ).dialog( "close" ); 
     3657                                                            } 
     3658                                                        } 
     3659                                                        }); 
     3660 
     3661                                                        if(typeImport == 7){ 
     3662                                                            $("#import-dialog").find('#select-status option[value=1]').attr('selected','selected').trigger('change'); 
     3663                                                            $("#import-dialog").find('#select-status').attr('disabled','disabled'); 
     3664                                                        } 
     3665                                                    break; 
    36573666                                                case 3: 
    36583667                                                        $.ajax({ 
     
    36863695                                                case 9: 
    36873696                                                        alert('Seu evento não possui alterações!'); 
     3697                                                        return; 
     3698                                                        break; 
     3699                                                case 11: 
     3700                                                        alert('Este evento já fora importando por algum dos particpantes e já se encontra disponível em sua agenda compartilhada!'); 
    36883701                                                        return; 
    36893702                                                        break; 
  • trunk/prototype/modules/calendar/constants.php

    r5879 r6295  
    3131define('ICAL_ACTION_ORGANIZER_UPDATE', 8); 
    3232define('ICAL_ACTION_ORGANIZER_NONE', 9); 
     33define('ICAL_ACTION_IMPORT_FROM_PERMISSION', 10); 
     34define('ICAL_ACTION_NONE_FROM_PERMISSION', 11); 
    3335 
    3436define('ATTENDEE_ACL_ORGANIZATION', 'o'); 
  • trunk/prototype/modules/calendar/interceptors/DBMapping.php

    r6286 r6295  
    819819        //Veirifica pois o usuário pode ter varias assinaturas mas não ser dona de nenhuma 
    820820        if (count($result) > 0) { 
    821             foreach ($result as $key) { 
    822                 if ($key['isOwner'] != 0) 
     821            foreach ($result as $value) { 
     822                if (isset($value['isOwner']) && $value['isOwner'] != 0) 
    823823                    $isValidSignature = true; 
    824824            } 
  • trunk/prototype/modules/calendar/js/calendar.codecs.js

    r6286 r6295  
    656656                            }) 
    657657                        }; 
    658                         me.id = attend.id; 
     658                        me = attend; 
    659659                        return(null); 
    660660                    }; 
     
    685685                alarms: !!participantInfo.user ? participantInfo.user.alarms : [], 
    686686                status: !!participantInfo.user ? participantInfo.user.status : 1, 
    687                 acl: isShared ? constantAcl(Calendar.signatureOf[objEvent.calendar].permission.aclValues) : (!!participantInfo.user ? constantAcl(participantInfo.user.acl) : ( ( !objEvent.id || isAttendee ) ? constantAcl( 'rowi' ) : constantAcl( 'r' ))), 
     687                acl: constantAcl(me.acl || 'roiw'), 
    688688                isShared: isShared, 
    689689                isAttendee: (isAttendee ? true : (objEvent.id && isShared ? false : true)), 
    690                 me: ((!objEvent.id) || ( objEvent.id && isAttendee)) ? (!!participantInfo.user ? DataLayer.merge(participantInfo.user, me) : DataLayer.merge(isShared ? participantInfo.organizer :  me, { 
    691                     acl:  !isShared ? 'rowi' : Calendar.signatureOf[objEvent.calendar].permission.aclValues,  
    692                     delegatedFrom: 0,  
    693                     receiveNotification: 1 
    694                 })) : (DataLayer.merge( ( participantInfo.organizer || me), { 
    695                     acl: 'r' 
    696                 } ) ), 
     690                me: me, 
    697691                delegatedFrom: delegatedFrom, 
    698                                  
    699692                statusParticipants: statusParticipants 
    700693            }; 
  • trunk/prototype/modules/calendar/templates/attendee_add.ejs

    r6066 r6295  
    3939                <dd class="attendee-list"> 
    4040                        <ul class="attendee-list"> 
    41                                 <li class="organizer <%= (data.event.acl.organization || !data.event.isAttendee) ? "hidden" : "" %>">  
     41                                <li class="organizer <%= (data.event.acl.organization) ? "hidden" : "" %>">  
    4242                                        <div style="overflow:hidden; width:100%; display:table;"> 
    4343                                                <span class="space-status ui-icon <%=iconStatus[data.event.organizer.status]%>" title="<%=legendStatus[data.event.organizer.status]%>"></span> 
  • trunk/prototype/services/iCal.php

    r6248 r6295  
    248248                                    $calendarToSchedulable['schedulable'] = $schedulable['id']; 
    249249                                    $interation['calendarToSchedulable://' . mt_rand() . '(Formatter)'] = $calendarToSchedulable; 
    250  
     250     
    251251                                    if (isset($params['status'])) { 
    252                                         $pID = self::_getParticipantByMail(Config::me('mail'), $schedulable['participants']); 
     252                                        if(isset($params['fromPermission'])){                                        
     253                                            $signaturesOfOwner = Controller::Read(array('concept' => 'calendarSignature'), false, array('filter' => array('AND', array('=', 'calendar', $params['fromPermission']) , array('=','isOwner','1')), 'deepness' => 2 ));                                          
     254                                            $pID = self::_getParticipantByMail($signaturesOfOwner[0]['user']['mail'], $schedulable['participants']); 
     255                                        }else 
     256                                            $pID = self::_getParticipantByMail(Config::me('mail'), $schedulable['participants']); 
    253257                                        $interation['participant://' . $pID]['status'] = $params['status']; 
    254258                                    } 
     
    265269 
    266270                                    if (isset($params['status'])) { 
    267                                         $pID = self::_getParticipantByMail(Config::me('mail'), $schedulable['participants']); 
     271                                        if(isset($params['fromPermission'])){                                        
     272                                            $signaturesOfOwner = Controller::Read(array('concept' => 'calendarSignature'), false, array('filter' => array('AND', array('=', 'calendar', $params['fromPermission']) , array('=','isOwner','1')), 'deepness' => 2 )); 
     273                                            $pID = self::_getParticipantByMail($signaturesOfOwner[0]['user']['mail'], $schedulable['participants']); 
     274                                        }else 
     275                                            $pID = self::_getParticipantByMail(Config::me('mail'), $schedulable['participants']); 
    268276                                        //Verifica a importação de eventos em que não participo 
    269277                                        if ($pID) { 
     
    566574                                            $interation = ($isOrganizer) ? ICAL_ACTION_ORGANIZER_NONE : ICAL_ACTION_NONE; 
    567575                                    } 
    568                                 if (!$isParticipant) 
    569                                     $interation = ICAL_ACTION_ORGANIZER_NONE; 
     576                                if (!$isParticipant){ 
     577                                      $interation = self::_checkParticipantByPermissions($schedulable); 
     578                                    } 
    570579                            }else 
    571580                                $interation = ICAL_ACTION_IMPORT; 
     
    651660    } 
    652661 
     662    private static function _checkParticipantByPermissions($schedulable) { 
     663 
     664        $calendarIds = Controller::find(array('concept' => 'calendarSignature'), array('calendar'), array('filter' => array('AND', array('=','isOwner','0'), array('=', 'user', Config::me("uidNumber"))))); 
     665 
     666        if($calendarIds && isset($calendarIds[0])){ 
     667            $ids = array(); 
     668            foreach($calendarIds as $value) 
     669                    array_push($ids, $value['calendar']); 
     670 
     671            $signaturesOfOwners = Controller::find(array('concept' => 'calendarSignature'), false, array('filter' => array('AND', array('IN', 'calendar', $ids) , array('=','isOwner','1')), 'deepness' => 2 )); 
     672             
     673            foreach($signaturesOfOwners as $value){ 
     674                if(self::_getParticipantByMail($value['user']['mail'], $schedulable['participants'])){ 
     675                    $eventoFromCalendar = Controller::read( array( 'concept' => 'calendarToSchedulable') , false, array('filter' => array('AND', array('=','schedulable',$schedulable['id']), array('=','calendar', $value['calendar']['id'])))); 
     676 
     677                    return  ($eventoFromCalendar && isset($eventoFromCalendar[0])) ? ICAL_ACTION_NONE_FROM_PERMISSION : array('action' => ICAL_ACTION_IMPORT_FROM_PERMISSION, 'calendar' => $value['calendar']['id'] ); 
     678                } 
     679            }     
     680        } 
     681        return ICAL_ACTION_ORGANIZER_NONE; 
     682    } 
     683     
     684     
    653685    private static function _getParticipantByMail($mail, &$participants) { 
    654686        if ($participants && $participants != '') 
Note: See TracChangeset for help on using the changeset viewer.