Moving tasks - Preliminary version

* Works when moving tasks without dependencies. Crashes with a SQL error
due to FK violation when moving tasks with interdependencies (LTC ID?)

* The form is unable to force removal of external dependencies at this
time.

* Related PL/PgSQL code stored in database/temp.sql at this time.
This commit is contained in:
Emmanuel BENOîT 2016-01-04 11:01:28 +01:00
parent fd39819304
commit 59fec5529f
7 changed files with 395 additions and 8 deletions
includes/t-tasks

View file

@ -566,3 +566,125 @@ class Ctrl_TaskClaim
}
}
class Ctrl_TaskMove
extends Controller
implements FormAware
{
private $form;
public function setForm( Form $form )
{
$this->form = $form;
}
public function handle( Page $page )
{
$type = $this->form->field( 'type' );
$id = $this->form->field( 'id' );
$target = $this->form->field( 'target' );
$tasks = $this->form->field( 'tasks[]' );
$tFull = $target->value( );
if ( strlen( $tFull ) < 2 ) {
$target->putError( 'Invalid target.' );
return null;
}
$toTask = ( substr( $tFull , 0 , 1 ) == 'T' );
$toId = (int) substr( $tFull , 1 );
$error = Loader::DAO( 'tasks' )->moveTasks(
$type->value( ) === 's' , (int) $id->value( ) ,
$toTask , $toId , $tasks->value( ) ,
false ); // FIXME: should be read from the form
switch ( $error ) {
case 0:
return true;
case 1:
$tasks->putError( 'Selected tasks deleted.' );
break;
case 2:
$tasks->putError( 'Selected tasks moved.' );
break;
case 3:
$target->putError( 'Target has been deleted.' );
break;
case 4:
$target->putError( 'This is a child of a selected task.' );
break;
case 5:
$tasks->putError( 'Dependencies would be broken (FIXME: force mode)' );
break;
default:
$target->putError( "An unknown error occurred ($error)" );
break;
}
return null;
}
private function addTopLevelTask( )
{
$item = $this->form->field( 'item' );
$name = $this->form->field( 'title' );
$priority = $this->form->field( 'priority' );
$description = $this->form->field( 'description' );
$error = Loader::DAO( 'tasks' )->addTask( (int) $item->value( ) , $name->value( ) ,
(int) $priority->value( ) , $description->value( ) );
switch ( $error ) {
case 0:
return true;
case 1:
$name->putError( 'Duplicate task name for this item.' );
break;
case 2:
$item->putError( 'This item has been deleted' );
break;
default:
$name->putError( "An unknown error occurred ($error)" );
break;
}
return null;
}
private function addNestedTask( )
{
$parent = $this->form->field( 'parent' );
$name = $this->form->field( 'title' );
$priority = $this->form->field( 'priority' );
$description = $this->form->field( 'description' );
$error = Loader::DAO( 'tasks' )->addNestedTask( (int) $parent->value( ) ,
$name->value( ) , (int) $priority->value( ) , $description->value( ) );
switch ( $error ) {
case 0:
return true;
case 1:
$name->putError( 'Duplicate sub-task name.' );
break;
default:
$name->putError( "An unknown error occurred ($error)" );
break;
}
return null;
}
}