Merge branch 'bugfixes' into dev
This commit is contained in:
commit
423fec24f5
16
README.md
16
README.md
@ -31,7 +31,7 @@ The server must have `sqlite` and `php5-sqlite` installed, as well as the `rewri
|
||||
|
||||
**Note:** For Apache v2.3.9 and later, virtual host for a site should have [`AllowOverride All`](http://httpd.apache.org/docs/2.4/mod/core.html#allowoverride) for TaskBoard root directory. Otherwise, .htaccess files will be completely ignored.
|
||||
|
||||
**Optional:** to build minimized JavaScript and CSS (Install step 3) you must have a jre installed, tested with `openjdk-7-jre` and `openjdk-8-jre`.
|
||||
**Optional:** to build minimized JavaScript and CSS (Install step 3) you must have curl and a jre installed, tested with `openjdk-7-jre` and `openjdk-8-jre`.
|
||||
|
||||
###Install
|
||||
|
||||
@ -43,9 +43,9 @@ Installing TaskBoard is as easy as 1, 2, (3), 4!
|
||||
|
||||
git clone https://github.com/kiswa/TaskBoard.git
|
||||
|
||||
2. Install the PHP dependencies via composer. Open `TaskBoard/build/` in a terminal and run `./composer.phar install`
|
||||
2. Install the PHP dependencies via composer. Open `TaskBoard/` in a terminal and run `./build/composer.phar install`
|
||||
|
||||
3. Open `TaskBoard/build/` in a terminal and run `./build-all`.
|
||||
3. (Optional) Open `TaskBoard/build/` in a terminal and run `./build-all`.
|
||||
|
||||
4. Visit the site and log in with the username and password `admin` (and don't forget to change the password once you're in!).
|
||||
|
||||
@ -116,17 +116,17 @@ If you find a bug, please post it on the [Issue Tracker](https://github.com/kisw
|
||||
It's silly to use [LOC](http://en.wikipedia.org/wiki/Source_lines_of_code) as a metric, but it can be interesting to see what goes into a project.
|
||||
This is only for TaskBoard files (library code is excluded), using [CLOC](http://cloc.sourceforge.net/).
|
||||
|
||||
Count was done from parent directory of TaskBoard as `./cloc-1.62.pl TaskBoard --exclude-dir=lib,vendor`.
|
||||
Count was done from parent directory of TaskBoard as `cloc TaskBoard --exclude-dir=lib,vendor`.
|
||||
|
||||
Language | Files | Blank Lines | Comments | Code
|
||||
-------------------|-------:|-------------:|---------:|---------:
|
||||
Javascript | 23 | 220 | 34 | 2092
|
||||
PHP | 9 | 233 | 55 | 1216
|
||||
Javascript | 23 | 220 | 34 | 2087
|
||||
PHP | 9 | 235 | 55 | 1220
|
||||
HTML | 24 | 12 | 10 | 1160
|
||||
CSS | 1 | 13 | 26 | 703
|
||||
Bourne Again Shell | 4 | 12 | 0 | 58
|
||||
JSON | 1 | 0 | 0 | 17
|
||||
XML | 1 | 0 | 0 | 12
|
||||
__SUM:__ | __63__ | __490__ | __125__ | __5258__
|
||||
__SUM:__ | __63__ | __492__ | __125__ | __5257__
|
||||
|
||||
Counts Last Updated: Jun 6, 2015
|
||||
Counts Last Updated: Nov 8, 2015
|
||||
|
22
VERSION
22
VERSION
@ -1,19 +1,9 @@
|
||||
v0.3.0
|
||||
v0.3.1
|
||||
|
||||
Changelog
|
||||
|
||||
* Adding a new Column to a board correctly shows it at the end of the columns.
|
||||
* The list of boards can be sorted.
|
||||
* Boards can be marked inactive to disallow using them without deleting.
|
||||
* The list of boards can be filtered.
|
||||
* Multiple logins per user are now possible.
|
||||
* Additional setting to disable animations throughout.
|
||||
* Expandable text inputs expand vertically and reset size on modal open.
|
||||
* 'Move to Column' context menu improvements.
|
||||
* Fix for missing Authorization header on some platforms.
|
||||
* Fix for missing Automatic Action trigger 'category change'.
|
||||
* Add ability to have emails sent on several status changes.
|
||||
* Pulled some inline styles out (two remain, but are required for coloring tasks).
|
||||
* Add setting to make new tasks appear at top or bottom of columns.
|
||||
* Removed "No description" text from empty tasks.
|
||||
* Add setting to hide "Assigned To: Unassigned" on tasks.
|
||||
* Fix automatic action color change bug.
|
||||
* Fix new user default board bug.
|
||||
* Fix boards button bug.
|
||||
* Fix modal display bug.
|
||||
* Allow email to be reset to nothing.
|
||||
|
@ -26,6 +26,7 @@ function exceptionHandler($exception) {
|
||||
set_exception_handler('exceptionHandler');
|
||||
|
||||
R::setup('sqlite:'.__DIR__.'/taskboard.db');
|
||||
R::setAutoResolve(TRUE);
|
||||
createInitialUser();
|
||||
|
||||
$app->notFound(function() use ($app, $jsonResponse) {
|
||||
|
@ -383,7 +383,7 @@ function createInitialUser() {
|
||||
$options->showAnimations = true;
|
||||
$options->showAssignee = true;
|
||||
|
||||
$admin->ownOptions[] = $options;
|
||||
$admin->xownOptionList[] = $options;
|
||||
|
||||
R::store($admin);
|
||||
}
|
||||
|
@ -145,6 +145,7 @@ $app->post('/items/positions', function() use ($app, $jsonResponse) {
|
||||
}
|
||||
$item->position = $posItem->position;
|
||||
|
||||
R::store($item);
|
||||
runAutoActions($item);
|
||||
R::store($item);
|
||||
}
|
||||
|
@ -138,7 +138,7 @@ $app->get('/users/current', function() use($app, $jsonResponse) {
|
||||
if (validateToken()) {
|
||||
$user = getUser();
|
||||
if (null != $user) {
|
||||
$userOptions = R::exportAll($user->ownOption);
|
||||
$userOptions = R::exportAll($user->xownOptionList);
|
||||
$options = array(
|
||||
'tasksOrder' => $userOptions[0]['tasks_order'],
|
||||
'showAssignee' => $userOptions[0]['show_assignee'] == 1,
|
||||
@ -163,9 +163,9 @@ $app->post('/users/current/options', function() use ($app, $jsonResponse) {
|
||||
if (validateToken()) {
|
||||
$user = getUser();
|
||||
|
||||
$user->ownOption[1]->tasksOrder = $data->tasksOrder;
|
||||
$user->ownOption[1]->showAssignee = $data->showAssignee;
|
||||
$user->ownOption[1]->showAnimations = $data->showAnimations;
|
||||
$user->xownOptionList[0]->tasksOrder = $data->tasksOrder;
|
||||
$user->xownOptionList[0]->showAssignee = $data->showAssignee;
|
||||
$user->xownOptionList[0]->showAnimations = $data->showAnimations;
|
||||
R::store($user);
|
||||
|
||||
$jsonResponse->data = $data;
|
||||
@ -198,15 +198,20 @@ $app->post('/users', function() use($app, $jsonResponse) {
|
||||
$user->defaultBoard = $data->defaultBoard;
|
||||
$user->salt = password_hash($data->username . time(), PASSWORD_BCRYPT);
|
||||
$user->password = password_hash($data->password, PASSWORD_BCRYPT, array('salt' => $user->salt));
|
||||
|
||||
$options = R::dispense('option');
|
||||
$options->newTaskPosition = 0; // Bottom of column (1 == top of column)
|
||||
$options->animate = true;
|
||||
$user->ownOptions = $options;
|
||||
$options->tasksOrder = 0; // Bottom of column (1 == top of column)
|
||||
$options->showAnimations = true;
|
||||
$options->showAssignee = true;
|
||||
$user->xownOptionList[] = $options;
|
||||
|
||||
R::store($user);
|
||||
addUserToBoard($data->defaultBoard, $user);
|
||||
foreach($data->boardAccess as $board) {
|
||||
addUserToBoard($board, $user);
|
||||
|
||||
if (property_exists($data, 'boardAccess') && is_array($data->boardAccess)) {
|
||||
foreach($data->boardAccess as $board) {
|
||||
addUserToBoard($board, $user);
|
||||
}
|
||||
}
|
||||
|
||||
$actor = getUser();
|
||||
|
Binary file not shown.
18
composer.lock
generated
18
composer.lock
generated
@ -135,16 +135,16 @@
|
||||
},
|
||||
{
|
||||
"name": "phpmailer/phpmailer",
|
||||
"version": "v5.2.10",
|
||||
"version": "v5.2.14",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/PHPMailer/PHPMailer.git",
|
||||
"reference": "07005ecbb80d11ec8c0f067bb37e8909cc7fcbb7"
|
||||
"reference": "e774bc9152de85547336e22b8926189e582ece95"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/PHPMailer/PHPMailer/zipball/07005ecbb80d11ec8c0f067bb37e8909cc7fcbb7",
|
||||
"reference": "07005ecbb80d11ec8c0f067bb37e8909cc7fcbb7",
|
||||
"url": "https://api.github.com/repos/PHPMailer/PHPMailer/zipball/e774bc9152de85547336e22b8926189e582ece95",
|
||||
"reference": "e774bc9152de85547336e22b8926189e582ece95",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
@ -152,12 +152,18 @@
|
||||
},
|
||||
"require-dev": {
|
||||
"phpdocumentor/phpdocumentor": "*",
|
||||
"phpunit/phpunit": "4.3.*"
|
||||
"phpunit/phpunit": "4.7.*"
|
||||
},
|
||||
"suggest": {
|
||||
"league/oauth2-client": "Needed for XOAUTH2 authentication",
|
||||
"league/oauth2-google": "Needed for Gmail XOAUTH2"
|
||||
},
|
||||
"type": "library",
|
||||
"autoload": {
|
||||
"classmap": [
|
||||
"class.phpmailer.php",
|
||||
"class.phpmaileroauth.php",
|
||||
"class.phpmaileroauthgoogle.php",
|
||||
"class.smtp.php",
|
||||
"class.pop3.php",
|
||||
"extras/EasyPeasyICS.php",
|
||||
@ -186,7 +192,7 @@
|
||||
}
|
||||
],
|
||||
"description": "PHPMailer is a full-featured email creation and transfer class for PHP",
|
||||
"time": "2015-05-04 12:37:21"
|
||||
"time": "2015-11-01 10:15:28"
|
||||
},
|
||||
{
|
||||
"name": "slim/slim",
|
||||
|
@ -550,6 +550,9 @@ span.filter {
|
||||
float: left;
|
||||
margin-bottom: 1em;
|
||||
}
|
||||
.board-options label {
|
||||
font-weight: normal;
|
||||
}
|
||||
#changeUserSettings hr, .board-options hr {
|
||||
clear: both;
|
||||
}
|
||||
|
@ -53,7 +53,7 @@ function($routeProvider, $httpProvider) {
|
||||
// Custom handlers for route authentication and rejection of invalid board id
|
||||
taskBoard.run(['$rootScope', '$location', '$window', 'AuthenticationService',
|
||||
function($rootScope, $location, $window, AuthenticationService) {
|
||||
$rootScope.version = 'v0.3.0';
|
||||
$rootScope.version = 'v0.3.1';
|
||||
|
||||
$rootScope.$on('$routeChangeStart', function(event, nextRoute, currentRoute) {
|
||||
// Redirect to default path if authentication is required but not present.
|
||||
|
@ -135,20 +135,15 @@ function ($scope, $interval, UserService) {
|
||||
$scope.changeEmail = function(newEmailFormData) {
|
||||
$scope.emailFormData.isSaving = true;
|
||||
|
||||
if (newEmailFormData.newEmail === '') {
|
||||
newEmailFormData.setAlert('Email cannot be blank.');
|
||||
newEmailFormData.isSaving = false;
|
||||
} else {
|
||||
UserService.changeEmail(newEmailFormData.newEmail)
|
||||
.success(function(data) {
|
||||
$scope.alerts.showAlerts(data.alerts);
|
||||
$scope.updateUsers(data.data);
|
||||
$scope.loadCurrentUser();
|
||||
UserService.changeEmail(newEmailFormData.newEmail)
|
||||
.success(function(data) {
|
||||
$scope.alerts.showAlerts(data.alerts);
|
||||
$scope.updateUsers(data.data);
|
||||
$scope.loadCurrentUser();
|
||||
|
||||
newEmailFormData.isSaving = false;
|
||||
newEmailFormData.newUsername = '';
|
||||
});
|
||||
}
|
||||
newEmailFormData.isSaving = false;
|
||||
newEmailFormData.newUsername = '';
|
||||
});
|
||||
};
|
||||
|
||||
$scope.updatingDefaultBoard = false;
|
||||
|
@ -7,14 +7,16 @@
|
||||
</select>
|
||||
</p>
|
||||
<p class="form-group form-inline">
|
||||
Show animations?
|
||||
<input type="checkbox" data-ng-model="currentUser.options.showAnimations"
|
||||
<label>Show animations?
|
||||
<input type="checkbox" data-ng-model="currentUser.options.showAnimations"
|
||||
data-ng-change="saveOptions()">
|
||||
</label>
|
||||
</p>
|
||||
<p class="form-group form-inline">
|
||||
Show Assignee on item card?
|
||||
<input type="checkbox" data-ng-model="currentUser.options.showAssignee"
|
||||
<label>Show Assignee on item card?
|
||||
<input type="checkbox" data-ng-model="currentUser.options.showAssignee"
|
||||
data-ng-change="saveOptions()">
|
||||
</label>
|
||||
</p>
|
||||
<hr>
|
||||
</div>
|
||||
|
Reference in New Issue
Block a user