CI->load->model('Repository_model', 'repositoryModel'); // filter event type $eventType = $event->type; if(in_array($eventType, $this->ListenedEventList)) { $this->_processEvnet($event); } return true; } private function _processEvnet(Event $event) { // get event type $eventType = $event->type; if (in_array($eventType, [ EventType::HOOK_POST_RECEIVE ])) { $this->_handleRepositoryPushEvent($event); } else if (in_array($eventType, [ EventType::GROUP_CREATE, EventType::GROUP_UPDATE_AVATAR, EventType::GROUP_UPDATE_NAME, EventType::GROUP_UPDATE_DESCRIPTION, EventType::GROUP_ADD_MEMBER, EventType::GROUP_CHANGE_MEMBER_ROLE, EventType::GROUP_REMOVE_MEMBER, EventType::GROUP_CHANGE_OWNER, EventType::GROUP_CHANGE_URL, EventType::GROUP_REMOVE ])) { $this->_handleGroupEvent($event); } else if (in_array($eventType, [ EventType::REPO_CREATE, EventType::REPO_FORK, EventType::REPO_UPDATE_AVATAR, EventType::REPO_UPDATE_NAME, EventType::REPO_UPDATE_DESCRIPTION, EventType::REPO_ADD_MEMBER, EventType::REPO_CHANGE_MEMBER_ROLE, EventType::REPO_REMOVE_MEMBER, EventType::REPO_CHANGE_OWNER, EventType::REPO_CHANGE_URL, EventType::REPO_REMOVE ])) { $this->_handleRepoEvent($event); } else if (in_array($eventType, [ EventType::BRANCH_CREATE, EventType::BRANCH_REMOVE, EventType::DEFAULT_BRANCH_CHANGE, EventType::PROTECTED_BRANCH_RULE_CREATE, EventType::PROTECTED_BRANCH_RULE_CHANGE, EventType::PROTECTED_BRANCH_RULE_REMOVE ])) { $this->_handleBranchEvent($event); } else if (in_array($eventType, [ EventType::TAG_CREATE, EventType::TAG_REMOVE ])) { $this->_handleTagEvent($event); } else if (in_array($eventType, [ EventType::MERGE_REQUEST_CREATE, EventType::MERGE_REQUEST_CLOSE, EventType::MERGE_REQUEST_MERGE, EventType::MERGE_REQUEST_REVIEWER_CREATE, EventType::MERGE_REQUEST_REVIEWER_DELETE, EventType::MERGE_REQUEST_REVIEWER_REVIEW ])) { $this->_handleMergeRequestEvent($event); } else if (in_array($eventType, [ EventType::WEBHOOK_CREATE, EventType::WEBHOOK_UPDATE, EventType::WEBHOOK_DELETE ])) { $this->_handleWebhookEvent($event); } } private function _handleRepositoryPushEvent(Event $event) { $matches = []; if ($event->data->name && preg_match('/refs\/(heads|tags)\/(.*)/', $event->data->name, $matches)) { $insertData = []; $insertData['a_key'] = UUID::getKey(); $insertData['u_key'] = $event->user; $insertData['a_relative_r_key'] = $event->data->rKey; $repositoryData = $this->CI->repositoryModel->get($insertData['a_relative_r_key']); $insertData['a_relative_g_key'] = $repositoryData['g_key']; if ($matches[1] === 'heads') { $insertData['a_type'] = ActivityType::BRANCH_PUSH; if ($event->data->from === '0000000000000000000000000000000000000000') { $insertData['a_type'] = ActivityType::BRANCH_PUSH_NEW; } } else if ($matches[1] === 'tags') { $insertData['a_type'] = ActivityType::TAG_PUSH; if ($event->data->from === '0000000000000000000000000000000000000000') { $insertData['a_type'] = ActivityType::TAG_PUSH_NEW; } } $insertData['a_data'] = json_encode([ 'name' => $matches[2], 'from' => $event->data->from, 'to' => $event->data->to ]); $this->CI->db->insert('activities', $insertData); $this->CI->repositoryModel->update($insertData['a_relative_r_key'], ['r_updated' => date('Y-m-d H:i:s')]); return TRUE; } } private function _handleGroupEvent(Event $event) { $eventActivityTypeMapping = [ EventType::GROUP_CREATE => ActivityType::GROUP_CREATE, EventType::GROUP_UPDATE_AVATAR => ActivityType::GROUP_UPDATE_AVATAR, EventType::GROUP_UPDATE_NAME => ActivityType::GROUP_UPDATE_NAME, EventType::GROUP_UPDATE_DESCRIPTION => ActivityType::GROUP_UPDATE_DESCRIPTION, EventType::GROUP_ADD_MEMBER => ActivityType::GROUP_ADD_MEMBER, EventType::GROUP_CHANGE_MEMBER_ROLE => ActivityType::GROUP_CHANGE_MEMBER_ROLE, EventType::GROUP_REMOVE_MEMBER => ActivityType::GROUP_REMOVE_MEMBER, EventType::GROUP_CHANGE_OWNER => ActivityType::GROUP_CHANGE_OWNER, EventType::GROUP_CHANGE_URL => ActivityType::GROUP_CHANGE_URL, EventType::GROUP_REMOVE => ActivityType::GROUP_REMOVE, ]; $insertData = []; $insertData['a_key'] = UUID::getKey(); $insertData['u_key'] = $event->user; $insertData['a_relative_r_key'] = ''; $insertData['a_relative_g_key'] = $event->data->gKey; $insertData['a_type'] = $eventActivityTypeMapping[$event->type]; if (in_array($event->type, [ EventType::GROUP_CREATE, EventType::GROUP_REMOVE ])) { $insertData['a_data'] = json_encode([ 'name' => $event->data->name ]); } else if (in_array($event->type, [ EventType::GROUP_UPDATE_AVATAR, EventType::GROUP_UPDATE_NAME ])) { $insertData['a_data'] = json_encode([ 'from' => $event->data->from, 'to' => $event->data->to ]); } else if (in_array($event->type, [ EventType::GROUP_UPDATE_AVATAR, EventType::GROUP_UPDATE_NAME, EventType::GROUP_CHANGE_URL ])) { $insertData['a_data'] = json_encode([ 'from' => $event->data->from, 'to' => $event->data->to ]); } else if (in_array($event->type, [EventType::GROUP_UPDATE_DESCRIPTION])) { $insertData['a_type'] = $eventActivityTypeMapping[$event->type]; $insertData['a_data'] = json_encode([]); } else if (in_array($event->type, [ EventType::GROUP_ADD_MEMBER, EventType::GROUP_REMOVE_MEMBER, EventType::GROUP_CHANGE_OWNER ])) { $insertData['a_type'] = $eventActivityTypeMapping[$event->type]; $insertData['a_data'] = json_encode([ 'uid' => $event->data->uid, 'name' => $event->data->name, 'email' => $event->data->email ]); } else if (in_array($event->type, [EventType::GROUP_CHANGE_MEMBER_ROLE])) { $insertData['a_type'] = $eventActivityTypeMapping[$event->type]; $insertData['a_data'] = json_encode([ 'uid' => $event->data->uid, 'name' => $event->data->name, 'email' => $event->data->email, 'to' => $event->data->to, ]); } $this->CI->db->insert('activities', $insertData); return TRUE; } private function _handleRepoEvent(Event $event) { $eventActivityTypeMapping = [ EventType::REPO_CREATE => ActivityType::REPO_CREATE, EventType::REPO_FORK => ActivityType::REPO_FORK, EventType::REPO_UPDATE_AVATAR => ActivityType::REPO_UPDATE_AVATAR, EventType::REPO_UPDATE_NAME => ActivityType::REPO_UPDATE_NAME, EventType::REPO_UPDATE_DESCRIPTION => ActivityType::REPO_UPDATE_DESCRIPTION, EventType::REPO_ADD_MEMBER => ActivityType::REPO_ADD_MEMBER, EventType::REPO_CHANGE_MEMBER_ROLE => ActivityType::REPO_CHANGE_MEMBER_ROLE, EventType::REPO_REMOVE_MEMBER => ActivityType::REPO_REMOVE_MEMBER, EventType::REPO_CHANGE_OWNER => ActivityType::REPO_CHANGE_OWNER, EventType::REPO_CHANGE_URL => ActivityType::REPO_CHANGE_URL, EventType::REPO_REMOVE => ActivityType::REPO_REMOVE ]; $insertData = []; $insertData['a_key'] = UUID::getKey(); $insertData['u_key'] = $event->user; $insertData['a_relative_r_key'] = $event->data->rKey; $insertData['a_relative_g_key'] = $event->data->gKey; if (in_array($event->type, [ EventType::REPO_CREATE, EventType::REPO_REMOVE ])) { $insertData['a_type'] = $eventActivityTypeMapping[$event->type]; $insertData['a_data'] = json_encode([ 'name' => $event->data->name ]); } else if (in_array($event->type, [EventType::REPO_FORK])) { $insertData['a_type'] = $eventActivityTypeMapping[$event->type]; $insertData['a_data'] = json_encode([ 'name' => $event->data->name, 'sourceName' => $event->data->sourceName ]); } else if (in_array($event->type, [ EventType::REPO_UPDATE_AVATAR, EventType::REPO_UPDATE_NAME, EventType::REPO_CHANGE_URL ])) { $insertData['a_type'] = $eventActivityTypeMapping[$event->type]; $insertData['a_data'] = json_encode([ 'from' => $event->data->from, 'to' => $event->data->to ]); } else if (in_array($event->type, [EventType::REPO_UPDATE_DESCRIPTION])) { $insertData['a_type'] = $eventActivityTypeMapping[$event->type]; $insertData['a_data'] = json_encode([]); } else if (in_array($event->type, [ EventType::REPO_ADD_MEMBER, EventType::REPO_REMOVE_MEMBER, EventType::REPO_CHANGE_OWNER ])) { $insertData['a_type'] = $eventActivityTypeMapping[$event->type]; $insertData['a_data'] = json_encode([ 'uid' => $event->data->uid, 'name' => $event->data->name, 'email' => $event->data->email ]); } else if (in_array($event->type, [EventType::REPO_CHANGE_MEMBER_ROLE])) { $insertData['a_type'] = $eventActivityTypeMapping[$event->type]; $insertData['a_data'] = json_encode([ 'uid' => $event->data->uid, 'name' => $event->data->name, 'email' => $event->data->email, 'to' => $event->data->to, ]); } $this->CI->db->insert('activities', $insertData); $this->CI->repositoryModel->update($event->data->rKey, ['r_updated' => date('Y-m-d H:i:s')]); return TRUE; } private function _handleBranchEvent(Event $event) { $eventActivityTypeMapping = [ EventType::BRANCH_CREATE => ActivityType::BRANCH_CREATE, EventType::BRANCH_REMOVE => ActivityType::BRANCH_REMOVE, EventType::DEFAULT_BRANCH_CHANGE => ActivityType::DEFAULT_BRANCH_CHANGE, EventType::PROTECTED_BRANCH_RULE_CREATE => ActivityType::PROTECTED_BRANCH_RULE_CREATE, EventType::PROTECTED_BRANCH_RULE_CHANGE => ActivityType::PROTECTED_BRANCH_RULE_CHANGE, EventType::PROTECTED_BRANCH_RULE_REMOVE => ActivityType::PROTECTED_BRANCH_RULE_REMOVE ]; $insertData = []; $insertData['a_key'] = UUID::getKey(); $insertData['u_key'] = $event->user; $insertData['a_relative_r_key'] = $event->data->rKey; $insertData['a_relative_g_key'] = $event->data->gKey; if (in_array($event->type, [ EventType::BRANCH_CREATE, EventType::BRANCH_REMOVE, EventType::PROTECTED_BRANCH_RULE_CREATE, EventType::PROTECTED_BRANCH_RULE_CHANGE, EventType::PROTECTED_BRANCH_RULE_REMOVE ])) { $insertData['a_type'] = $eventActivityTypeMapping[$event->type]; $insertData['a_data'] = json_encode([ 'name' => $event->data->name ]); } else if (in_array($event->type, [ EventType::DEFAULT_BRANCH_CHANGE ])) { $insertData['a_type'] = $eventActivityTypeMapping[$event->type]; $insertData['a_data'] = json_encode([ 'from' => $event->data->from, 'to' => $event->data->to ]); } $this->CI->db->insert('activities', $insertData); return TRUE; } private function _handleTagEvent(Event $event) { $eventActivityTypeMapping = [ EventType::TAG_CREATE => ActivityType::TAG_CREATE, EventType::TAG_REMOVE => ActivityType::TAG_REMOVE ]; $insertData = []; $insertData['a_key'] = UUID::getKey(); $insertData['u_key'] = $event->user; $insertData['a_relative_r_key'] = $event->data->rKey; $insertData['a_relative_g_key'] = $event->data->gKey; if (in_array($event->type, [ EventType::TAG_CREATE, EventType::TAG_REMOVE ])) { $insertData['a_type'] = $eventActivityTypeMapping[$event->type]; $insertData['a_data'] = json_encode([ 'name' => $event->data->name ]); } $this->CI->db->insert('activities', $insertData); return TRUE; } private function _handleMergeRequestEvent(Event $event) { $eventActivityTypeMapping = [ EventType::MERGE_REQUEST_CREATE => ActivityType::MERGE_REQUEST_CREATE, EventType::MERGE_REQUEST_CLOSE => ActivityType::MERGE_REQUEST_CLOSE, EventType::MERGE_REQUEST_MERGE => ActivityType::MERGE_REQUEST_MERGE, EventType::MERGE_REQUEST_REVIEWER_CREATE => ActivityType::MERGE_REQUEST_REVIEWER_CREATE, EventType::MERGE_REQUEST_REVIEWER_DELETE => ActivityType::MERGE_REQUEST_REVIEWER_DELETE, EventType::MERGE_REQUEST_REVIEWER_REVIEW => ActivityType::MERGE_REQUEST_REVIEWER_REVIEW ]; $insertData = []; $insertData['a_key'] = UUID::getKey(); $insertData['u_key'] = $event->user; $insertData['a_relative_r_key'] = $event->data->rKey; $insertData['a_relative_g_key'] = $event->data->gKey; $insertData['a_relative_mr_key'] = $event->data->mrKey; if (in_array($event->type, [ EventType::MERGE_REQUEST_CREATE, EventType::MERGE_REQUEST_CLOSE, EventType::MERGE_REQUEST_MERGE ])) { $insertData['a_type'] = $eventActivityTypeMapping[$event->type]; $insertData['a_data'] = json_encode([ 'id' => $event->data->id, 'sourceBranch' => $event->data->sourceBranch, 'targetBranch' => $event->data->targetBranch ]); } else if (in_array($event->type, [ EventType::MERGE_REQUEST_REVIEWER_CREATE ])) { $insertData['a_type'] = $eventActivityTypeMapping[$event->type]; $insertData['a_data'] = json_encode([ 'id' => $event->data->id, 'reviewer' => $event->data->reviewer, 'mrrKey' => $event->data->mrrKey ]); } else if (in_array($event->type, [ EventType::MERGE_REQUEST_REVIEWER_DELETE, EventType::MERGE_REQUEST_REVIEWER_REVIEW ])) { $insertData['a_type'] = $eventActivityTypeMapping[$event->type]; $insertData['a_data'] = json_encode([ 'id' => $event->data->id, 'reviewer' => $event->data->reviewer ]); } $this->CI->db->insert('activities', $insertData); return TRUE; } private function _handleWebhookEvent(Event $event) { $eventActivityTypeMapping = [ EventType::WEBHOOK_CREATE => ActivityType::WEBHOOK_CREATE, EventType::WEBHOOK_UPDATE => ActivityType::WEBHOOK_UPDATE, EventType::WEBHOOK_DELETE => ActivityType::WEBHOOK_DELETE ]; $insertData = []; $insertData['a_key'] = UUID::getKey(); $insertData['u_key'] = $event->user; $insertData['a_relative_r_key'] = $event->data->rKey; $insertData['a_relative_g_key'] = $event->data->gKey; if (in_array($event->type, [ EventType::WEBHOOK_CREATE, EventType::WEBHOOK_UPDATE, EventType::WEBHOOK_DELETE ])) { $insertData['a_type'] = $eventActivityTypeMapping[$event->type]; $insertData['a_data'] = json_encode([ 'rwKey' => $event->data->rwKey ]); } $this->CI->db->insert('activities', $insertData); return TRUE; } }