Merge branch 'feature-improvements'

This commit is contained in:
Dmitry Khomutov 2017-01-07 11:52:52 +07:00
commit 2ecd4ff2f7
47 changed files with 989 additions and 1271 deletions

View file

@ -1,7 +1,7 @@
PHP Censor Copyright (c) 2016, Corpsee
Copyright (c) 2016, PHP Censor
All rights reserved.
PHPCI Copyright (c) 2013, Block 8 Limited
Copyright (c) 2013, PHPCI, Block 8 Limited
All rights reserved.
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

View file

@ -23,7 +23,7 @@ More [screenshots](docs/en/screenshots.md).
Configuring
-----------
Similar to Travis CI, to support **PHP Censor** in your project, you simply need to add a `.php-censor.yml`
Similar to [TravisCI](https://travis-ci.org), to support PHP Censor in your project, you simply need to add a `.php-censor.yml`
(`phpci.yml`/`.phpci.yml` for backward compatibility with PHPCI) file to the root of your repository. The file should
look something like this:
@ -124,4 +124,4 @@ Documentation
License
-------
*PHP Censor* is open source software licensed under the [BSD-2-Clause license](LICENSE.md).
PHP Censor is open source software licensed under the [BSD-2-Clause license](LICENSE.md).

View file

@ -1,14 +1,14 @@
{
"name": "corpsee/php-censor",
"description": "Simple continuous integration for PHP projects. PHPCI fork.",
"description": "PHP Censor is a fork of PHPCI and is a open source continuous integration tool specifically designed for PHP",
"minimum-stability": "stable",
"type": "library",
"type": "application",
"keywords": ["php", "php-censor", "ci", "continuous integration"],
"homepage": "https://github.com/corpsee/php-censor",
"license": "BSD-2-Clause",
"authors": [
{
"name": "Corpsee",
"name": "Dmitry Khomutov",
"email": "poisoncorpsee@gmail.com",
"homepage": "http://corpsee.com",
"role": "PHP Censor developer"
@ -37,7 +37,7 @@
}
},
"require": {
"php": ">=5.4.0",
"php": ">=5.6.0",
"ext-pdo": "*",
"ext-pdo_mysql": "*",

17
composer.lock generated
View file

@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
"This file is @generated automatically"
],
"content-hash": "813fe1e7b00edc029b1137481591822c",
"content-hash": "0a4b95103fb8aa05e609a2a7f5997214",
"packages": [
{
"name": "bower-asset/admin-lte",
@ -521,23 +521,24 @@
},
{
"name": "swiftmailer/swiftmailer",
"version": "v5.4.4",
"version": "v5.4.5",
"source": {
"type": "git",
"url": "https://github.com/swiftmailer/swiftmailer.git",
"reference": "545ce9136690cea74f98f86fbb9c92dd9ab1a756"
"reference": "cd142238a339459b10da3d8234220963f392540c"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/545ce9136690cea74f98f86fbb9c92dd9ab1a756",
"reference": "545ce9136690cea74f98f86fbb9c92dd9ab1a756",
"url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/cd142238a339459b10da3d8234220963f392540c",
"reference": "cd142238a339459b10da3d8234220963f392540c",
"shasum": ""
},
"require": {
"php": ">=5.3.3"
},
"require-dev": {
"mockery/mockery": "~0.9.1"
"mockery/mockery": "~0.9.1",
"symfony/phpunit-bridge": "~3.2"
},
"type": "library",
"extra": {
@ -570,7 +571,7 @@
"mail",
"mailer"
],
"time": "2016-11-24T01:01:23+00:00"
"time": "2016-12-29T10:02:40+00:00"
},
{
"name": "symfony/config",
@ -2588,7 +2589,7 @@
"prefer-stable": false,
"prefer-lowest": false,
"platform": {
"php": ">=5.4.0",
"php": ">=5.6.0",
"ext-pdo": "*",
"ext-pdo_mysql": "*"
},

View file

@ -10,7 +10,7 @@ Configuration
* **config** - Required - Can be either a single string pointing to a Codeception configuration file, or an array of configuration file paths. By default this is called `codeception.yml` and will be in the root of your project.
* **args** - Optional - The string of arguments to be passed to the run command.**Important**, due to the assumption made on line [132](https://github.com/Block8/PHPCI/blob/master/PHPCI/Plugin/Codeception.php#L132) regarding the value of `--xml` being the next argument which will not be correct if the user provides arguments using this config param, you must specify `report.xml` before any user input arguments to satisfy the report processing on line [146](https://github.com/Block8/PHPCI/blob/master/PHPCI/Plugin/Codeception.php#L146)
* **args** - Optional - The string of arguments to be passed to the run command.**Important**, due to the assumption made on line 132 regarding the value of `--xml` being the next argument which will not be correct if the user provides arguments using this config param, you must specify `report.xml` before any user input arguments to satisfy the report processing on line 146.
* **path** - Optional - The path from the root of your project to the root of the codeception _output directory

View file

@ -1,814 +0,0 @@
/*
* Skin: Blue
* ----------
*/
.skin-blue .main-header .navbar {
background-color: #3c8dbc;
}
.skin-blue .main-header .navbar .nav > li > a {
color: #ffffff;
}
.skin-blue .main-header .navbar .nav > li > a:hover,
.skin-blue .main-header .navbar .nav > li > a:active,
.skin-blue .main-header .navbar .nav > li > a:focus,
.skin-blue .main-header .navbar .nav .open > a,
.skin-blue .main-header .navbar .nav .open > a:hover,
.skin-blue .main-header .navbar .nav .open > a:focus,
.skin-blue .main-header .navbar .nav > .active > a {
background: rgba(0, 0, 0, 0.1);
color: #f6f6f6;
}
.skin-blue .main-header .navbar .sidebar-toggle {
color: #ffffff;
}
.skin-blue .main-header .navbar .sidebar-toggle:hover {
color: #f6f6f6;
background: rgba(0, 0, 0, 0.1);
}
.skin-blue .main-header .navbar .sidebar-toggle {
color: #fff;
}
.skin-blue .main-header .navbar .sidebar-toggle:hover {
background-color: #367fa9;
}
@media (max-width: 767px) {
.skin-blue .main-header .navbar .dropdown-menu li.divider {
background-color: rgba(255, 255, 255, 0.1);
}
.skin-blue .main-header .navbar .dropdown-menu li a {
color: #fff;
}
.skin-blue .main-header .navbar .dropdown-menu li a:hover {
background: #367fa9;
}
}
.skin-blue .main-header .logo {
background-color: #367fa9;
color: #ffffff;
border-bottom: 0 solid transparent;
}
.skin-blue .main-header .logo:hover {
background-color: #357ca5;
}
.skin-blue .main-header li.user-header {
background-color: #3c8dbc;
}
.skin-blue .content-header {
background: transparent;
}
.skin-blue .wrapper,
.skin-blue .main-sidebar,
.skin-blue .left-side {
background-color: #222d32;
}
.skin-blue .user-panel > .info,
.skin-blue .user-panel > .info > a {
color: #fff;
}
.skin-blue .sidebar-menu > li.header {
color: #4b646f;
background: #1a2226;
}
.skin-blue .sidebar-menu > li > a {
border-left: 3px solid transparent;
}
.skin-blue .sidebar-menu > li:hover > a,
.skin-blue .sidebar-menu > li.active > a {
color: #ffffff;
background: #1e282c;
border-left-color: #3c8dbc;
}
.skin-blue .sidebar-menu > li > .treeview-menu {
margin: 0 1px;
background: #2c3b41;
}
.skin-blue .sidebar a {
color: #b8c7ce;
}
.skin-blue .sidebar a:hover {
text-decoration: none;
}
.skin-blue .treeview-menu > li > a {
color: #8aa4af;
}
.skin-blue .treeview-menu > li.active > a,
.skin-blue .treeview-menu > li > a:hover {
color: #ffffff;
}
.skin-blue .sidebar-form {
border-radius: 3px;
border: 1px solid #374850;
margin: 10px 10px;
}
.skin-blue .sidebar-form input[type="text"],
.skin-blue .sidebar-form .btn {
box-shadow: none;
background-color: #374850;
border: 1px solid transparent;
height: 35px;
}
.skin-blue .sidebar-form input[type="text"] {
color: #666;
border-top-left-radius: 2px;
border-top-right-radius: 0;
border-bottom-right-radius: 0;
border-bottom-left-radius: 2px;
}
.skin-blue .sidebar-form input[type="text"]:focus,
.skin-blue .sidebar-form input[type="text"]:focus + .input-group-btn .btn {
background-color: #fff;
color: #666;
}
.skin-blue .sidebar-form input[type="text"]:focus + .input-group-btn .btn {
border-left-color: #fff;
}
.skin-blue .sidebar-form .btn {
color: #999;
border-top-left-radius: 0;
border-top-right-radius: 2px;
border-bottom-right-radius: 2px;
border-bottom-left-radius: 0;
}
.skin-blue.layout-top-nav .main-header > .logo {
background-color: #3c8dbc;
color: #ffffff;
border-bottom: 0 solid transparent;
}
.skin-blue.layout-top-nav .main-header > .logo:hover {
background-color: #3b8ab8;
}
/*
* Skin: Green
* -----------
*/
.skin-green .main-header .navbar {
background-color: #00a65a;
}
.skin-green .main-header .navbar .nav > li > a {
color: #ffffff;
}
.skin-green .main-header .navbar .nav > li > a:hover,
.skin-green .main-header .navbar .nav > li > a:active,
.skin-green .main-header .navbar .nav > li > a:focus,
.skin-green .main-header .navbar .nav .open > a,
.skin-green .main-header .navbar .nav .open > a:hover,
.skin-green .main-header .navbar .nav .open > a:focus,
.skin-green .main-header .navbar .nav > .active > a {
background: rgba(0, 0, 0, 0.1);
color: #f6f6f6;
}
.skin-green .main-header .navbar .sidebar-toggle {
color: #ffffff;
}
.skin-green .main-header .navbar .sidebar-toggle:hover {
color: #f6f6f6;
background: rgba(0, 0, 0, 0.1);
}
.skin-green .main-header .navbar .sidebar-toggle {
color: #fff;
}
.skin-green .main-header .navbar .sidebar-toggle:hover {
background-color: #008d4c;
}
@media (max-width: 767px) {
.skin-green .main-header .navbar .dropdown-menu li.divider {
background-color: rgba(255, 255, 255, 0.1);
}
.skin-green .main-header .navbar .dropdown-menu li a {
color: #fff;
}
.skin-green .main-header .navbar .dropdown-menu li a:hover {
background: #008d4c;
}
}
.skin-green .main-header .logo {
background-color: #008d4c;
color: #ffffff;
border-bottom: 0 solid transparent;
}
.skin-green .main-header .logo:hover {
background-color: #008749;
}
.skin-green .main-header li.user-header {
background-color: #00a65a;
}
.skin-green .content-header {
background: transparent;
}
.skin-green .wrapper,
.skin-green .main-sidebar,
.skin-green .left-side {
background-color: #222d32;
}
.skin-green .user-panel > .info,
.skin-green .user-panel > .info > a {
color: #fff;
}
.skin-green .sidebar-menu > li.header {
color: #4b646f;
background: #1a2226;
}
.skin-green .sidebar-menu > li > a {
border-left: 3px solid transparent;
}
.skin-green .sidebar-menu > li:hover > a,
.skin-green .sidebar-menu > li.active > a {
color: #ffffff;
background: #1e282c;
border-left-color: #00a65a;
}
.skin-green .sidebar-menu > li > .treeview-menu {
margin: 0 1px;
background: #2c3b41;
}
.skin-green .sidebar a {
color: #b8c7ce;
}
.skin-green .sidebar a:hover {
text-decoration: none;
}
.skin-green .treeview-menu > li > a {
color: #8aa4af;
}
.skin-green .treeview-menu > li.active > a,
.skin-green .treeview-menu > li > a:hover {
color: #ffffff;
}
.skin-green .sidebar-form {
border-radius: 3px;
border: 1px solid #374850;
margin: 10px 10px;
}
.skin-green .sidebar-form input[type="text"],
.skin-green .sidebar-form .btn {
box-shadow: none;
background-color: #374850;
border: 1px solid transparent;
height: 35px;
}
.skin-green .sidebar-form input[type="text"] {
color: #666;
border-top-left-radius: 2px;
border-top-right-radius: 0;
border-bottom-right-radius: 0;
border-bottom-left-radius: 2px;
}
.skin-green .sidebar-form input[type="text"]:focus,
.skin-green .sidebar-form input[type="text"]:focus + .input-group-btn .btn {
background-color: #fff;
color: #666;
}
.skin-green .sidebar-form input[type="text"]:focus + .input-group-btn .btn {
border-left-color: #fff;
}
.skin-green .sidebar-form .btn {
color: #999;
border-top-left-radius: 0;
border-top-right-radius: 2px;
border-bottom-right-radius: 2px;
border-bottom-left-radius: 0;
}
/*
* Skin: Red
* ---------
*/
.skin-red .main-header .navbar {
background-color: #dd4b39;
}
.skin-red .main-header .navbar .nav > li > a {
color: #ffffff;
}
.skin-red .main-header .navbar .nav > li > a:hover,
.skin-red .main-header .navbar .nav > li > a:active,
.skin-red .main-header .navbar .nav > li > a:focus,
.skin-red .main-header .navbar .nav .open > a,
.skin-red .main-header .navbar .nav .open > a:hover,
.skin-red .main-header .navbar .nav .open > a:focus,
.skin-red .main-header .navbar .nav > .active > a {
background: rgba(0, 0, 0, 0.1);
color: #f6f6f6;
}
.skin-red .main-header .navbar .sidebar-toggle {
color: #ffffff;
}
.skin-red .main-header .navbar .sidebar-toggle:hover {
color: #f6f6f6;
background: rgba(0, 0, 0, 0.1);
}
.skin-red .main-header .navbar .sidebar-toggle {
color: #fff;
}
.skin-red .main-header .navbar .sidebar-toggle:hover {
background-color: #d73925;
}
@media (max-width: 767px) {
.skin-red .main-header .navbar .dropdown-menu li.divider {
background-color: rgba(255, 255, 255, 0.1);
}
.skin-red .main-header .navbar .dropdown-menu li a {
color: #fff;
}
.skin-red .main-header .navbar .dropdown-menu li a:hover {
background: #d73925;
}
}
.skin-red .main-header .logo {
background-color: #d73925;
color: #ffffff;
border-bottom: 0 solid transparent;
}
.skin-red .main-header .logo:hover {
background-color: #d33724;
}
.skin-red .main-header li.user-header {
background-color: #dd4b39;
}
.skin-red .content-header {
background: transparent;
}
.skin-red .wrapper,
.skin-red .main-sidebar,
.skin-red .left-side {
background-color: #222d32;
}
.skin-red .user-panel > .info,
.skin-red .user-panel > .info > a {
color: #fff;
}
.skin-red .sidebar-menu > li.header {
color: #4b646f;
background: #1a2226;
}
.skin-red .sidebar-menu > li > a {
border-left: 3px solid transparent;
}
.skin-red .sidebar-menu > li:hover > a,
.skin-red .sidebar-menu > li.active > a {
color: #ffffff;
background: #1e282c;
border-left-color: #dd4b39;
}
.skin-red .sidebar-menu > li > .treeview-menu {
margin: 0 1px;
background: #2c3b41;
}
.skin-red .sidebar a {
color: #b8c7ce;
}
.skin-red .sidebar a:hover {
text-decoration: none;
}
.skin-red .treeview-menu > li > a {
color: #8aa4af;
}
.skin-red .treeview-menu > li.active > a,
.skin-red .treeview-menu > li > a:hover {
color: #ffffff;
}
.skin-red .sidebar-form {
border-radius: 3px;
border: 1px solid #374850;
margin: 10px 10px;
}
.skin-red .sidebar-form input[type="text"],
.skin-red .sidebar-form .btn {
box-shadow: none;
background-color: #374850;
border: 1px solid transparent;
height: 35px;
}
.skin-red .sidebar-form input[type="text"] {
color: #666;
border-top-left-radius: 2px;
border-top-right-radius: 0;
border-bottom-right-radius: 0;
border-bottom-left-radius: 2px;
}
.skin-red .sidebar-form input[type="text"]:focus,
.skin-red .sidebar-form input[type="text"]:focus + .input-group-btn .btn {
background-color: #fff;
color: #666;
}
.skin-red .sidebar-form input[type="text"]:focus + .input-group-btn .btn {
border-left-color: #fff;
}
.skin-red .sidebar-form .btn {
color: #999;
border-top-left-radius: 0;
border-top-right-radius: 2px;
border-bottom-right-radius: 2px;
border-bottom-left-radius: 0;
}
/*
* Skin: Yellow
* ------------
*/
.skin-yellow .main-header .navbar {
background-color: #f39c12;
}
.skin-yellow .main-header .navbar .nav > li > a {
color: #ffffff;
}
.skin-yellow .main-header .navbar .nav > li > a:hover,
.skin-yellow .main-header .navbar .nav > li > a:active,
.skin-yellow .main-header .navbar .nav > li > a:focus,
.skin-yellow .main-header .navbar .nav .open > a,
.skin-yellow .main-header .navbar .nav .open > a:hover,
.skin-yellow .main-header .navbar .nav .open > a:focus,
.skin-yellow .main-header .navbar .nav > .active > a {
background: rgba(0, 0, 0, 0.1);
color: #f6f6f6;
}
.skin-yellow .main-header .navbar .sidebar-toggle {
color: #ffffff;
}
.skin-yellow .main-header .navbar .sidebar-toggle:hover {
color: #f6f6f6;
background: rgba(0, 0, 0, 0.1);
}
.skin-yellow .main-header .navbar .sidebar-toggle {
color: #fff;
}
.skin-yellow .main-header .navbar .sidebar-toggle:hover {
background-color: #e08e0b;
}
@media (max-width: 767px) {
.skin-yellow .main-header .navbar .dropdown-menu li.divider {
background-color: rgba(255, 255, 255, 0.1);
}
.skin-yellow .main-header .navbar .dropdown-menu li a {
color: #fff;
}
.skin-yellow .main-header .navbar .dropdown-menu li a:hover {
background: #e08e0b;
}
}
.skin-yellow .main-header .logo {
background-color: #e08e0b;
color: #ffffff;
border-bottom: 0 solid transparent;
}
.skin-yellow .main-header .logo:hover {
background-color: #db8b0b;
}
.skin-yellow .main-header li.user-header {
background-color: #f39c12;
}
.skin-yellow .content-header {
background: transparent;
}
.skin-yellow .wrapper,
.skin-yellow .main-sidebar,
.skin-yellow .left-side {
background-color: #222d32;
}
.skin-yellow .user-panel > .info,
.skin-yellow .user-panel > .info > a {
color: #fff;
}
.skin-yellow .sidebar-menu > li.header {
color: #4b646f;
background: #1a2226;
}
.skin-yellow .sidebar-menu > li > a {
border-left: 3px solid transparent;
}
.skin-yellow .sidebar-menu > li:hover > a,
.skin-yellow .sidebar-menu > li.active > a {
color: #ffffff;
background: #1e282c;
border-left-color: #f39c12;
}
.skin-yellow .sidebar-menu > li > .treeview-menu {
margin: 0 1px;
background: #2c3b41;
}
.skin-yellow .sidebar a {
color: #b8c7ce;
}
.skin-yellow .sidebar a:hover {
text-decoration: none;
}
.skin-yellow .treeview-menu > li > a {
color: #8aa4af;
}
.skin-yellow .treeview-menu > li.active > a,
.skin-yellow .treeview-menu > li > a:hover {
color: #ffffff;
}
.skin-yellow .sidebar-form {
border-radius: 3px;
border: 1px solid #374850;
margin: 10px 10px;
}
.skin-yellow .sidebar-form input[type="text"],
.skin-yellow .sidebar-form .btn {
box-shadow: none;
background-color: #374850;
border: 1px solid transparent;
height: 35px;
}
.skin-yellow .sidebar-form input[type="text"] {
color: #666;
border-top-left-radius: 2px;
border-top-right-radius: 0;
border-bottom-right-radius: 0;
border-bottom-left-radius: 2px;
}
.skin-yellow .sidebar-form input[type="text"]:focus,
.skin-yellow .sidebar-form input[type="text"]:focus + .input-group-btn .btn {
background-color: #fff;
color: #666;
}
.skin-yellow .sidebar-form input[type="text"]:focus + .input-group-btn .btn {
border-left-color: #fff;
}
.skin-yellow .sidebar-form .btn {
color: #999;
border-top-left-radius: 0;
border-top-right-radius: 2px;
border-bottom-right-radius: 2px;
border-bottom-left-radius: 0;
}
/*
* Skin: Purple
* ------------
*/
.skin-black .main-header .navbar {
background-color: #1e282c;
}
.skin-black .main-header .navbar .nav > li > a {
color: #ffffff;
}
.skin-black .main-header .navbar .nav > li > a:hover,
.skin-black .main-header .navbar .nav > li > a:active,
.skin-black .main-header .navbar .nav > li > a:focus,
.skin-black .main-header .navbar .nav .open > a,
.skin-black .main-header .navbar .nav .open > a:hover,
.skin-black .main-header .navbar .nav .open > a:focus,
.skin-black .main-header .navbar .nav > .active > a {
background: rgba(0, 0, 0, 0.1);
color: #f6f6f6;
}
.skin-black .main-header .navbar .sidebar-toggle {
color: #ffffff;
}
.skin-black .main-header .navbar .sidebar-toggle:hover {
color: #f6f6f6;
background: rgba(0, 0, 0, 0.1);
}
.skin-black .main-header .navbar .sidebar-toggle {
color: #fff;
}
.skin-black .main-header .navbar .sidebar-toggle:hover {
background-color: black;
}
@media (max-width: 767px) {
.skin-black .main-header .navbar .dropdown-menu li.divider {
background-color: rgba(255, 255, 255, 0.1);
}
.skin-black .main-header .navbar .dropdown-menu li a {
color: #fff;
}
.skin-black .main-header .navbar .dropdown-menu li a:hover {
background: black;
}
}
.skin-black .main-header .logo {
background-color: black;
color: #ffffff;
border-bottom: 0 solid transparent;
}
.skin-black .main-header .logo:hover {
background-color: black;
}
.skin-black .main-header li.user-header {
background-color: black;
}
.skin-black .content-header {
background: transparent;
}
.skin-black .wrapper,
.skin-black .main-sidebar,
.skin-black .left-side {
background-color: #222d32;
}
.skin-black .user-panel > .info,
.skin-black .user-panel > .info > a {
color: #fff;
}
.skin-black .sidebar-menu > li.header {
color: #4b646f;
background: #1a2226;
}
.skin-black .sidebar-menu > li > a {
border-left: 3px solid transparent;
}
.skin-black .sidebar-menu > li:hover > a,
.skin-black .sidebar-menu > li.active > a {
color: #ffffff;
background: #1e282c;
border-left-color: #fff;
}
.skin-black .sidebar-menu > li > .treeview-menu {
margin: 0 1px;
background: #2c3b41;
}
.skin-black .sidebar a {
color: #b8c7ce;
}
.skin-black .sidebar a:hover {
text-decoration: none;
}
.skin-black .treeview-menu > li > a {
color: #8aa4af;
}
.skin-black .treeview-menu > li.active > a,
.skin-black .treeview-menu > li > a:hover {
color: #ffffff;
}
.skin-black .sidebar-form {
border-radius: 3px;
border: 1px solid #374850;
margin: 10px 10px;
}
.skin-black .sidebar-form input[type="text"],
.skin-black .sidebar-form .btn {
box-shadow: none;
background-color: #374850;
border: 1px solid transparent;
height: 35px;
}
.skin-black .sidebar-form input[type="text"] {
color: #666;
border-top-left-radius: 2px;
border-top-right-radius: 0;
border-bottom-right-radius: 0;
border-bottom-left-radius: 2px;
}
.skin-black .sidebar-form input[type="text"]:focus,
.skin-black .sidebar-form input[type="text"]:focus + .input-group-btn .btn {
background-color: #fff;
color: #666;
}
.skin-black .sidebar-form input[type="text"]:focus + .input-group-btn .btn {
border-left-color: #fff;
}
.skin-black .sidebar-form .btn {
color: #999;
border-top-left-radius: 0;
border-top-right-radius: 2px;
border-bottom-right-radius: 2px;
border-bottom-left-radius: 0;
}

View file

@ -1,6 +1,456 @@
.wrapper,
.main-sidebar,
.left-side {
background-color: #222d32;
}
.user-panel > .info,
.user-panel > .info > a {
color: #fff;
}
.sidebar-menu > li.header {
color: #4b646f;
background: black;
}
.sidebar-menu > li > a {
border-left: 3px solid transparent;
}
.sidebar-menu > li:hover > a,
.sidebar-menu > li.active > a {
color: #fff;
background: #1a2226;
border-left-color: #fff;
}
.sidebar-menu > li > .treeview-menu {
margin: 0 1px;
background: #2c3b41;
}
.sidebar a {
color: #b8c7ce;
}
.sidebar a:hover {
text-decoration: none;
}
.treeview-menu > li > a {
color: #8aa4af;
}
.treeview-menu > li.active > a,
.treeview-menu > li > a:hover {
color: #ffffff;
}
.sidebar-form {
border-radius: 3px;
border: 1px solid #374850;
margin: 10px 10px;
}
.sidebar-form input[type="text"],
.sidebar-form .btn {
box-shadow: none;
background-color: #374850;
border: 1px solid transparent;
height: 35px;
}
.sidebar-form input[type="text"] {
color: #666;
border-top-left-radius: 2px;
border-top-right-radius: 0;
border-bottom-right-radius: 0;
border-bottom-left-radius: 2px;
}
.sidebar-form input[type="text"]:focus,
.sidebar-form input[type="text"]:focus + .input-group-btn .btn {
background-color: #fff;
color: #666;
}
.sidebar-form input[type="text"]:focus + .input-group-btn .btn {
border-left-color: #fff;
}
.sidebar-form .btn {
color: #999;
border-top-left-radius: 0;
border-top-right-radius: 2px;
border-bottom-right-radius: 2px;
border-bottom-left-radius: 0;
}
/*
* Skin: Blue
* ----------
*/
.skin-blue .main-header .navbar {
background-color: #3c8dbc;
}
.skin-blue .main-header .navbar .nav > li > a {
color: #ffffff;
}
.skin-blue .main-header .navbar .nav > li > a:hover,
.skin-blue .main-header .navbar .nav > li > a:active,
.skin-blue .main-header .navbar .nav > li > a:focus,
.skin-blue .main-header .navbar .nav .open > a,
.skin-blue .main-header .navbar .nav .open > a:hover,
.skin-blue .main-header .navbar .nav .open > a:focus,
.skin-blue .main-header .navbar .nav > .active > a {
background: rgba(0, 0, 0, 0.1);
color: #f6f6f6;
}
.skin-blue .main-header .navbar .sidebar-toggle {
color: #ffffff;
}
.skin-blue .main-header .navbar .sidebar-toggle:hover {
color: #f6f6f6;
background: rgba(0, 0, 0, 0.1);
}
.skin-blue .main-header .navbar .sidebar-toggle {
color: #fff;
}
.skin-blue .main-header .navbar .sidebar-toggle:hover {
background-color: #367fa9;
}
@media (max-width: 767px) {
.skin-blue .main-header .navbar .dropdown-menu li.divider {
background-color: rgba(255, 255, 255, 0.1);
}
.skin-blue .main-header .navbar .dropdown-menu li a {
color: #fff;
}
.skin-blue .main-header .navbar .dropdown-menu li a:hover {
background: #367fa9;
}
}
.skin-blue .main-header .logo {
background-color: #367fa9;
color: #ffffff;
border-bottom: 0 solid transparent;
}
.skin-blue .main-header .logo:hover {
background-color: #357ca5;
}
.skin-blue .main-header li.user-header {
background-color: #3c8dbc;
}
.skin-blue .content-header {
background: transparent;
}
/*
* Skin: Green
* -----------
*/
.skin-green .main-header .navbar {
background-color: #00a65a;
}
.skin-green .main-header .navbar .nav > li > a {
color: #ffffff;
}
.skin-green .main-header .navbar .nav > li > a:hover,
.skin-green .main-header .navbar .nav > li > a:active,
.skin-green .main-header .navbar .nav > li > a:focus,
.skin-green .main-header .navbar .nav .open > a,
.skin-green .main-header .navbar .nav .open > a:hover,
.skin-green .main-header .navbar .nav .open > a:focus,
.skin-green .main-header .navbar .nav > .active > a {
background: rgba(0, 0, 0, 0.1);
color: #f6f6f6;
}
.skin-green .main-header .navbar .sidebar-toggle {
color: #ffffff;
}
.skin-green .main-header .navbar .sidebar-toggle:hover {
color: #f6f6f6;
background: rgba(0, 0, 0, 0.1);
}
.skin-green .main-header .navbar .sidebar-toggle {
color: #fff;
}
.skin-green .main-header .navbar .sidebar-toggle:hover {
background-color: #008d4c;
}
@media (max-width: 767px) {
.skin-green .main-header .navbar .dropdown-menu li.divider {
background-color: rgba(255, 255, 255, 0.1);
}
.skin-green .main-header .navbar .dropdown-menu li a {
color: #fff;
}
.skin-green .main-header .navbar .dropdown-menu li a:hover {
background: #008d4c;
}
}
.skin-green .main-header .logo {
background-color: #008d4c;
color: #ffffff;
border-bottom: 0 solid transparent;
}
.skin-green .main-header .logo:hover {
background-color: #008749;
}
.skin-green .main-header li.user-header {
background-color: #00a65a;
}
.skin-green .content-header {
background: transparent;
}
/*
* Skin: Red
* ---------
*/
.skin-red .main-header .navbar {
background-color: #dd4b39;
}
.skin-red .main-header .navbar .nav > li > a {
color: #ffffff;
}
.skin-red .main-header .navbar .nav > li > a:hover,
.skin-red .main-header .navbar .nav > li > a:active,
.skin-red .main-header .navbar .nav > li > a:focus,
.skin-red .main-header .navbar .nav .open > a,
.skin-red .main-header .navbar .nav .open > a:hover,
.skin-red .main-header .navbar .nav .open > a:focus,
.skin-red .main-header .navbar .nav > .active > a {
background: rgba(0, 0, 0, 0.1);
color: #f6f6f6;
}
.skin-red .main-header .navbar .sidebar-toggle {
color: #ffffff;
}
.skin-red .main-header .navbar .sidebar-toggle:hover {
color: #f6f6f6;
background: rgba(0, 0, 0, 0.1);
}
.skin-red .main-header .navbar .sidebar-toggle {
color: #fff;
}
.skin-red .main-header .navbar .sidebar-toggle:hover {
background-color: #d73925;
}
@media (max-width: 767px) {
.skin-red .main-header .navbar .dropdown-menu li.divider {
background-color: rgba(255, 255, 255, 0.1);
}
.skin-red .main-header .navbar .dropdown-menu li a {
color: #fff;
}
.skin-red .main-header .navbar .dropdown-menu li a:hover {
background: #d73925;
}
}
.skin-red .main-header .logo {
background-color: #d73925;
color: #ffffff;
border-bottom: 0 solid transparent;
}
.skin-red .main-header .logo:hover {
background-color: #d33724;
}
.skin-red .main-header li.user-header {
background-color: #dd4b39;
}
.skin-red .content-header {
background: transparent;
}
/*
* Skin: Yellow
* ------------
*/
.skin-yellow .main-header .navbar {
background-color: #f39c12;
}
.skin-yellow .main-header .navbar .nav > li > a {
color: #ffffff;
}
.skin-yellow .main-header .navbar .nav > li > a:hover,
.skin-yellow .main-header .navbar .nav > li > a:active,
.skin-yellow .main-header .navbar .nav > li > a:focus,
.skin-yellow .main-header .navbar .nav .open > a,
.skin-yellow .main-header .navbar .nav .open > a:hover,
.skin-yellow .main-header .navbar .nav .open > a:focus,
.skin-yellow .main-header .navbar .nav > .active > a {
background: rgba(0, 0, 0, 0.1);
color: #f6f6f6;
}
.skin-yellow .main-header .navbar .sidebar-toggle {
color: #ffffff;
}
.skin-yellow .main-header .navbar .sidebar-toggle:hover {
color: #f6f6f6;
background: rgba(0, 0, 0, 0.1);
}
.skin-yellow .main-header .navbar .sidebar-toggle {
color: #fff;
}
.skin-yellow .main-header .navbar .sidebar-toggle:hover {
background-color: #e08e0b;
}
@media (max-width: 767px) {
.skin-yellow .main-header .navbar .dropdown-menu li.divider {
background-color: rgba(255, 255, 255, 0.1);
}
.skin-yellow .main-header .navbar .dropdown-menu li a {
color: #fff;
}
.skin-yellow .main-header .navbar .dropdown-menu li a:hover {
background: #e08e0b;
}
}
.skin-yellow .main-header .logo {
background-color: #e08e0b;
color: #ffffff;
border-bottom: 0 solid transparent;
}
.skin-yellow .main-header .logo:hover {
background-color: #db8b0b;
}
.skin-yellow .main-header li.user-header {
background-color: #f39c12;
}
.skin-yellow .content-header {
background: transparent;
}
/*
* Skin: Black
* -----------
*/
.skin-black .main-header .navbar {
background-color: #222d32;
}
.skin-black .main-header .navbar .nav > li > a {
color: #ffffff;
}
.skin-black .main-header .navbar .nav > li > a:hover,
.skin-black .main-header .navbar .nav > li > a:active,
.skin-black .main-header .navbar .nav > li > a:focus,
.skin-black .main-header .navbar .nav .open > a,
.skin-black .main-header .navbar .nav .open > a:hover,
.skin-black .main-header .navbar .nav .open > a:focus,
.skin-black .main-header .navbar .nav > .active > a {
background: rgba(0, 0, 0, 0.1);
color: #f6f6f6;
}
.skin-black .main-header .navbar .sidebar-toggle {
color: #ffffff;
}
.skin-black .main-header .navbar .sidebar-toggle:hover {
color: #f6f6f6;
background: rgba(0, 0, 0, 0.1);
}
.skin-black .main-header .navbar .sidebar-toggle {
color: #fff;
}
.skin-black .main-header .navbar .sidebar-toggle:hover {
background-color: #1a2226;
}
@media (max-width: 767px) {
.skin-black .main-header .navbar .dropdown-menu li.divider {
background-color: rgba(255, 255, 255, 0.1);
}
.skin-black .main-header .navbar .dropdown-menu li a {
color: #fff;
}
.skin-black .main-header .navbar .dropdown-menu li a:hover {
background: #1a2226;
}
}
.skin-black .main-header .logo {
background-color: black;
color: #ffffff;
border-bottom: 0 solid transparent;
}
.skin-black .main-header .logo:hover {
background-color: black;
}
.skin-black .main-header li.user-header {
background-color: #1a2226;
}
.skin-black .content-header {
background: transparent;
}
.build-info-panel .box-header h1.box-title {
border: 0;
font-size: 1.5em;
border: 0;
font-size: 1.5em;
font-weight: bold;
margin-left: 110px;
}
@ -10,14 +460,14 @@
}
.build-info-panel img {
border: 2px solid #fff;
border: 2px solid #fff;
border-radius: 50%;
margin-top: -40px;
margin-top: -40px;
}
.build-info-panel #build-info {
margin-left: 110px;
min-height: 50px;
min-height: 50px;
}
.build-info-panel .commit-message {
@ -28,10 +478,10 @@
color: #fff;
}
.pagination>li>span {
.pagination > li > span {
font-weight: bold;
background: #337ab7;
color: #fff;
color: #fff;
}
#plugins table td {
@ -57,20 +507,63 @@
float: left;
}
.small-box-minimal > .small-box-footer-build {
width: 5%;
border: 1px solid rgba(0, 0, 0, 0.15);
width: 5%;
border: 1px solid rgba(0, 0, 0, 0.15);
margin-left: 1px;
margin-top: 19px;
font-size: 11px;
margin-top: 19px;
font-size: 11px;
}
.navbar-nav > .user-menu > .dropdown-menu {
width: 290px;
}
.nav-tabs-custom > .nav-tabs > li.active {
border-top-color: #8aa4af;
}
.box {
border-top: 3px solid #8aa4af;
}
pre {
display: block;
padding: 9.5px;
margin: 0 0 10px;
font-size: 13px;
line-height: 1.42857143;
color: #333;
word-break: break-all;
word-wrap: break-word;
background-color: #fff;
border: none;
border-radius: 0;
}
body,
h1,
h2,
h3,
h4,
h5,
h6,
.h1,
.h2,
.h3,
.h4,
.h5,
.h6,
.main-header .logo {
font-family: sans-serif;
}
#phpunit-data th div { margin: 0 0.5em; }
#phpunit-data .success td { background: none; color: #00a65a; }
#phpunit-data .fail td { background: none; color: #f56954; }
#phpunit-data .error td { background: none; color: #f56954; }
#phpunit-data .skipped td { background: none; color: #e08e0b; }
#phpunit-data .todo td { background: none; color: #00c0ef; }
.visible-line-breaks {
white-space: pre-wrap;
}

View file

@ -1,6 +1,6 @@
var phpunitPlugin = ActiveBuild.UiPlugin.extend({
id: 'build-phpunit-errors',
css: 'col-lg-6 col-md-12 col-sm-12 col-xs-12',
css: 'col-xs-12',
title: Lang.get('phpunit'),
lastData: null,
displayOnUpdate: false,
@ -8,7 +8,7 @@ var phpunitPlugin = ActiveBuild.UiPlugin.extend({
rendered: false,
statusMap: {
success : 'ok',
fail: 'remove',
failed: 'remove',
error: 'warning-sign',
todo: 'info-sign',
skipped: 'exclamation-sign'
@ -28,16 +28,6 @@ var phpunitPlugin = ActiveBuild.UiPlugin.extend({
query();
}
});
$(document).on('click', '#phpunit-data .test-toggle', function(ev) {
var input = $(ev.target);
$('#phpunit-data tbody ' + input.data('target')).toggle(input.prop('checked'));
});
$(document).on('click', '#phpunit-data button.trace', function() {
var $btn = $(this);
$($btn).replaceWith(self.buildTrace($btn.data('trace')));
});
},
render: function() {
@ -45,7 +35,9 @@ var phpunitPlugin = ActiveBuild.UiPlugin.extend({
return $('<div class="table-responsive"><table class="table" id="phpunit-data">' +
'<thead>' +
'<tr>' +
' <th>'+Lang.get('test_message')+'</th>' +
'<th>'+Lang.get('status')+'</th>' +
'<th>'+Lang.get('test_message')+'</th>' +
'<th>'+Lang.get('trace')+'</th>' +
'</tr>' +
'</thead><tbody></tbody></table></div>');
},
@ -62,7 +54,7 @@ var phpunitPlugin = ActiveBuild.UiPlugin.extend({
var tests = this.lastData[0].meta_value;
var thead = $('#phpunit-data thead tr');
var tbody = $('#phpunit-data tbody');
thead.empty().append('<th>'+Lang.get('test_message')+'</th>');
thead.empty().append('<th>'+Lang.get('status')+'</th><th>'+Lang.get('test_message')+'</th><th>'+Lang.get('trace')+'</th>');
tbody.empty();
if (tests.length == 0) {
@ -70,12 +62,23 @@ var phpunitPlugin = ActiveBuild.UiPlugin.extend({
return;
}
var counts = { success: 0, fail: 0, error: 0, skipped: 0, todo: 0 }, total = 0;
var counts = { success: 0, failed: 0, error: 0, skipped: 0, todo: 0 }, total = 0;
for (var i in tests) {
var content = $('<td colspan="3"></td>'),
message = $('<div class="visible-line-breaks"></div>').appendTo(content),
severity = tests[i].severity || (tests[i].pass ? 'success' : 'failed');
var severity = tests[i].severity || (tests[i].pass ? 'success' : 'failed'),
label = ('success' == severity) ? 'success' : (
('error' == severity) ? 'danger' : 'warning'
);
if ('fail' === severity) {
severity = 'failed';
}
var status = $('<td><span class="label label-' + label + '">'+Lang.get(severity)+'</span></td>'),
content = $('<td></td>'),
trace = $('<td></td>'),
message = $('<div class="visible-line-breaks"></div>').appendTo(content),
trace_message = $('<div class="visible-line-breaks"></div>').appendTo(trace);
if (tests[i].message) {
message.text(tests[i].message);
@ -90,34 +93,15 @@ var phpunitPlugin = ActiveBuild.UiPlugin.extend({
}
if (tests[i].trace && tests[i].trace.length) {
var $traceBtn = $('<button class="btn btn-default btn-xs trace" type="button" title="Expand Trace">...</button>');
$traceBtn.data('trace', tests[i].trace);
content.append('Trace: ');
content.append($traceBtn);
trace_message.append(tests[i].trace);
}
$('<tr class="'+ severity + '"></tr>').append(content).appendTo(tbody);
$('<tr></tr>').append(status).append(content).append(trace).appendTo(tbody);
counts[severity]++;
total++;
}
var checkboxes = $('<th/>');
thead.append(checkboxes).append('<th>' + Lang.get('test_total', total) + '</th>');
for (var key in counts) {
var count = counts[key];
if(count > 0) {
checkboxes.append(
'<div style="float:left" class="' + key + '"><input type="checkbox" class="test-toggle" data-target=".' + key + '" ' +
(key !== 'success' ? ' checked' : '') + '/>&nbsp;' +
Lang.get('test_'+key, count)+ '</div> '
);
}
}
tbody.find('.success').hide();
$('#build-phpunit-errors').show();
},

View file

@ -3,9 +3,8 @@ var SummaryPlugin = ActiveBuild.UiPlugin.extend({
css: 'col-xs-12',
title: Lang.get('build-summary'),
box: true,
statusIcons: [ 'fa-clock-o', 'fa-cogs', 'fa-check', 'fa-remove' ],
statusLabels: [ Lang.get('pending'), Lang.get('running'), Lang.get('successful'), Lang.get('failed') ],
statusClasses: ['text-blue', 'text-yellow', 'text-green', 'text-red'],
statusLabels: [ Lang.get('pending'), Lang.get('running'), Lang.get('success'), Lang.get('failed') ],
statusClasses: ['info', 'warning', 'success', 'danger'],
register: function() {
var self = this;
@ -50,8 +49,7 @@ var SummaryPlugin = ActiveBuild.UiPlugin.extend({
'<tr>' +
'<td>' + Lang.get('stage_' + stage) + '</td>' +
'<td>' + Lang.get(plugin) + '</td>' +
'<td><span class="' + this.statusClasses[data.status] + '">' +
'<i class="fa ' + this.statusIcons[data.status] + '"></i>&nbsp;' +
'<td><span class="label label-' + this.statusClasses[data.status] + '">' +
this.statusLabels[data.status] +
'</span></td>' +
'<td class="text-right">' + duration + '</td>' +

View file

@ -166,7 +166,7 @@ var Build = Class.extend({
var container = $('<div></div>').addClass('ui-plugin ' + plugin.css).attr('id', plugin.id);
var content = $('<div></div>').append(output);
content.addClass('box box-default');
content.addClass('box');
if (plugin.title) {
content.prepend('<div class="box-header"><h3 class="box-title">'+plugin.title+'</h3></div>');

View file

@ -54,10 +54,6 @@ class BuildStatusController extends Controller
$project = $this->projectStore->getById($projectId);
$status = 'passing';
if (!$project->getAllowPublicStatus()) {
return null;
}
if (isset($project) && $project instanceof Project) {
$build = $project->getLatestBuild($branch, [2,3]);

View file

@ -51,7 +51,7 @@ class SessionController extends Controller
} else {
unset($_SESSION['login_token']);
$user = $this->userStore->getByEmail($this->getParam('email'));
$user = $this->userStore->getByEmailOrName($this->getParam('email'));
if ($user && password_verify($this->getParam('password', ''), $user->getHash())) {
session_regenerate_id(true);
@ -69,8 +69,8 @@ class SessionController extends Controller
$form->setMethod('POST');
$form->setAction(APP_URL.'session/login');
$email = new b8\Form\Element\Email('email');
$email->setLabel(Lang::get('email_address'));
$email = new b8\Form\Element\Text('email');
$email->setLabel(Lang::get('login'));
$email->setRequired(true);
$email->setContainerClass('form-group');
$email->setClass('form-control');

View file

@ -94,14 +94,13 @@ abstract class BaseCommandExecutor implements CommandExecutor
$pipes = [];
$process = proc_open($command, $descriptorSpec, $pipes, $this->buildPath, null);
$this->lastOutput = '';
$this->lastError = '';
if (is_resource($process)) {
fclose($pipes[0]);
$this->lastOutput = stream_get_contents($pipes[1]);
$this->lastError = stream_get_contents($pipes[2]);
fclose($pipes[1]);
fclose($pipes[2]);
list($this->lastOutput, $this->lastError) = $this->readAlternating([$pipes[1], $pipes[2]]);
$status = proc_close($process);
}
@ -127,6 +126,36 @@ abstract class BaseCommandExecutor implements CommandExecutor
return $rtn;
}
/**
* Reads from array of streams as data becomes available.
* @param array $descriptors
* @return string[] data read from each descriptor
*/
private function readAlternating(array $descriptors)
{
$outputs = [];
foreach ($descriptors as $key => $descriptor) {
stream_set_blocking($descriptor, false);
$outputs[$key] = '';
}
do {
$read = $descriptors;
$write = null;
$except = null;
stream_select($read, $write, $except, null);
foreach ($read as $descriptor) {
$key = array_search($descriptor, $descriptors);
if (feof($descriptor)) {
fclose($descriptor);
unset($descriptors[$key]);
} else {
$outputs[$key] .= fgets($descriptor);
}
}
} while (count($descriptors) > 0);
return $outputs;
}
/**
* Returns the output from the last command run.
*/

View file

@ -84,7 +84,6 @@ PHP Censor',
'pending' => 'Venter',
'running' => 'Kører',
'success' => 'Succes',
'successful' => 'Lykkedes',
'failed' => 'Fejlede',
'manual_build' => 'Manuelt Build',

View file

@ -84,7 +84,6 @@ PHP Censor',
'pending' => 'Ausstehend',
'running' => 'Wird ausgeführt',
'success' => 'Erfolg',
'successful' => 'Erfolgreich',
'failed' => 'Fehlgeschlagen',
'manual_build' => 'Manueller Build',

View file

@ -84,7 +84,6 @@ PHP Censor',
'pending' => 'Σε εκκρεμότητα',
'running' => 'Τρέχοντα',
'success' => 'Επιτυχία',
'successful' => 'Επιτυχής',
'failed' => 'Αποτυχία',
'manual_build' => 'Χειροκίνητη κατασκευή',

View file

@ -87,8 +87,8 @@ PHP Censor',
'pending' => 'Pending',
'running' => 'Running',
'success' => 'Success',
'successful' => 'Successful',
'failed' => 'Failed',
'error' => 'Error',
'manual_build' => 'Manual Build',
// Add/Edit Project:
@ -181,21 +181,21 @@ PHP Censor',
'build' => 'Build',
'lines' => 'Lines',
'comment_lines' => 'Comment Lines',
'noncomment_lines' => 'Non-Comment Lines',
'comment_lines' => 'Comment lines',
'noncomment_lines' => 'Non-Comment lines',
'logical_lines' => 'Logical Lines',
'lines_of_code' => 'Lines of Code',
'build_log' => 'Build Log',
'quality_trend' => 'Quality Trend',
'codeception_errors' => 'Codeception Errors',
'phpmd_warnings' => 'PHPMD Warnings',
'phpcs_warnings' => 'PHPCS Warnings',
'phpcs_errors' => 'PHPCS Errors',
'phplint_errors' => 'Lint Errors',
'phpunit_errors' => 'PHPUnit Errors',
'lines_of_code' => 'Lines of code',
'build_log' => 'Build log',
'quality_trend' => 'Quality trend',
'codeception_errors' => 'Codeception errors',
'phpmd_warnings' => 'PHPMD warnings',
'phpcs_warnings' => 'PHPCS warnings',
'phpcs_errors' => 'PHPCS errors',
'phplint_errors' => 'Lint errors',
'phpunit_errors' => 'PHPUnit errors',
'phpunit_fail_init' => 'Neither a configuration file nor a test directory found.',
'phpcpd_warnings' => 'PHP Copy/Paste Detector Warnings',
'phpdoccheck_warnings' => 'Missing Docblocks',
'phpcpd_warnings' => 'PHP Copy/Paste Detector warnings',
'phpdoccheck_warnings' => 'Missing docblocks',
'issues' => 'Issues',
'phpcpd' => 'PHP Copy/Paste Detector',
@ -462,7 +462,7 @@ PHP Censor',
'php_cpd' => 'PHP Copy/Paste Detector',
'php_docblock_checker' => 'PHP Docblock Checker',
'composer' => 'Composer',
'php_loc' => 'PHPLOC',
'php_loc' => 'PHP LOC',
'php_parallel_lint' => 'PHP Parallel Lint',
'email' => 'Email',
'atoum' => 'Atoum',

View file

@ -83,7 +83,6 @@ PHP Censor',
'pending' => 'Pediente',
'running' => 'Ejecutando',
'success' => 'Éxito',
'successful' => 'Exitoso',
'failed' => 'Falló',
'manual_build' => 'Build Manual',

View file

@ -84,7 +84,6 @@ PHP Censor',
'pending' => 'En attente',
'running' => 'En cours',
'success' => 'Terminé',
'successful' => 'Réussi',
'failed' => 'Échoué',
'manual_build' => 'Build manuel',

View file

@ -82,7 +82,6 @@ PHP Censor',
'pending' => 'In attesa',
'running' => 'In corso',
'success' => 'Successo',
'successful' => 'Con successo',
'failed' => 'Fallita',
'manual_build' => 'Build Manuale',

View file

@ -84,7 +84,6 @@ PHP Censor',
'pending' => 'In afwachting',
'running' => 'Lopende',
'success' => 'Succes',
'successful' => 'Succesvol',
'failed' => 'Gefaald',
'manual_build' => 'Manuele build',

View file

@ -84,7 +84,6 @@ PHP Censor',
'pending' => 'Oczekujące',
'running' => 'W toku',
'success' => 'Sukces',
'successful' => 'Zakończone sukcesem',
'failed' => 'Nieudane',
'manual_build' => 'Budowanie Manualne',

View file

@ -12,7 +12,7 @@ $strings = array(
'language' => 'Idioma',
// Log in:
'log_in_to_phpci' => 'Acessar o PHPCI',
'log_in_to_app' => 'Acessar o PHP Censor',
'login_error' => 'Email ou senha incorretos',
'forgotten_password_link' => 'Perdeu sua senha?',
'reset_emailed' => 'We\'ve emailed you a link to reset your password.',
@ -25,7 +25,7 @@ $strings = array(
'reset_no_user_exists' => 'No user exists with that email address, please try again.',
'reset_email_body' => 'Hi %s,
You have received this email because you, or someone else, has requested a password reset for PHPCI.
You have received this email because you, or someone else, has requested a password reset for PHP Censor.
If this was you, please click the following link to reset your password: %ssession/reset-password/%d/%s
@ -33,9 +33,9 @@ Otherwise, please ignore this email and no action will be taken.
Thank you,
PHPCI',
PHP Censor',
'reset_email_title' => 'PHPCI Password Reset for %s',
'reset_email_title' => 'PHP Censor Password Reset for %s',
'reset_invalid' => 'Invalid password reset request.',
'email_address' => 'Endereço de e-mail',
'login' => 'Login / Email Address',
@ -83,7 +83,6 @@ PHPCI',
'pending' => 'Pendente',
'running' => 'Correndo',
'success' => 'Sucesso',
'successful' => 'Bem sucedido',
'failed' => 'Fracassado',
'manual_build' => 'Compilação manual',
@ -108,8 +107,8 @@ PHPCI',
'project_title' => 'Titulo do projeto',
'project_private_key' => 'Chave privada usada para acessar o repositório
(Deixe em branco para controles remotos locais e/ou anônimos)',
'build_config' => 'PHPCI construir configuração para este projeto
(if you cannot add a phpci.yml file in the project repository)',
'build_config' => 'PHP Censor construir configuração para este projeto
(if you cannot add a .php-censor.yml (.phpci.yml|phpci.yml) file in the project repository)',
'default_branch' => 'Nome padrão do branch',
'allow_public_status' => 'Habilitar página de status pública e imagem para este projeto?',
'archived' => 'Arquivado',
@ -166,19 +165,19 @@ PHPCI',
'build' => 'Build',
'lines' => 'Lines',
'comment_lines' => 'Comment Lines',
'noncomment_lines' => 'Non-Comment Lines',
'logical_lines' => 'Logical Lines',
'lines_of_code' => 'Lines of Code',
'comment_lines' => 'Comment lines',
'noncomment_lines' => 'Non-Comment lines',
'logical_lines' => 'Logical lines',
'lines_of_code' => 'Lines of code',
'build_log' => 'Log de compilação',
'quality_trend' => 'Quality Trend',
'codeception_errors' => 'Codeception Errors',
'phpmd_warnings' => 'PHPMD Warnings',
'phpcs_warnings' => 'PHPCS Warnings',
'phpcs_errors' => 'PHPCS Errors',
'phplint_errors' => 'Lint Errors',
'phpunit_errors' => 'PHPUnit Errors',
'phpdoccheck_warnings' => 'Missing Docblocks',
'quality_trend' => 'Quality trend',
'codeception_errors' => 'Codeception errors',
'phpmd_warnings' => 'PHPMD warnings',
'phpcs_warnings' => 'PHPCS warnings',
'phpcs_errors' => 'PHPCS errors',
'phplint_errors' => 'Lint errors',
'phpunit_errors' => 'PHPUnit errors',
'phpdoccheck_warnings' => 'Missing docblocks',
'issues' => 'Issues',
'codeception' => 'Codeception',
@ -241,21 +240,21 @@ PHPCI',
// Settings:
'settings_saved' => 'Your settings have been saved.',
'settings_check_perms' => 'Your settings could not be saved, check the permissions of your config.yml file.',
'settings_cannot_write' => 'PHPCI cannot write to your config.yml file, settings may not be saved properly
'settings_cannot_write' => 'PHP Censor cannot write to your config.yml file, settings may not be saved properly
until this is rectified.',
'settings_github_linked' => 'Your GitHub account has been linked.',
'settings_github_not_linked' => 'Your GitHub account could not be linked.',
'build_settings' => 'Build Settings',
'github_application' => 'GitHub Application',
'github_sign_in' => 'Before you can start using GitHub, you need to <a href="%s">sign in</a> and grant
PHPCI access to your account.',
'github_phpci_linked' => 'PHPCI is successfully linked to GitHub account.',
PHP Censor access to your account.',
'github_linked' => 'PHP Censor is successfully linked to GitHub account.',
'github_where_to_find' => 'Where to find these...',
'github_where_help' => 'If you own the application you would like to use, you can find this information within your
<a href="https://github.com/settings/applications">applications</a> settings area.',
'email_settings' => 'Email Settings',
'email_settings_help' => 'Before PHPCI can send build status emails,
'email_settings_help' => 'Before PHP Censor can send build status emails,
you need to configure your SMTP settings below.',
'application_id' => 'Application ID',
@ -280,7 +279,7 @@ PHPCI',
'3_hours' => '3 Hours',
// Plugins
'cannot_update_composer' => 'PHPCI cannot update composer.json for you as it is not writable.',
'cannot_update_composer' => 'PHP Censor cannot update composer.json for you as it is not writable.',
'x_has_been_removed' => '%s has been removed.',
'x_has_been_added' => '%s has been added to composer.json for you and will be installed next time
you run composer update.',
@ -310,7 +309,7 @@ PHPCI',
'stage_fixed' => 'Fixed',
// Installer
'installation_url' => 'PHPCI Installation URL',
'installation_url' => 'PHP Censor Installation URL',
'db_host' => 'Database Host',
'db_name' => 'Database Name',
'db_user' => 'Database Username',
@ -319,37 +318,37 @@ PHPCI',
'admin_pass' => 'Admin Password',
'admin_email' => 'Admin Email Address',
'config_path' => 'Config File Path',
'install_phpci' => 'Install PHPCI',
'welcome_to_phpci' => 'Welcome to PHPCI',
'install_app' => 'Install PHP Censor',
'welcome_to_app' => 'Welcome to PHP Censor',
'please_answer' => 'Please answer the following questions:',
'phpci_php_req' => 'PHPCI requires at least PHP 5.3.8 to function.',
'app_php_req' => 'PHP Censor requires at least PHP 5.3.8 to function.',
'extension_required' => 'Extension required: %s',
'function_required' => 'PHPCI needs to be able to call the %s() function. Is it disabled in php.ini?',
'requirements_not_met' => 'PHPCI cannot be installed, as not all requirements are met.
'function_required' => 'PHP Censor needs to be able to call the %s() function. Is it disabled in php.ini?',
'requirements_not_met' => 'PHP Censor cannot be installed, as not all requirements are met.
Please review the errors above before continuing.',
'must_be_valid_email' => 'Must be a valid email address.',
'must_be_valid_url' => 'Must be a valid URL.',
'enter_name' => 'Admin Name: ',
'enter_email' => 'Admin Email: ',
'enter_password' => 'Admin Password: ',
'enter_phpci_url' => 'Your PHPCI URL ("http://phpci.local" for example): ',
'enter_app_url' => 'Your PHP Censor URL ("http://php-censor.local" for example): ',
'enter_db_host' => 'Please enter your MySQL host [localhost]: ',
'enter_db_name' => 'Please enter your MySQL database name [phpci]: ',
'enter_db_user' => 'Please enter your MySQL username [phpci]: ',
'enter_db_name' => 'Please enter your MySQL database name [php-censor-db]: ',
'enter_db_user' => 'Please enter your MySQL username [php-censor-user]: ',
'enter_db_pass' => 'Please enter your MySQL password: ',
'could_not_connect' => 'PHPCI could not connect to MySQL with the details provided. Please try again.',
'could_not_connect' => 'PHP Censor could not connect to MySQL with the details provided. Please try again.',
'setting_up_db' => 'Setting up your database... ',
'user_created' => 'User account created!',
'failed_to_create' => 'PHPCI failed to create your admin account.',
'config_exists' => 'The PHPCI config file exists and is not empty.',
'update_instead' => 'If you were trying to update PHPCI, please use phpci:update instead.',
'failed_to_create' => 'PHP Censor failed to create your admin account.',
'config_exists' => 'The PHP Censor config file exists and is not empty.',
'update_instead' => 'If you were trying to update PHP Censor, please use php-censor:update instead.',
// Update
'update_phpci' => 'Update the database to reflect modified models.',
'updating_phpci' => 'Updating PHPCI database: ',
'not_installed' => 'PHPCI does not appear to be installed.',
'install_instead' => 'Please install PHPCI via phpci:install instead.',
'update_app' => 'Update the database to reflect modified models.',
'updating_app' => 'Updating PHP Censor database: ',
'not_installed' => 'PHP Censor does not appear to be installed.',
'install_instead' => 'Please install PHP Censor via php-censor:install instead.',
// Poll Command
'poll_github' => 'Poll GitHub to check if we need to start a build.',
@ -370,18 +369,18 @@ PHPCI',
'commit_id_option' => 'Commit ID to build',
'branch_name_option' => 'Branch to build',
'add_to_queue_failed' => 'Build created successfully, but failed to add to build queue. This usually happens
when PHPCI is set to use a beanstalkd server that does not exist,
when PHP Censor is set to use a beanstalkd server that does not exist,
or your beanstalkd server has stopped.',
// Run Command
'run_all_pending' => 'Run all pending PHPCI builds.',
'run_all_pending' => 'Run all pending PHP Censor builds.',
'finding_builds' => 'Finding builds to process',
'found_n_builds' => 'Found %d builds',
'skipping_build' => 'Skipping Build %d - Project build already in progress.',
'marked_as_failed' => 'Build %d marked as failed due to timeout.',
// Builder
'missing_phpci_yml' => 'This project does not contain a phpci.yml file, or it is empty.',
'missing_app_yml' => 'This project does not contain a .php-censor.yml (.phpci.yml|phpci.yml) file, or it is empty.',
'build_success' => 'BUILD SUCCESS',
'build_failed' => 'BUILD FAILED',
'removing_build' => 'Removing Build.',
@ -408,7 +407,7 @@ PHPCI',
'n_emails_sent' => '%d emails sent.',
'n_emails_failed' => '%d emails failed to send.',
'unable_to_set_env' => 'Unable to set environment variable',
'tag_created' => 'Tag created by PHPCI: %s',
'tag_created' => 'Tag created by PHP Censor: %s',
'x_built_at_x' => '%PROJECT_TITLE% built at %BUILD_URI%',
'hipchat_settings' => 'Please define room and authToken for hipchat_notify plugin',
'irc_settings' => 'You must configure a server, room and nick.',

View file

@ -84,9 +84,9 @@ PHP Censor',
'latest_builds' => 'Последние сборки',
'pending' => 'Ожидает',
'running' => 'Запущена',
'success' => 'Успех',
'successful' => 'Успешно',
'success' => 'Успешно',
'failed' => 'Провал',
'error' => 'Ошибка',
'manual_build' => 'Запущена вручную',
// Add/Edit Project:
@ -446,7 +446,7 @@ PHP Censor',
'php_cpd' => 'PHP Copy/Paste Detector',
'php_docblock_checker' => 'PHP Docblock Checker',
'composer' => 'Composer',
'php_loc' => 'PHPLOC',
'php_loc' => 'PHP LOC',
'php_parallel_lint' => 'PHP Parallel Lint',
'email' => 'Email',
'atoum' => 'Atoum',

View file

@ -84,7 +84,6 @@ PHP Censor',
'pending' => 'Очікує',
'running' => 'Виконується',
'success' => 'Успіх',
'successful' => 'Успішно',
'failed' => 'Провалена',
'manual_build' => 'Ручна збірка',

View file

@ -12,7 +12,7 @@ $strings = array(
'language' => '语言选择',
// Log in:
'log_in_to_phpci' => '登录 PHPCI',
'log_in_to_app' => '登录 PHP Censor',
'login_error' => '邮箱或密码错误',
'forgotten_password_link' => '忘记密码?',
'reset_emailed' => '已发送重置密码邮件.',
@ -25,7 +25,7 @@ $strings = array(
'reset_no_user_exists' => '不存该该邮箱用户,请检查后重试!',
'reset_email_body' => '您好 %s,
您收到这封邮件是因为您或者别人发起了来自PHPCI的密码重置请求。
您收到这封邮件是因为您或者别人发起了来自PHP Censor的密码重置请求。
如果确实是您发起的,请点击链接去重置您的密码:%ssession/reset-password/%d/%s
@ -33,9 +33,9 @@ $strings = array(
多谢,
PHPCI',
PHP Censor',
'reset_email_title' => '给 %s 来自 PHPCI 的密码重置邮件',
'reset_email_title' => '给 %s 来自 PHP Censor 的密码重置邮件',
'reset_invalid' => '密码重置请求失败!',
'email_address' => '邮箱地址',
'password' => '密码',
@ -82,7 +82,6 @@ PHPCI',
'pending' => '等待中',
'running' => '构建中',
'success' => '成功',
'successful' => '成功',
'failed' => '失败',
'manual_build' => 'Manual Build',
@ -108,8 +107,8 @@ PHPCI',
'project_title' => '项目标题',
'project_private_key' => '访问仓库私有秘钥
(本地或公共仓库可为空)',
'build_config' => '该项目 PHPCI 构建配置文件
(如果您无法在该项目仓库创建 phpci.yml 文件)',
'build_config' => '该项目 PHP Censor 构建配置文件
(如果您无法在该项目仓库创建 .php-censor.yml (.phpci.yml|phpci.yml) 文件)',
'default_branch' => '默认分支名称',
'allow_public_status' => '启用此项目的公共状态页和图像?',
'archived' => '归档',
@ -164,19 +163,19 @@ PHPCI',
'build' => 'Build',
'lines' => 'Lines',
'comment_lines' => 'Comment Lines',
'noncomment_lines' => 'Non-Comment Lines',
'logical_lines' => 'Logical Lines',
'lines_of_code' => 'Lines of Code',
'build_log' => 'Build Log',
'quality_trend' => 'Quality Trend',
'codeception_errors' => 'Codeception Errors',
'phpmd_warnings' => 'PHPMD Warnings',
'phpcs_warnings' => 'PHPCS Warnings',
'phpcs_errors' => 'PHPCS Errors',
'phplint_errors' => 'Lint Errors',
'phpunit_errors' => 'PHPUnit Errors',
'phpdoccheck_warnings' => 'Missing Docblocks',
'comment_lines' => 'Comment lines',
'noncomment_lines' => 'Non-Comment lines',
'logical_lines' => 'Logical lines',
'lines_of_code' => 'Lines of code',
'build_log' => 'Build log',
'quality_trend' => 'Quality trend',
'codeception_errors' => 'Codeception errors',
'phpmd_warnings' => 'PHPMD warnings',
'phpcs_warnings' => 'PHPCS warnings',
'phpcs_errors' => 'PHPCS errors',
'phplint_errors' => 'Lint errors',
'phpunit_errors' => 'PHPUnit errors',
'phpdoccheck_warnings' => 'Missing docblocks',
'issues' => 'Issues',
'codeception' => 'Codeception',
@ -239,18 +238,18 @@ PHPCI',
// Settings:
'settings_saved' => '您的设置已经保存。',
'settings_check_perms' => '权限不足,您的设置无法保存, 请检查 config.yml 文件.',
'settings_cannot_write' => 'PHPCI 无法写入 config.yml 文件, 在这个问题解决前设置可能无法正常保存',
'settings_cannot_write' => 'PHP Censor 无法写入 config.yml 文件, 在这个问题解决前设置可能无法正常保存',
'settings_github_linked' => '您的 GitHub 账户已经连接。',
'settings_github_not_linked' => '您的 GitHub 无法连接。',
'build_settings' => '构建设置',
'github_application' => 'GitHub Application',
'github_sign_in' => '在使用您的 GitHub 账号之前, 您需要登录 GitHub , 并允许 PHPCI 访问您的账户。',
'github_phpci_linked' => 'PHPCI 成功连接到您的 GitHub 账户。',
'github_sign_in' => '在使用您的 GitHub 账号之前, 您需要登录 GitHub , 并允许 PHP Censor 访问您的账户。',
'github_linked' => 'PHP Censor 成功连接到您的 GitHub 账户。',
'github_where_to_find' => '在哪里可以找到...',
'github_where_help' => '如果您想使用您自己的应用, 您可以在<a href="https://github.com/settings/applications">applications</a> 的 setting 中 找到相关信息。',
'email_settings' => '邮箱设置',
'email_settings_help' => 'PHPCI在发送构建状态的邮件之前,您需要配置您的SMTP设置如下。',
'email_settings_help' => 'PHP Censor在发送构建状态的邮件之前,您需要配置您的SMTP设置如下。',
'application_id' => 'Application ID',
'application_secret' => 'Application Secret',
@ -274,7 +273,7 @@ PHPCI',
'3_hours' => '3 小时',
// Plugins
'cannot_update_composer' => '由于 composer.json 文件不可写 PHPCI 无法为您更新该文件, ',
'cannot_update_composer' => '由于 composer.json 文件不可写 PHP Censor 无法为您更新该文件, ',
'x_has_been_removed' => '%s 已经移除',
'x_has_been_added' => '%s 已经为您添加至 composer.json , 当您下次执行 composer update 时相关库将会安装',
'enabled_plugins' => '已启用插件',
@ -303,7 +302,7 @@ PHPCI',
'stage_fixed' => 'Fixed',
// Installer
'installation_url' => 'PHPCI Installation URL',
'installation_url' => 'PHP Censor Installation URL',
'db_host' => 'Database Host',
'db_name' => 'Database Name',
'db_user' => 'Database Username',
@ -312,37 +311,37 @@ PHPCI',
'admin_pass' => 'Admin Password',
'admin_email' => 'Admin Email Address',
'config_path' => 'Config File Path',
'install_phpci' => 'Install PHPCI',
'welcome_to_phpci' => 'Welcome to PHPCI',
'install_app' => 'Install PHP Censor',
'welcome_to_app' => 'Welcome to PHP Censor',
'please_answer' => 'Please answer the following questions:',
'phpci_php_req' => 'PHPCI requires at least PHP 5.3.8 to function.',
'app_php_req' => 'PHP Censor requires at least PHP 5.3.8 to function.',
'extension_required' => 'Extension required: %s',
'function_required' => 'PHPCI needs to be able to call the %s() function. Is it disabled in php.ini?',
'requirements_not_met' => 'PHPCI cannot be installed, as not all requirements are met.
'function_required' => 'PHP Censor needs to be able to call the %s() function. Is it disabled in php.ini?',
'requirements_not_met' => 'PHP Censor cannot be installed, as not all requirements are met.
Please review the errors above before continuing.',
'must_be_valid_email' => 'Must be a valid email address.',
'must_be_valid_url' => 'Must be a valid URL.',
'enter_name' => 'Admin Name: ',
'enter_email' => 'Admin Email: ',
'enter_password' => 'Admin Password: ',
'enter_phpci_url' => 'Your PHPCI URL ("http://phpci.local" for example): ',
'enter_app_url' => 'Your PHP Censor URL ("http://php-censor.local" for example): ',
'enter_db_host' => 'Please enter your MySQL host [localhost]: ',
'enter_db_name' => 'Please enter your MySQL database name [phpci]: ',
'enter_db_user' => 'Please enter your MySQL username [phpci]: ',
'enter_db_name' => 'Please enter your MySQL database name [php-censor-db]: ',
'enter_db_user' => 'Please enter your MySQL username [php-censor-user]: ',
'enter_db_pass' => 'Please enter your MySQL password: ',
'could_not_connect' => 'PHPCI could not connect to MySQL with the details provided. Please try again.',
'could_not_connect' => 'PHP Censor could not connect to MySQL with the details provided. Please try again.',
'setting_up_db' => 'Setting up your database... ',
'user_created' => 'User account created!',
'failed_to_create' => 'PHPCI failed to create your admin account.',
'config_exists' => 'The PHPCI config file exists and is not empty.',
'update_instead' => 'If you were trying to update PHPCI, please use phpci:update instead.',
'failed_to_create' => 'PHP Censor failed to create your admin account.',
'config_exists' => 'The PHP Censor config file exists and is not empty.',
'update_instead' => 'If you were trying to update PHP Censor, please use php-censor:update instead.',
// Update
'update_phpci' => 'Update the database to reflect modified models.',
'updating_phpci' => 'Updating PHPCI database: ',
'not_installed' => 'PHPCI does not appear to be installed.',
'install_instead' => 'Please install PHPCI via phpci:install instead.',
'update_app' => 'Update the database to reflect modified models.',
'updating_app' => 'Updating PHP Censor database: ',
'not_installed' => 'PHP Censor does not appear to be installed.',
'install_instead' => 'Please install PHP Censor via php-censor:install instead.',
// Poll Command
'poll_github' => 'Poll GitHub to check if we need to start a build.',
@ -363,18 +362,18 @@ PHPCI',
'commit_id_option' => 'Commit ID to build',
'branch_name_option' => 'Branch to build',
'add_to_queue_failed' => 'Build created successfully, but failed to add to build queue. This usually happens
when PHPCI is set to use a beanstalkd server that does not exist,
when PHP Censor is set to use a beanstalkd server that does not exist,
or your beanstalkd server has stopped.',
// Run Command
'run_all_pending' => 'Run all pending PHPCI builds.',
'run_all_pending' => 'Run all pending PHP Censor builds.',
'finding_builds' => 'Finding builds to process',
'found_n_builds' => 'Found %d builds',
'skipping_build' => 'Skipping Build %d - Project build already in progress.',
'marked_as_failed' => 'Build %d marked as failed due to timeout.',
// Builder
'missing_phpci_yml' => 'This project does not contain a phpci.yml file, or it is empty.',
'missing_app_yml' => 'This project does not contain a .php-censor.yml (.phpci.yml|phpci.yml) file, or it is empty.',
'build_success' => 'BUILD SUCCESS',
'build_failed' => 'BUILD FAILED',
'removing_build' => 'Removing Build.',
@ -401,7 +400,7 @@ PHPCI',
'n_emails_sent' => '%d emails sent.',
'n_emails_failed' => '%d emails failed to send.',
'unable_to_set_env' => 'Unable to set environment variable',
'tag_created' => 'Tag created by PHPCI: %s',
'tag_created' => 'Tag created by PHP Censor: %s',
'x_built_at_x' => '%PROJECT_TITLE% built at %BUILD_URI%',
'hipchat_settings' => 'Please define room and authToken for hipchat_notify plugin',
'irc_settings' => 'You must configure a server, room and nick.',

View file

@ -10,7 +10,6 @@ use PHPCensor\Model\Base\BuildErrorBase;
/**
* BuildError Model
* @uses PHPCensor\Model\Base\BuildErrorBase
*/
class BuildError extends BuildErrorBase
{

View file

@ -62,7 +62,8 @@ class Deployer extends Plugin
'source' => 'PHP Censor',
'url' => $this->builder->interpolate('%BUILD_URI%'),
'branch' => $this->builder->interpolate('%BRANCH%'),
'update_only' => $this->updateOnly
'commit' => $this->builder->interpolate('%COMMIT%'),
'update_only' => $this->updateOnly,
]);
return $response['success'];

View file

@ -52,17 +52,23 @@ class UserStoreBase extends Store
}
/**
*
* Get a single User by Email.
* @return null|User
*
* @param string $value
*
* @throws HttpException
*
* @return User
*/
public function getByEmail($value, $useConnection = 'read')
public function getByEmail($value)
{
if (is_null($value)) {
throw new HttpException('Value passed to ' . __FUNCTION__ . ' cannot be null.');
}
$query = 'SELECT * FROM `user` WHERE `email` = :email LIMIT 1';
$stmt = Database::getConnection($useConnection)->prepare($query);
$stmt = Database::getConnection()->prepare($query);
$stmt->bindValue(':email', $value);
if ($stmt->execute()) {
@ -74,6 +80,35 @@ class UserStoreBase extends Store
return null;
}
/**
*
* Get a single User by Email or Name.
*
* @param string $value
*
* @throws HttpException
*
* @return User
*/
public function getByEmailOrName($value)
{
if (is_null($value)) {
throw new HttpException('Value passed to ' . __FUNCTION__ . ' cannot be null.');
}
$query = 'SELECT * FROM `user` WHERE `email` = :value OR `name` = :value LIMIT 1';
$stmt = Database::getConnection()->prepare($query);
$stmt->bindValue(':value', $value);
if ($stmt->execute()) {
if ($data = $stmt->fetch(\PDO::FETCH_ASSOC)) {
return new User($data);
}
}
return null;
}
/**
* Get multiple User by Name.
* @return array

View file

@ -3,7 +3,7 @@ use PHPCensor\Helper\Lang;
$linkTemplate = $build->getFileLinkTemplate();
/** @var \PHPCI\Model\BuildError[] $errors */
/** @var \PHPCensor\Model\BuildError[] $errors */
foreach ($errors as $error):
$link = str_replace('{FILE}', $error->getFile(), $linkTemplate);
@ -11,7 +11,7 @@ foreach ($errors as $error):
$link = str_replace('{LINE_END}', $error->getLineEnd(), $link);
?>
<tr class="bg-<?php print $error->getSeverityClass(); ?>">
<tr>
<td>
<span class="label label-<?php print $error->getSeverityClass(); ?>">
<?php print Lang::get($error->getSeverityString()); ?>
@ -30,7 +30,7 @@ foreach ($errors as $error):
?>
</a>
</td>
<td class="visible-line-breaks"><?php print $error->getMessage(); ?></td>
<td class="visible-line-breaks"><?= trim($error->getMessage()); ?></td>
</tr>

View file

@ -134,11 +134,11 @@
<div class="tab-content">
<div class="tab-pane active" id="log">
<pre style="height: 400px; overflow-y: auto;"><?php print $data['log']; ?></pre>
<pre style="overflow-y: visible;"><?php print $data['log']; ?></pre>
</div>
<div class="tab-pane" id="errors">
<table class="errors-table table table-hover dataTable">
<table class="errors-table table">
<thead>
<tr>
<th><?php Lang::out('severity'); ?></th>
@ -149,7 +149,7 @@
</tr>
</thead>
<tbody>
<?php print $data['error_html']; ?>
<?php print $data['error_html']; ?>
</tbody>
</table>
</div>

View file

@ -3,176 +3,171 @@
<head>
<title><?php print $project->getTitle(); ?> - PHP Censor</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta content='width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no' name='viewport'>
<link href='//fonts.googleapis.com/css?family=Roboto:300,500&subset=latin,latin-ext' rel='stylesheet' type='text/css'>
<link href="<?php print APP_URL; ?>assets/vendor/admin-lte/bootstrap/css/bootstrap.min.css" rel="stylesheet" type="text/css" />
<link href="<?php print APP_URL; ?>assets/vendor/admin-lte/dist/css/AdminLTE.min.css" rel="stylesheet" type="text/css" />
<link href="<?php print APP_URL; ?>assets/vendor/admin-lte/plugins/datepicker/datepicker3.css" rel="stylesheet" type="text/css" />
<link href="<?php print APP_URL; ?>assets/vendor/admin-lte/plugins/daterangepicker/daterangepicker.css" rel="stylesheet" type="text/css" />
<link href="<?php print APP_URL; ?>assets/css/ansi-colors.css" rel="stylesheet" type="text/css" />
<link href="<?php print APP_URL; ?>assets/css/main.css" rel="stylesheet" type="text/css" />
<link rel="shortcut icon" type="image/x-icon" href="<?php echo APP_URL ?>favicon.ico">
<link rel="shortcut icon" type="image/png" href="<?php echo APP_URL ?>assets/img/favicon.png">
<script>window.APP_URL = <?php print json_encode(APP_URL) ?></script>
<link href="<?php print APP_URL; ?>assets/vendor/font-awesome/css/font-awesome.min.css" rel="stylesheet" type="text/css" />
<link href="<?php print APP_URL; ?>assets/vendor/ion-icons/css/ionicons.min.css" rel="stylesheet" type="text/css" />
<script src="<?php print APP_URL; ?>assets/vendor/admin-lte/plugins/jQuery/jquery-2.2.3.min.js"></script>
<script type="text/javascript" src="https://www.google.com/jsapi"></script>
<script src="<?php print APP_URL; ?>assets/vendor/admin-lte/bootstrap/js/bootstrap.min.js" type="text/javascript"></script>
<script src="<?php print APP_URL; ?>assets/vendor/admin-lte/plugins/jQueryUI/jquery-ui.min.js" type="text/javascript"></script>
<script src="<?php echo APP_URL ?>assets/js/class.js"></script>
<script src="<?php echo APP_URL ?>assets/js/app.js"></script>
<script src="<?php echo APP_URL ?>assets/js/init.js"></script>
<script src="<?php print APP_URL; ?>assets/js/class.js"></script>
<script src="<?php print APP_URL; ?>assets/vendor/sprintf-js/dist/sprintf.min.js"></script>
<script src="<?php print APP_URL; ?>assets/vendor/admin-lte/plugins/daterangepicker/moment.min.js"></script>
<script src="<?php print APP_URL; ?>assets/js/app.js" type="text/javascript"></script>
</head>
<body>
<div class="navbar navbar-fixed-top">
<div class="container">
<a class="navbar-brand" href="<?php echo APP_URL ?>">PHP Censor</a>
</div>
</div>
<div id="content" class="container">
<h1><?php print $project->getTitle(); ?></h1>
<?php if (!empty($latest)): ?>
<?php
$statusClass = null;
$statusText = null;
switch ($latest->getStatus()) {
case 0:
$statusClass = 'info';
$statusText = 'Pending';
break;
case 1:
$statusClass = 'warning';
$statusText = 'Running';
break;
case 2:
$statusClass = 'success';
$statusText = 'Success';
break;
case 3:
$statusClass = 'danger';
$statusText = 'Failed';
break;
}
?>
<!-- Latest Build -->
<div class="build-info-panel panel panel-<?php print $statusClass; ?>">
<img class="pull-left" src="//www.gravatar.com/avatar/<?php print md5($latest->getCommitterEmail()); ?>?d=mm">
<div class="box-header">
<h1 class="box-title">
<a href="/project/view/<?php print $latest->getProjectId(); ?>">
<?php print $latest->getProject()->getTitle(); ?></a>
<span>#<?php print $latest->getId(); ?></span>
<label class="pull-right label label-<?php print $statusClass; ?>"><?php print $statusText; ?></label>
</h1>
</div>
<div class="box-body">
<div id="build-info">
<?php if ($latest->getCommitMessage()): ?>
<div class="commit-message">
<?php print $latest->getCommitMessage(); ?>
</div>
<?php endif; ?>
<strong>Branch: </strong> <?php print $latest->getBranch(); ?><br>
<strong>Committer: </strong> <?php print $latest->getCommitterEmail(); ?>
<?php if ($latest->getCommitId() != 'Manual'): ?>
<br><strong>Commit ID: </strong> <?php print $latest->getCommitId(); ?><br>
<?php endif; ?>
<body class="hold-transition skin-black layout-top-nav">
<div class="wrapper">
<header class="main-header">
<nav class="navbar navbar-static-top">
<div class="container">
<div class="navbar-header">
<a href="<?php print APP_URL; ?>" class="logo" style="background-color: #222d32; text-align: left;">PHP Censor</a>
</div>
</div>
</div>
<?php endif; ?>
<!-- Recent builds: -->
<div class="box box-primary">
<div class="box-header"><h3 class="box-title">Builds</h3></div>
<table class="table table-striped table-bordered">
<thead>
<tr>
<th>ID</th>
<th>Commit</th>
<th>Branch</th>
<th>Status</th>
</tr>
</thead>
<tbody id="latest-builds">
<?php if(empty($builds) || !count($builds)): ?>
<tr class="">
<td colspan="6">No builds yet.</td>
</tr>
<?php endif; ?>
<?php foreach($builds as $build): ?>
</nav>
</header>
<div class="content-wrapper">
<div class="container">
<section class="content">
<?php if (!empty($latest)): ?>
<?php
switch($build->getStatus())
{
$statusClass = null;
$statusText = null;
switch ($latest->getStatus()) {
case 0:
$cls = 'active';
$subcls = 'info';
$status = 'Pending';
$statusClass = 'blue';
$statusText = 'Pending';
break;
case 1:
$cls = 'warning';
$subcls = 'warning';
$status = 'Running';
$statusClass = 'yellow';
$statusText = 'Running';
break;
case 2:
$cls = 'success';
$subcls = 'success';
$status = 'Success';
$statusClass = 'green';
$statusText = 'Success';
break;
case 3:
$cls = 'danger';
$subcls = 'danger';
$status = 'Failed';
$statusClass = 'red';
$statusText = 'Failed';
break;
}
?>
<tr class="<?php print $cls; ?>">
<td>#<?php print str_pad($build->getId(), 6, '0', STR_PAD_LEFT); ?></td>
<td>
?>
<div class="small-box small-box-full bg-<?= $statusClass; ?>">
<div class="inner">
<h3 class="box-title">
<?php print $latest->getProject()->getTitle(); ?> #<?php print $latest->getId(); ?> (<?= $statusText; ?>)
</h3>
<p>
<?php if ($latest->getCommitMessage()): ?>
<?php print $latest->getCommitMessage(); ?><br /><br />
<?php endif; ?>
<strong>Branch: </strong> <?php print $latest->getBranch(); ?><br />
<strong>Committer: </strong> <?php print $latest->getCommitterEmail(); ?>
<?php if ($latest->getCommitId() != 'Manual'): ?>
<br /><strong>Commit: </strong> <?php print $latest->getCommitId(); ?><br>
<?php endif; ?>
</p>
</div>
<div class="icon">
<i class="fa fa-<?php print $project->getIcon(); ?>"></i>
</div>
<div style="clear: both;"></div>
</div>
<?php endif; ?>
<div class="box">
<div class="box-header"><h3 class="box-title">Builds</h3></div>
<table class="table table-striped table-bordered">
<thead>
<tr>
<th>ID</th>
<th>Commit</th>
<th>Branch</th>
<th>Status</th>
</tr>
</thead>
<tbody id="latest-builds">
<?php if(empty($builds) || !count($builds)): ?>
<tr class="">
<td colspan="6">No builds yet.</td>
</tr>
<?php endif; ?>
<?php foreach($builds as $build): ?>
<?php
if ($build->getCommitId() !== 'Manual') {
print '<a href="' . $build->getCommitLink() . '">';
}
print $build->getCommitId();
if ($build->getCommitId() !== 'Manual') {
print '</a>';
switch($build->getStatus())
{
case 0:
$class = 'info';
$status = 'Pending';
break;
case 1:
$class = 'warning';
$status = 'Running';
break;
case 2:
$class = 'success';
$status = 'Success';
break;
case 3:
$class = 'danger';
$status = 'Failed';
break;
}
?>
</td>
<tr>
<td>#<?php print str_pad($build->getId(), 6, '0', STR_PAD_LEFT); ?></td>
<td><a href="<?php print $build->getBranchLink(); ?>"><?php print $build->getBranch(); ?></a></td>
<td>
<span class='label label-<?php echo $subcls ?>'><?php echo $status ?></span>
</td>
</tr>
<?php endforeach; ?>
<td>
<?php
if ($build->getCommitId() !== 'Manual') {
print '<a href="' . $build->getCommitLink() . '">';
}
print $build->getCommitId();
if ($build->getCommitId() !== 'Manual') {
print '</a>';
}
?>
</td>
<td><a href="<?php print $build->getBranchLink(); ?>"><?php print $build->getBranch(); ?></a></td>
<td>
<span class='label label-<?php echo $class ?>'><?php echo $status ?></span>
</td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
</tbody>
</table>
</div>
</section>
</div>
</div>
<!--<footer class="main-footer">
<div class="container">
</div>
</footer>-->
</div>
</body>
</html>

View file

@ -1,9 +1,9 @@
<?php use PHPCensor\Helper\Lang; ?>
<?php if(empty($builds) || !count($builds)): ?>
<tr class="">
<td colspan="6"><?php Lang::out('no_builds_yet'); ?></td>
</tr>
<tr class="">
<td colspan="6"><?php Lang::out('no_builds_yet'); ?></td>
</tr>
<?php endif; ?>
<?php foreach($builds as $build): ?>
@ -11,36 +11,36 @@
<?php
switch($build->getStatus())
{
case 0:
$cls = 'active';
$subcls = 'info';
$status = Lang::get('pending');
break;
case 1:
$cls = 'warning';
$subcls = 'warning';
$status = Lang::get('running');
break;
case 2:
$cls = 'success';
$subcls = 'success';
$status = Lang::get('success');
break;
case 3:
$cls = 'danger';
$subcls = 'danger';
$status = Lang::get('failed');
break;
case 0:
$cls = 'active';
$subcls = 'info';
$status = Lang::get('pending');
break;
case 1:
$cls = 'warning';
$subcls = 'warning';
$status = Lang::get('running');
break;
case 2:
$cls = 'success';
$subcls = 'success';
$status = Lang::get('success');
break;
case 3:
$cls = 'danger';
$subcls = 'danger';
$status = Lang::get('failed');
break;
}
?>
<tr class="<?php print $cls; ?>">
<td><a href="<?php echo APP_URL ?>build/view/<?php print $build->getId(); ?>">#<?php print str_pad($build->getId(), 6, '0', STR_PAD_LEFT); ?></a></td>
<tr>
<td><a href="<?php echo APP_URL ?>build/view/<?php print $build->getId(); ?>">#<?php print str_pad($build->getId(), 6, '0', STR_PAD_LEFT); ?></a></td>
<td><?php print $build->getCreated()->format('Y-m-d H:i:s'); ?></td>
<td><a href="<?php echo APP_URL ?>project/view/<?php print $build->getProjectId(); ?>">
<td><a href="<?php echo APP_URL ?>project/view/<?php print $build->getProjectId(); ?>">
<i class="fa fa-<?php print $build->getProject()->getIcon(); ?>"></i>
<?php
@ -66,22 +66,22 @@ switch($build->getStatus())
?>
</td>
<td><a href="<?php print $build->getBranchLink(); ?>" target="_blank"><?php print $build->getBranch(); ?></a></td>
<td>
<span class='label label-<?php echo $subcls ?>'><?php echo $status ?></span>
</td>
<td>
<div class="btn-group">
<a class="btn btn-default btn-sm" href="<?php echo APP_URL ?>build/view/<?php print $build->getId(); ?>"><?php Lang::out('view'); ?></a>
<?php if($this->User()->getIsAdmin()): ?>
<button class="btn btn-default btn-sm dropdown-toggle" data-toggle="dropdown">
<span class="caret"></span>
</button>
<ul class="dropdown-menu">
<li><a href="<?php echo APP_URL ?>build/delete/<?php print $build->getId(); ?>" class="app-delete-build"><?php Lang::out('delete_build'); ?></a></li>
</ul>
<?php endif; ?>
</div>
</td>
<td><a href="<?php print $build->getBranchLink(); ?>" target="_blank"><?php print $build->getBranch(); ?></a></td>
<td>
<span class='label label-<?php echo $subcls ?>'><?php echo $status ?></span>
</td>
<td>
<div class="btn-group">
<a class="btn btn-default btn-sm" href="<?php echo APP_URL ?>build/view/<?php print $build->getId(); ?>"><?php Lang::out('view'); ?></a>
<?php if($this->User()->getIsAdmin()): ?>
<button class="btn btn-default btn-sm dropdown-toggle" data-toggle="dropdown">
<span class="caret"></span>
</button>
<ul class="dropdown-menu">
<li><a href="<?php echo APP_URL ?>build/delete/<?php print $build->getId(); ?>" class="app-delete-build"><?php Lang::out('delete_build'); ?></a></li>
</ul>
<?php endif; ?>
</div>
</td>
</tr>
<?php endforeach; ?>

View file

@ -13,7 +13,7 @@
<div>
<p>
Your commit <strong><?php print $build->getCommitId(); ?></strong> generated a
<?php print $build->isSuccessful() ? 'successful' : 'failed'; ?> build in project
<?php print $build->isSuccessful() ? 'success' : 'failed'; ?> build in project
<strong><?php print $project->getTitle(); ?></strong>.
</p>
<?php print $content; ?>

View file

@ -1,5 +1,5 @@
<?php use PHPCensor\Helper\Lang; ?>
<div class="box box-primary">
<div class="box">
<div class="box-header">
<h3 class="box-title"><?php Lang::out('group_add_edit'); ?></h3>
</div>

View file

@ -5,7 +5,7 @@
</a>
</div>
<div class="box box-primary">
<div class="box">
<div class="box-header">
<h3 class="box-title"><?php Lang::out('project_groups'); ?></h3>
</div>

View file

@ -3,7 +3,7 @@
<div class="col-sm-5">
<?php foreach ($groups as $group): ?>
<div class="box box-primary">
<div class="box">
<div class="box-header">
<h3 class="box-title"><?php print $group['title']; ?></h3>
</div>
@ -16,7 +16,7 @@
</div>
<div class="col-sm-7 pull-left">
<div class="box box-primary">
<div class="box">
<div class="box-header">
<h3 class="box-title"><?php Lang::out('latest_builds'); ?></h3>
</div>
@ -42,7 +42,7 @@
case \PHPCensor\Model\Build::STATUS_SUCCESS:
$updated = $build->getFinished();
$label = Lang::get('successful');
$label = Lang::get('success');
$color = 'green';
break;

View file

@ -8,7 +8,7 @@
<div class="row">
<div class="col-md-6">
<div class="box box-primary">
<div class="box">
<div class="box-header">
<h3 class="box-title"><?php Lang::out('enabled_plugins'); ?></h3>
</div>
@ -35,7 +35,7 @@
</div>
<div class="col-md-6">
<div class="box box-primary">
<div class="box">
<div class="box-header">
<h3 class="box-title"><?php Lang::out('installed_packages'); ?></h3>
</div>

View file

@ -42,34 +42,34 @@
<div class="row">
<div class="col-lg-9 col-md-8 col-sm-8">
<div class="box box-primary">
<div class="col-lg-9 col-md-8 col-sm-8">
<div class="box">
<div class="box-header">
<h3 class="box-title"><?php Lang::out('builds'); ?> (<?php print $total; ?>)</h3>
</div>
<table class="table">
<thead>
<tr>
<th><?php Lang::out('id'); ?></th>
<table class="table">
<thead>
<tr>
<th><?php Lang::out('id'); ?></th>
<th><?php Lang::out('date'); ?></th>
<th><?php Lang::out('project'); ?></th>
<th class="hidden-md hidden-sm hidden-xs"><?php Lang::out('commit'); ?></th>
<th><?php Lang::out('branch'); ?></th>
<th><?php Lang::out('status'); ?></th>
<th style="width: 100px"></th>
</tr>
</thead>
<tbody id="latest-builds">
<?php print $builds; ?>
</tbody>
</table>
<th><?php Lang::out('project'); ?></th>
<th class="hidden-md hidden-sm hidden-xs"><?php Lang::out('commit'); ?></th>
<th><?php Lang::out('branch'); ?></th>
<th><?php Lang::out('status'); ?></th>
<th style="width: 100px"></th>
</tr>
</thead>
<tbody id="latest-builds">
<?php print $builds; ?>
</tbody>
</table>
</div>
</div>
</div>
<div class="col-lg-3 col-md-4 col-sm-4">
<?php if (in_array($project->getType(), ['github', 'gitlab', 'bitbucket'])): ?>
<div class="box box-info">
<div class="box">
<div class="box-header">
<h4 class="box-title"><?php Lang::out('webhooks'); ?></h4>
</div>
@ -100,7 +100,7 @@
<?php endif; ?>
<?php if ($project->getSshPublicKey()): ?>
<div class="box box-info">
<div class="box">
<div class="box-header"><h3 class="box-title"><a data-toggle="collapse" data-parent="#accordion" href="#publicCollapse"><?php Lang::out('public_key'); ?></a></h3></div>
<div class="box-body" style="word-break: break-all;"><?php print $project->getSshPublicKey(); ?></div>
</div>

View file

@ -1,8 +1,8 @@
<?php use PHPCensor\Helper\Lang; ?>
<div class="row">
<div class="col-sm-8">
<div class="box box-primary">
<div class="col-sm-8">
<div class="box ">
<div class="box-header">
<h3 class="box-title"><?php Lang::out('project_details'); ?></h3>
</div>
@ -11,11 +11,11 @@
<?php print $form; ?>
</div>
</div>
</div>
</div>
<?php if(!is_null($key)): ?>
<div class="col-sm-4">
<div class="box box-info">
<div class="box">
<div class="box-body">
<p><?php Lang::out('public_key_help'); ?></p>

View file

@ -30,20 +30,20 @@
</p>
<?php endif; ?>
<div class="box box-primary">
<div class="box">
<div class="box-body clearfix">
<?php print $basicSettings; ?>
</div>
</div>
<div class="box box-primary">
<div class="box">
<div class="box-header"><h3 class="box-title"><?php Lang::out('build_settings'); ?></h3></div>
<div class="box-body clearfix">
<?php print $buildSettings; ?>
</div>
</div>
<div class="box box-primary">
<div class="box">
<div class="box-header"><h3 class="box-title"><?php Lang::out('github_application'); ?></h3></div>
<div class="box-body clearfix">
@ -81,7 +81,7 @@
</div>
<div class="col-lg-4">
<div class="box box-info">
<div class="box">
<div class="box-header">
<h3 class="box-title"><?php Lang::out('github_where_to_find'); ?></h3>
</div>
@ -99,7 +99,7 @@
</div>
<div class="box box-primary">
<div class="box">
<div class="box-header">
<h3 class="box-title"><?php Lang::out('email_settings'); ?></h3>
</div>
@ -116,7 +116,7 @@
</div>
</div>
<div class="box box-primary">
<div class="box">
<div class="box-header">
<h3 class="box-title">Authentication Settings</h3>
</div>

View file

@ -6,8 +6,8 @@
</div>
<div class="row">
<div class="col-xs-12">
<div class="box box-primary">
<div class="col-xs-12">
<div class="box">
<table class="table">
<thead>
@ -56,6 +56,5 @@
</tbody>
</table>
</div>
</div>
</div>
</div>

View file

@ -3,7 +3,7 @@
<p class="alert alert-success"><?php Lang::out('your_details_updated'); ?></p>
<?php endif; ?>
<div class="box box-primary">
<div class="box">
<div class="box-header">
<h3 class="box-title"><?php Lang::out('update_your_details'); ?></h3>
</div>

View file

@ -1,9 +1,9 @@
<div class="row">
<div class="col-sm-12">
<div class="box box-primary">
<div class="col-sm-12">
<div class="box">
<div class="box-body">
<?php print $form; ?>
</div>
</div>
</div>
</div>
</div>

View file

@ -12,16 +12,10 @@
<link href="<?php print APP_URL; ?>assets/vendor/admin-lte/plugins/daterangepicker/daterangepicker.css" rel="stylesheet" type="text/css" />
<link href="<?php print APP_URL; ?>assets/css/ansi-colors.css" rel="stylesheet" type="text/css" />
<link href="<?php print APP_URL; ?>assets/css/main.css" rel="stylesheet" type="text/css" />
<link href="<?php print APP_URL; ?>assets/css/admin-lte-skins.css" rel="stylesheet" type="text/css" />
<link href="<?php print APP_URL; ?>assets/vendor/font-awesome/css/font-awesome.min.css" rel="stylesheet" type="text/css" />
<link href="<?php print APP_URL; ?>assets/vendor/ion-icons/css/ionicons.min.css" rel="stylesheet" type="text/css" />
<style type="text/css">
.visible-line-breaks {
white-space: pre-wrap;
}
</style>
<script>
var APP_URL = '<?php print APP_URL; ?>';
var LANGUAGE = <?php print json_encode(Lang::getLanguage()); ?>;

View file

@ -62,6 +62,25 @@ class CommandExecutorTest extends \PHPUnit_Framework_TestCase
$this->assertFalse($returnValue);
}
/**
* Runs a script that generates an output that fills the standard error
* buffer first, followed by the standard output buffer. The function
* should be able to read from both streams, thereby preventing the child
* process from blocking because one of its buffers is full.
*/
public function testExecuteCommand_AlternatesBothBuffers()
{
$length = 80000;
$script = <<<EOD
/bin/sh -c 'data="$(printf %%${length}s | tr " " "-")"; >&2 echo "\$data"; >&1 echo "\$data"'
EOD;
$data = str_repeat("-", $length);
$returnValue = $this->testedExecutor->executeCommand(array($script));
$this->assertTrue($returnValue);
$this->assertEquals($data, trim($this->testedExecutor->getLastOutput()));
$this->assertEquals($data, trim($this->testedExecutor->getLastError()));
}
public function testFindBinary_ReturnsPathInSpecifiedRoot()
{
$thisFileName = "CommandExecutorTest.php";

View file

@ -305,7 +305,7 @@ class EmailTest extends \PHPUnit_Framework_TestCase
$this->testedEmailPlugin->execute();
$this->assertContains('Passing', $this->message['subject']);
$this->assertContains('successful', $this->message['body']);
$this->assertContains('success', $this->message['body']);
}
public function testMailFailingBuildHaveStatus()