Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

Autoría | Ultima modificación | Ver Log |

<?php

declare(strict_types=1);

namespace LeadersLinked\Mapper;

use Laminas\Db\Adapter\AdapterInterface;
use LeadersLinked\Mapper\Common\MapperCommon;
use LeadersLinked\Hydrator\ObjectPropertyHydrator;
use LeadersLinked\Model\MeetingMember;


class MeetingMemberMapper extends MapperCommon {
    
    const __TABLE = 'tbl_meeting_members';

    /**
     * 
     * @var MeetingMemberMapper
     */
    private static $_instance;

    /**
     * 
     * @param AdapterInterface $adapter
     */
    private function  __construct($adapter)
    {
        parent::__construct($adapter);
    }

    /**
     * 
    * @param AdapterInterface $adapter
    * @return MeetingMemberMapper
    */
    public static function getInstance($adapter)
    {
        if (self::$_instance == null) {
            self::$_instance = new MeetingMemberMapper($adapter);
        }

        return self::$_instance;
    }

    public function fetchAllUsersInvitedByMeetingId($meetingId) 
    {
        $prototype = new MeetingMember;
        $select = $this->sql->select(self::__TABLE);
        $select->where->equalTo('meeting_id', $meetingId);

        return $this->executeFetchAllObject($select, $prototype);
    }

    public function fetchAllAcceptedMembersByMeetingId($meeting_id) 
    {
        $prototype = new MeetingMember;
        $select = $this->sql->select(self::__TABLE);
        $select->where->equalTo('meeting_id', $meeting_id);
        $select->where->equalTo('action', MeetingMember::STATUS_ACCEPTED);
        
        return $this->executeFetchAllObject($select, $prototype);
    }

    public function fetchAllMeetingsAUserWasInvitedByUserId($userId)
    {
        $prototype = new MeetingMember;
        $select = $this->sql->select(self::__TABLE);
        $select->where->equalTo('user_id', $userId);

        return $this->executeFetchAllObject($select, $prototype);
    }

    
    public function fetchAllNotCancelledMeetingsAUserWasInvitedByUserId($userId) 
    {
        $prototype = new MeetingMember;
        $select = $this->sql->select(self::__TABLE);
        $select->where->equalTo('user_id', $userId);
        $select->where->notEqualTo('action', MeetingMember::ACTION_DECLINED);

        return $this->executeFetchAllObject($select, $prototype);
    }

    public function fetchUserRoleForAMeeting($user_id, $meeting_id) 
    {
        $prototype = new MeetingMember;
        $select = $this->sql->select(self::__TABLE);
        $select->columns(['member_role']);
        $select->where->equalTo('user_id', $user_id);
        $select->where->equalTo('meeting_id', $meeting_id);

        return $this->executeFetchAllObject($select, $prototype);
    }

    public function insert($member) 
    {
        $hydrator = new ObjectPropertyHydrator();
        $values = $hydrator->extract($member);
        $values = $this->removeEmpty($values);

        $insert = $this->sql->insert(self::__TABLE);
        $insert->values($values);

        $result = $this->executeInsert($insert);
        if ($result) {
            $member->id = $this->lastInsertId;
        }

        return $result;
    } 

    public function updateMeetingMemberToAcceptedStatusById($id) 
    
    {
        $update = $this->sql->update(self::__TABLE);
        $update->set([
            'action' => MeetingMember::STATUS_ACCEPTED,
            'joined_on' => date('Y-m-d\TH:i', time())
        ]);
        $update->where->equalTo('id', $id);

        return $this->executeUpdate($update);
    }

    public function deleteAllMembersFromMeetingByMeetingId($meetingId) 
    
    {
        $delete = $this->sql->delete(self::__TABLE);
        $delete->where->equalTo('meeting_id', $meetingId);
        
        return $this->executeDelete($delete);
    }

    public function declineMeetingById($id) 
    
    {
        $update = $this->sql->update(self::__TABLE);
        $update->set(['action' => MeetingMember::ACTION_DECLINED]);
        $update->where->equalTo('id', $id);

        return $this->executeUpdate($update);
    }
}