Skip to content
Snippets Groups Projects
Commit a9e29e9d authored by Nick Barry's avatar Nick Barry
Browse files

Merge branch 'projects-task-9' into 'master'

parents 9227ec71 ef65de78
Branches
No related tags found
No related merge requests found
...@@ -41,6 +41,23 @@ class Bulletin_NewController extends Creq_Controller_Action ...@@ -41,6 +41,23 @@ class Bulletin_NewController extends Creq_Controller_Action
$this->redirect('/bulletin/new'); $this->redirect('/bulletin/new');
} }
$allRequests = Bulletin_SectionModel::findAllRequestsByCollegeAndMajorId($in['college'], $in['major']);
foreach ($allRequests as $request) {
$pullRequestNumber = $request->getPullRequestNumber();
// Make sure we have a number and not NULL
if (is_int($pullRequestNumber) && intval($pullRequestNumber) > 0){
$merged = Bulletin_RepositoryModel::getInstance()->pullRequestHasBeenMerged(intval($pullRequestNumber));
if ($merged == false) {
$this->_helper->getHelper('FlashMessenger')->addMessage(
"There is a pending request for that college/major. Please wait until the request is finalized before creating a new request.<br/>Merge Request: $pullRequestNumber"
);
$this->redirect('/bulletin/new');
}
}
}
$request = Requests_RequestModel::fetchNew(); $request = Requests_RequestModel::fetchNew();
$request->setType('BulletinEdit'); $request->setType('BulletinEdit');
$request->setModule('bulletin'); $request->setModule('bulletin');
......
...@@ -111,8 +111,11 @@ class Bulletin_ApprovalActionPullRequestModel extends Requests_ApprovalActionMod ...@@ -111,8 +111,11 @@ class Bulletin_ApprovalActionPullRequestModel extends Requests_ApprovalActionMod
Bulletin_RepositoryModel::getInstance()->pullRequest( Bulletin_RepositoryModel::getInstance()->pullRequest(
$branch, $branch,
'Finalize Request #' . $request->getId(), 'Finalize Request #' . $request->getId(),
$request->getJustification() $request->getJustification(),
$pullRequestNumber
); );
$this->setPullRequestNumber($request->getId(), $pullRequestNumber);
} }
Requests_ApprovalChainModel::advance($requests); Requests_ApprovalChainModel::advance($requests);
...@@ -129,4 +132,20 @@ class Bulletin_ApprovalActionPullRequestModel extends Requests_ApprovalActionMod ...@@ -129,4 +132,20 @@ class Bulletin_ApprovalActionPullRequestModel extends Requests_ApprovalActionMod
// Don't do anything here, this is an automated action. // Don't do anything here, this is an automated action.
} }
private function setPullRequestNumber($requestId, $pullRequestNumber)
{
$safeRequestId = intval($requestId);
$safePullRequestNumber = intval($pullRequestNumber);
if ($safePullRequestNumber > 0) {
$data = array(
'pullRequestNumber' => $safePullRequestNumber
);
$where = "requestId = '$safeRequestId'";
$db = Zend_Registry::get('db');
$db->update('creqRequests', $data, $where);
}
}
} }
...@@ -211,7 +211,7 @@ class Bulletin_RepositoryModel ...@@ -211,7 +211,7 @@ class Bulletin_RepositoryModel
$this->_git_exec('push origin --all'); $this->_git_exec('push origin --all');
} }
public function pullRequest($branch, $title, $body = '') public function pullRequest($branch, $title, $body = '', &$pullRequestNumber = -1)
{ {
$remotePath = explode('/', parse_url($this->_options['github']['upstream'], PHP_URL_PATH)); $remotePath = explode('/', parse_url($this->_options['github']['upstream'], PHP_URL_PATH));
$remoteHost = parse_url($this->_options['github']['upstream'], PHP_URL_HOST); $remoteHost = parse_url($this->_options['github']['upstream'], PHP_URL_HOST);
...@@ -243,6 +243,9 @@ class Bulletin_RepositoryModel ...@@ -243,6 +243,9 @@ class Bulletin_RepositoryModel
$http->request(); $http->request();
if ($http->getLastResponse()->getStatus() == 201) { if ($http->getLastResponse()->getStatus() == 201) {
$response = json_decode($http->getLastResponse()->getBody(), true);
$pullRequestNumber = $response['number'];
return $http->getLastResponse()->getHeader('Location'); return $http->getLastResponse()->getHeader('Location');
} }
print_r($http->getLastResponse()); exit; print_r($http->getLastResponse()); exit;
...@@ -310,4 +313,35 @@ class Bulletin_RepositoryModel ...@@ -310,4 +313,35 @@ class Bulletin_RepositoryModel
} }
return $path; return $path;
} }
/**
* Checks if a pull request has been merged
* @param $requestNumber Int Pull request number to check
* @return bool TRUE if merged, FALSE otherwise
*/
public function pullRequestHasBeenMerged($requestNumber)
{
$remotePath = explode('/', parse_url($this->_options['github']['upstream'], PHP_URL_PATH));
$remoteHost = parse_url($this->_options['github']['upstream'], PHP_URL_HOST);
$remoteUser = $remotePath[1];
$remoteRepo = basename($remotePath[2], '.git');
$requestNumber = intval($requestNumber);
$uri = 'https://api.' . $remoteHost . '/repos/' . $remoteUser . '/' . $remoteRepo . '/pulls/' . $requestNumber;
$http = new Zend_Http_Client();
$http->setUri($uri);
$http->setMethod(Zend_Http_Client::GET);
$http->request();
if ($http->getLastResponse()->getStatus() == 200) {
$response = json_decode($http->getLastResponse()->getBody(), true);
$status = $response['state'];
if ($status === "closed") {
return true;
}
}
return false;
}
} }
...@@ -576,7 +576,8 @@ class Requests_RequestModel extends Unl_Model ...@@ -576,7 +576,8 @@ class Requests_RequestModel extends Unl_Model
. $db->quoteInto('?, ' , $model->_data['state']) . $db->quoteInto('?, ' , $model->_data['state'])
. $db->quoteInto('?, ' , $model->_data['submitterAttentionRequired']) . $db->quoteInto('?, ' , $model->_data['submitterAttentionRequired'])
. $db->quoteInto('?, ' , self::_getTypeIdFromName($model->_data['type'])) . $db->quoteInto('?, ' , self::_getTypeIdFromName($model->_data['type']))
. $db->quoteInto('?)' , $model->_data['complete']); . $db->quoteInto('?, ' , $model->_data['complete'])
. 'NULL)';
} }
$sql .= implode(', ', $sqlParts); $sql .= implode(', ', $sqlParts);
$db->query($sql); $db->query($sql);
...@@ -590,7 +591,8 @@ class Requests_RequestModel extends Unl_Model ...@@ -590,7 +591,8 @@ class Requests_RequestModel extends Unl_Model
. ' a.state = b.state, ' . ' a.state = b.state, '
. ' a.submitterAttentionRequired = b.submitterAttentionRequired, ' . ' a.submitterAttentionRequired = b.submitterAttentionRequired, '
. ' a.type = b.type, ' . ' a.type = b.type, '
. ' a.complete = b.complete ' . ' a.complete = b.complete, '
. ' a.pullRequestNumber = b.pullRequestNumber '
. 'WHERE a.requestId = b.requestId '; . 'WHERE a.requestId = b.requestId ';
$db->query($sql); $db->query($sql);
$db->query('DROP TABLE creqRequestsUpdate'); $db->query('DROP TABLE creqRequestsUpdate');
...@@ -1157,4 +1159,9 @@ class Requests_RequestModel extends Unl_Model ...@@ -1157,4 +1159,9 @@ class Requests_RequestModel extends Unl_Model
return true; return true;
} }
public function getPullRequestNumber()
{
return $this->_data['pullRequestNumber'];
}
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment