Refactoring to support updated b8framework.
This commit is contained in:
parent
aff5b1886e
commit
67386df9ef
|
@ -10,7 +10,8 @@
|
||||||
namespace PHPCI;
|
namespace PHPCI;
|
||||||
|
|
||||||
use b8;
|
use b8;
|
||||||
use b8\Registry;
|
use b8\Http\Response\RedirectResponse;
|
||||||
|
use b8\View;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* PHPCI Front Controller
|
* PHPCI Front Controller
|
||||||
|
@ -18,35 +19,32 @@ use b8\Registry;
|
||||||
*/
|
*/
|
||||||
class Application extends b8\Application
|
class Application extends b8\Application
|
||||||
{
|
{
|
||||||
public function __construct()
|
|
||||||
{
|
|
||||||
if (isset($_SERVER['REDIRECT_PATH_INFO'])) {
|
|
||||||
$_SERVER['REQUEST_URI'] = $_SERVER['REDIRECT_PATH_INFO'];
|
|
||||||
}
|
|
||||||
|
|
||||||
return parent::__construct();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Handle an incoming web request.
|
* Handle an incoming web request.
|
||||||
*/
|
*/
|
||||||
public function handleRequest()
|
public function handleRequest()
|
||||||
{
|
{
|
||||||
$controllerName = \b8\Registry::getInstance()->get('ControllerName');
|
// Registry legacy:
|
||||||
|
$registry = new b8\Registry($this->config, $this->request);
|
||||||
|
|
||||||
|
$this->initRequest();
|
||||||
|
|
||||||
// Validate the user's session unless it is a login/logout action or a web hook:
|
// Validate the user's session unless it is a login/logout action or a web hook:
|
||||||
$sessionAction = ($controllerName == 'Session' && in_array($this->action, array('login', 'logout')));
|
$sessionAction = ($this->controllerName == 'Session' && in_array($this->action, array('login', 'logout')));
|
||||||
$externalAction = in_array($controllerName, array('Bitbucket', 'Github', 'BuildStatus'));
|
$externalAction = in_array($this->controllerName, array('Bitbucket', 'Github', 'BuildStatus'));
|
||||||
|
$skipValidation = ($externalAction || $sessionAction);
|
||||||
if (!$externalAction && !$sessionAction) {
|
|
||||||
$this->validateSession();
|
if($skipValidation || $this->validateSession()) {
|
||||||
|
parent::handleRequest();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Render content into layout and return:
|
if (View::exists('layout') && $this->response->hasLayout()) {
|
||||||
$view = new b8\View('Layout');
|
$view = new View('layout');
|
||||||
$view->content = parent::handleRequest();
|
$view->content = $this->response->getContent();
|
||||||
|
$this->response->setContent($view->render());
|
||||||
return $view->render();
|
}
|
||||||
|
|
||||||
|
return $this->response;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -58,14 +56,21 @@ class Application extends b8\Application
|
||||||
$user = b8\Store\Factory::getStore('User')->getByPrimaryKey($_SESSION['user_id']);
|
$user = b8\Store\Factory::getStore('User')->getByPrimaryKey($_SESSION['user_id']);
|
||||||
|
|
||||||
if ($user) {
|
if ($user) {
|
||||||
Registry::getInstance()->set('user', $user);
|
$_SESSION['user'] = $user;
|
||||||
return;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
unset($_SESSION['user_id']);
|
unset($_SESSION['user_id']);
|
||||||
}
|
}
|
||||||
|
|
||||||
header('Location: /session/login');
|
if ($this->request->isAjax()) {
|
||||||
die;
|
$this->response->setResponseCode(401);
|
||||||
|
$this->response->setBody('');
|
||||||
|
} else {
|
||||||
|
$this->response = new RedirectResponse($this->response);
|
||||||
|
$this->response->setHeader('Location', '/session/login');
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
54
PHPCI/Controller.php
Normal file
54
PHPCI/Controller.php
Normal file
|
@ -0,0 +1,54 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace PHPCI;
|
||||||
|
|
||||||
|
use b8\Config;
|
||||||
|
use b8\Http\Request;
|
||||||
|
use b8\Http\Response;
|
||||||
|
use b8\View;
|
||||||
|
|
||||||
|
class Controller extends \b8\Controller
|
||||||
|
{
|
||||||
|
public function init() {}
|
||||||
|
|
||||||
|
public function __construct(Config $config, Request $request, Response $response)
|
||||||
|
{
|
||||||
|
parent::__construct($config, $request, $response);
|
||||||
|
|
||||||
|
$class = explode('\\', get_class($this));
|
||||||
|
$this->className = substr(array_pop($class), 0, -10);
|
||||||
|
$this->setControllerView();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function setControllerView()
|
||||||
|
{
|
||||||
|
if (View::exists($this->className)) {
|
||||||
|
$this->controllerView = new View($this->className);
|
||||||
|
} else {
|
||||||
|
$this->controllerView = new View\UserView('{@content}');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function setView($action)
|
||||||
|
{
|
||||||
|
if (View::exists($this->className . '/' . $action)) {
|
||||||
|
$this->view = new View($this->className . '/' . $action);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function handleAction($action, $actionParams)
|
||||||
|
{
|
||||||
|
$this->setView($action);
|
||||||
|
$response = parent::handleAction($action, $actionParams);
|
||||||
|
|
||||||
|
if (is_string($response)) {
|
||||||
|
$this->controllerView->content = $response;
|
||||||
|
} elseif (isset($this->view)) {
|
||||||
|
$this->controllerView->content = $this->view->render();
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->response->setContent($this->controllerView->render());
|
||||||
|
|
||||||
|
return $this->response;
|
||||||
|
}
|
||||||
|
}
|
|
@ -19,7 +19,7 @@ use PHPCI\Model\Build;
|
||||||
* @package PHPCI
|
* @package PHPCI
|
||||||
* @subpackage Web
|
* @subpackage Web
|
||||||
*/
|
*/
|
||||||
class BitbucketController extends b8\Controller
|
class BitbucketController extends \PHPCI\Controller
|
||||||
{
|
{
|
||||||
public function init()
|
public function init()
|
||||||
{
|
{
|
||||||
|
|
|
@ -19,7 +19,7 @@ use PHPCI\Model\Build;
|
||||||
* @package PHPCI
|
* @package PHPCI
|
||||||
* @subpackage Web
|
* @subpackage Web
|
||||||
*/
|
*/
|
||||||
class BuildController extends b8\Controller
|
class BuildController extends \PHPCI\Controller
|
||||||
{
|
{
|
||||||
public function init()
|
public function init()
|
||||||
{
|
{
|
||||||
|
@ -32,11 +32,8 @@ class BuildController extends b8\Controller
|
||||||
public function view($buildId)
|
public function view($buildId)
|
||||||
{
|
{
|
||||||
$build = $this->_buildStore->getById($buildId);
|
$build = $this->_buildStore->getById($buildId);
|
||||||
$view = new b8\View('Build');
|
$this->view->build = $build;
|
||||||
$view->build = $build;
|
$this->view->data = $this->getBuildData($buildId);
|
||||||
$view->data = $this->getBuildData($buildId);
|
|
||||||
|
|
||||||
return $view->render();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -20,7 +20,7 @@ use PHPCI\Model\Build;
|
||||||
* @package PHPCI
|
* @package PHPCI
|
||||||
* @subpackage Web
|
* @subpackage Web
|
||||||
*/
|
*/
|
||||||
class BuildStatusController extends b8\Controller
|
class BuildStatusController extends \PHPCI\Controller
|
||||||
{
|
{
|
||||||
public function init()
|
public function init()
|
||||||
{
|
{
|
||||||
|
|
|
@ -19,7 +19,7 @@ use PHPCI\Model\Build;
|
||||||
* @package PHPCI
|
* @package PHPCI
|
||||||
* @subpackage Web
|
* @subpackage Web
|
||||||
*/
|
*/
|
||||||
class GithubController extends b8\Controller
|
class GithubController extends \PHPCI\Controller
|
||||||
{
|
{
|
||||||
public function init()
|
public function init()
|
||||||
{
|
{
|
||||||
|
|
|
@ -17,7 +17,7 @@ use b8;
|
||||||
* @package PHPCI
|
* @package PHPCI
|
||||||
* @subpackage Web
|
* @subpackage Web
|
||||||
*/
|
*/
|
||||||
class IndexController extends b8\Controller
|
class IndexController extends \PHPCI\Controller
|
||||||
{
|
{
|
||||||
public function init()
|
public function init()
|
||||||
{
|
{
|
||||||
|
@ -31,11 +31,10 @@ class IndexController extends b8\Controller
|
||||||
public function index()
|
public function index()
|
||||||
{
|
{
|
||||||
$projects = $this->_projectStore->getWhere(array(), 50, 0, array(), array('title' => 'ASC'));
|
$projects = $this->_projectStore->getWhere(array(), 50, 0, array(), array('title' => 'ASC'));
|
||||||
$view = new b8\View('Index');
|
$this->view->builds = $this->getLatestBuildsHtml();
|
||||||
$view->builds = $this->getLatestBuildsHtml();
|
$this->view->projects = $projects['items'];
|
||||||
$view->projects = $projects['items'];
|
|
||||||
|
|
||||||
return $view->render();
|
return $this->view->render();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -9,9 +9,11 @@
|
||||||
|
|
||||||
namespace PHPCI\Controller;
|
namespace PHPCI\Controller;
|
||||||
|
|
||||||
use b8;
|
|
||||||
use PHPCI\Model\Build;
|
use PHPCI\Model\Build;
|
||||||
use PHPCI\Model\Project;
|
use PHPCI\Model\Project;
|
||||||
|
use b8;
|
||||||
|
use b8\Controller;
|
||||||
|
use b8\Store;
|
||||||
use b8\Form;
|
use b8\Form;
|
||||||
use b8\Registry;
|
use b8\Registry;
|
||||||
|
|
||||||
|
@ -21,12 +23,12 @@ use b8\Registry;
|
||||||
* @package PHPCI
|
* @package PHPCI
|
||||||
* @subpackage Web
|
* @subpackage Web
|
||||||
*/
|
*/
|
||||||
class ProjectController extends b8\Controller
|
class ProjectController extends \PHPCI\Controller
|
||||||
{
|
{
|
||||||
public function init()
|
public function init()
|
||||||
{
|
{
|
||||||
$this->_buildStore = b8\Store\Factory::getStore('Build');
|
$this->_buildStore = Store\Factory::getStore('Build');
|
||||||
$this->_projectStore = b8\Store\Factory::getStore('Project');
|
$this->_projectStore = Store\Factory::getStore('Project');
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -38,13 +40,12 @@ class ProjectController extends b8\Controller
|
||||||
$page = $this->getParam('p', 1);
|
$page = $this->getParam('p', 1);
|
||||||
$builds = $this->getLatestBuildsHtml($projectId, (($page - 1) * 10));
|
$builds = $this->getLatestBuildsHtml($projectId, (($page - 1) * 10));
|
||||||
|
|
||||||
$view = new b8\View('Project');
|
$this->view->builds = $builds[0];
|
||||||
$view->builds = $builds[0];
|
$this->view->total = $builds[1];
|
||||||
$view->total = $builds[1];
|
$this->view->project = $project;
|
||||||
$view->project = $project;
|
$this->view->page = $page;
|
||||||
$view->page = $page;
|
|
||||||
|
|
||||||
return $view->render();
|
return $this->view->render();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -69,7 +70,7 @@ class ProjectController extends b8\Controller
|
||||||
*/
|
*/
|
||||||
public function delete($projectId)
|
public function delete($projectId)
|
||||||
{
|
{
|
||||||
if (!Registry::getInstance()->get('user')->getIsAdmin()) {
|
if (!$_SESSION['user']->getIsAdmin()) {
|
||||||
throw new \Exception('You do not have permission to do that.');
|
throw new \Exception('You do not have permission to do that.');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -107,11 +108,11 @@ class ProjectController extends b8\Controller
|
||||||
*/
|
*/
|
||||||
public function add()
|
public function add()
|
||||||
{
|
{
|
||||||
if (!Registry::getInstance()->get('user')->getIsAdmin()) {
|
if (!$_SESSION['user']->getIsAdmin()) {
|
||||||
throw new \Exception('You do not have permission to do that.');
|
throw new \Exception('You do not have permission to do that.');
|
||||||
}
|
}
|
||||||
|
|
||||||
$method = Registry::getInstance()->get('requestMethod');
|
$method = $this->request->getMethod();
|
||||||
$this->handleGithubResponse();
|
$this->handleGithubResponse();
|
||||||
|
|
||||||
if ($method == 'POST') {
|
if ($method == 'POST') {
|
||||||
|
@ -199,11 +200,11 @@ class ProjectController extends b8\Controller
|
||||||
*/
|
*/
|
||||||
public function edit($projectId)
|
public function edit($projectId)
|
||||||
{
|
{
|
||||||
if (!Registry::getInstance()->get('user')->getIsAdmin()) {
|
if (!$_SESSION['user']->getIsAdmin()) {
|
||||||
throw new \Exception('You do not have permission to do that.');
|
throw new \Exception('You do not have permission to do that.');
|
||||||
}
|
}
|
||||||
|
|
||||||
$method = Registry::getInstance()->get('requestMethod');
|
$method = $this->request->getMethod();
|
||||||
$project = $this->_projectStore->getById($projectId);
|
$project = $this->_projectStore->getById($projectId);
|
||||||
|
|
||||||
if ($method == 'POST') {
|
if ($method == 'POST') {
|
||||||
|
|
|
@ -17,10 +17,11 @@ use b8;
|
||||||
* @package PHPCI
|
* @package PHPCI
|
||||||
* @subpackage Web
|
* @subpackage Web
|
||||||
*/
|
*/
|
||||||
class SessionController extends b8\Controller
|
class SessionController extends \PHPCI\Controller
|
||||||
{
|
{
|
||||||
public function init()
|
public function init()
|
||||||
{
|
{
|
||||||
|
$this->response->disableLayout();
|
||||||
$this->_userStore = b8\Store\Factory::getStore('User');
|
$this->_userStore = b8\Store\Factory::getStore('User');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -28,10 +29,10 @@ class SessionController extends b8\Controller
|
||||||
* Handles user login (form and processing)
|
* Handles user login (form and processing)
|
||||||
*/
|
*/
|
||||||
public function login()
|
public function login()
|
||||||
{
|
{
|
||||||
if (b8\Registry::getInstance()->get('requestMethod') == 'POST') {
|
if ($this->request->getMethod() == 'POST') {
|
||||||
$user = $this->_userStore->getByEmail($this->getParam('email'));
|
$user = $this->_userStore->getByEmail($this->getParam('email'));
|
||||||
|
|
||||||
if ($user && password_verify($this->getParam('password', ''), $user->getHash())) {
|
if ($user && password_verify($this->getParam('password', ''), $user->getHash())) {
|
||||||
$_SESSION['user_id'] = $user->getId();
|
$_SESSION['user_id'] = $user->getId();
|
||||||
header('Location: ' . PHPCI_URL);
|
header('Location: ' . PHPCI_URL);
|
||||||
|
@ -60,9 +61,9 @@ class SessionController extends b8\Controller
|
||||||
$pwd->setClass('btn-success');
|
$pwd->setClass('btn-success');
|
||||||
$form->addField($pwd);
|
$form->addField($pwd);
|
||||||
|
|
||||||
$view = new b8\View('Login');
|
$this->view->form = $form->render();
|
||||||
$view->form = $form->render();
|
|
||||||
die($view->render());
|
return $this->view->render();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -20,7 +20,7 @@ use b8\Form;
|
||||||
* @package PHPCI
|
* @package PHPCI
|
||||||
* @subpackage Web
|
* @subpackage Web
|
||||||
*/
|
*/
|
||||||
class UserController extends b8\Controller
|
class UserController extends \PHPCI\Controller
|
||||||
{
|
{
|
||||||
public function init()
|
public function init()
|
||||||
{
|
{
|
||||||
|
@ -33,10 +33,9 @@ class UserController extends b8\Controller
|
||||||
public function index()
|
public function index()
|
||||||
{
|
{
|
||||||
$users = $this->_userStore->getWhere(array(), 1000, 0, array(), array('email' => 'ASC'));
|
$users = $this->_userStore->getWhere(array(), 1000, 0, array(), array('email' => 'ASC'));
|
||||||
$view = new b8\View('User');
|
$this->view->users = $users;
|
||||||
$view->users = $users;
|
|
||||||
|
|
||||||
return $view->render();
|
return $this->view->render();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -44,11 +43,11 @@ class UserController extends b8\Controller
|
||||||
*/
|
*/
|
||||||
public function add()
|
public function add()
|
||||||
{
|
{
|
||||||
if (!Registry::getInstance()->get('user')->getIsAdmin()) {
|
if (!$_SESSION['user']->getIsAdmin()) {
|
||||||
throw new \Exception('You do not have permission to do that.');
|
throw new \Exception('You do not have permission to do that.');
|
||||||
}
|
}
|
||||||
|
|
||||||
$method = Registry::getInstance()->get('requestMethod');
|
$method = $this->request->getMethod();
|
||||||
|
|
||||||
if ($method == 'POST') {
|
if ($method == 'POST') {
|
||||||
$values = $this->getParams();
|
$values = $this->getParams();
|
||||||
|
@ -85,11 +84,11 @@ class UserController extends b8\Controller
|
||||||
*/
|
*/
|
||||||
public function edit($userId)
|
public function edit($userId)
|
||||||
{
|
{
|
||||||
if (!Registry::getInstance()->get('user')->getIsAdmin()) {
|
if (!$_SESSION['user']->getIsAdmin()) {
|
||||||
throw new \Exception('You do not have permission to do that.');
|
throw new \Exception('You do not have permission to do that.');
|
||||||
}
|
}
|
||||||
|
|
||||||
$method = Registry::getInstance()->get('requestMethod');
|
$method = $this->request->getMethod();
|
||||||
$user = $this->_userStore->getById($userId);
|
$user = $this->_userStore->getById($userId);
|
||||||
|
|
||||||
if ($method == 'POST') {
|
if ($method == 'POST') {
|
||||||
|
@ -172,7 +171,7 @@ class UserController extends b8\Controller
|
||||||
*/
|
*/
|
||||||
public function delete($userId)
|
public function delete($userId)
|
||||||
{
|
{
|
||||||
if (!Registry::getInstance()->get('user')->getIsAdmin()) {
|
if (!$_SESSION['user']->getIsAdmin()) {
|
||||||
throw new \Exception('You do not have permission to do that.');
|
throw new \Exception('You do not have permission to do that.');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -19,7 +19,7 @@ class User
|
||||||
{
|
{
|
||||||
public function __call($method, $params = array())
|
public function __call($method, $params = array())
|
||||||
{
|
{
|
||||||
$user = \b8\Registry::getInstance()->get('user');
|
$user = $_SESSION['user'];
|
||||||
return call_user_func_array(array($user, $method), $params);
|
return call_user_func_array(array($user, $method), $params);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -101,7 +101,7 @@ class BuildBase extends Model
|
||||||
'length' => '4',
|
'length' => '4',
|
||||||
),
|
),
|
||||||
'log' => array(
|
'log' => array(
|
||||||
'type' => 'text',
|
'type' => 'longtext',
|
||||||
'length' => '',
|
'length' => '',
|
||||||
'nullable' => true,
|
'nullable' => true,
|
||||||
),
|
),
|
||||||
|
@ -500,11 +500,11 @@ class BuildBase extends Model
|
||||||
}
|
}
|
||||||
|
|
||||||
$cacheKey = 'Cache.Project.' . $key;
|
$cacheKey = 'Cache.Project.' . $key;
|
||||||
$rtn = $this->registry->get($cacheKey, null);
|
$rtn = $this->cache->get($cacheKey, null);
|
||||||
|
|
||||||
if (empty($rtn)) {
|
if (empty($rtn)) {
|
||||||
$rtn = \b8\Store\Factory::getStore('Project')->getById($key);
|
$rtn = \b8\Store\Factory::getStore('Project')->getById($key);
|
||||||
$this->registry->set($cacheKey, $rtn);
|
$this->cache->set($cacheKey, $rtn);
|
||||||
}
|
}
|
||||||
|
|
||||||
return $rtn;
|
return $rtn;
|
||||||
|
|
|
@ -36,16 +36,18 @@ if (!defined('APPLICATION_PATH')) {
|
||||||
require_once(APPLICATION_PATH . 'vendor/autoload.php');
|
require_once(APPLICATION_PATH . 'vendor/autoload.php');
|
||||||
|
|
||||||
// Load configuration if present:
|
// Load configuration if present:
|
||||||
|
$config = new b8\Config();
|
||||||
|
|
||||||
if (file_exists(APPLICATION_PATH . 'config.php')) {
|
if (file_exists(APPLICATION_PATH . 'config.php')) {
|
||||||
require(APPLICATION_PATH . 'config.php');
|
require(APPLICATION_PATH . 'config.php');
|
||||||
|
|
||||||
// Define our PHPCI_URL, if not already defined:
|
// Define our PHPCI_URL, if not already defined:
|
||||||
if (!defined('PHPCI_URL')) {
|
if (!defined('PHPCI_URL')) {
|
||||||
define('PHPCI_URL', $registry->get('install_url', '') . '/');
|
define('PHPCI_URL', $config->get('install_url', '') . '/');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set up the registry:
|
// Set up the registry:
|
||||||
b8\Registry::getInstance()->set('app_namespace', 'PHPCI');
|
$config->set('app_namespace', 'PHPCI');
|
||||||
b8\Registry::getInstance()->set('DefaultController', 'Index');
|
$config->set('default_controller', 'Index');
|
||||||
b8\Registry::getInstance()->set('ViewPath', dirname(__FILE__) . '/PHPCI/View/');
|
$config->set('view_path', dirname(__FILE__) . '/PHPCI/View/');
|
|
@ -9,7 +9,10 @@
|
||||||
|
|
||||||
session_start();
|
session_start();
|
||||||
|
|
||||||
|
error_reporting(E_ALL);
|
||||||
|
ini_set('display_errors', 'on');
|
||||||
|
|
||||||
require_once('bootstrap.php');
|
require_once('bootstrap.php');
|
||||||
|
|
||||||
$fc = new PHPCI\Application();
|
$fc = new PHPCI\Application(b8\Config::getInstance());
|
||||||
print $fc->handleRequest();
|
print $fc->handleRequest();
|
||||||
|
|
Loading…
Reference in a new issue