"Remove dependency" implemented
Added a link to dependency views which causes dependencies to be removed after a confirmation page.
This commit is contained in:
parent
ba3fcc2470
commit
bbf2c4a13c
6 changed files with 116 additions and 4 deletions
|
@ -231,4 +231,10 @@ class DAO_Tasks
|
||||||
return $result[0]->error;
|
return $result[0]->error;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function deleteDependency( $from , $to )
|
||||||
|
{
|
||||||
|
$this->query( 'DELETE FROM task_dependencies WHERE task_id = $1 AND task_id_depends = $2' )
|
||||||
|
->execute( $from , $to );
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -385,3 +385,24 @@ class Ctrl_DependencyAdd
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
class Ctrl_DependencyDelete
|
||||||
|
extends Controller
|
||||||
|
implements FormAware
|
||||||
|
{
|
||||||
|
private $form;
|
||||||
|
|
||||||
|
public function setForm( Form $form )
|
||||||
|
{
|
||||||
|
$this->form = $form;
|
||||||
|
}
|
||||||
|
|
||||||
|
public function handle( Page $page )
|
||||||
|
{
|
||||||
|
Loader::DAO( 'tasks' )->deleteDependency(
|
||||||
|
(int) $this->form->field( 'from' )->value( ) ,
|
||||||
|
(int) $this->form->field( 'to' )->value( ) );
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -20,6 +20,8 @@ $package[ 'ctrls' ][] = 'delete_task_form';
|
||||||
$package[ 'ctrls' ][] = 'delete_task';
|
$package[ 'ctrls' ][] = 'delete_task';
|
||||||
$package[ 'ctrls' ][] = 'dependency_add';
|
$package[ 'ctrls' ][] = 'dependency_add';
|
||||||
$package[ 'ctrls' ][] = 'dependency_add_form';
|
$package[ 'ctrls' ][] = 'dependency_add_form';
|
||||||
|
$package[ 'ctrls' ][] = 'dependency_delete';
|
||||||
|
$package[ 'ctrls' ][] = 'dependency_delete_form';
|
||||||
$package[ 'ctrls' ][] = 'edit_note_form';
|
$package[ 'ctrls' ][] = 'edit_note_form';
|
||||||
$package[ 'ctrls' ][] = 'edit_note';
|
$package[ 'ctrls' ][] = 'edit_note';
|
||||||
$package[ 'ctrls' ][] = 'edit_task_form';
|
$package[ 'ctrls' ][] = 'edit_task_form';
|
||||||
|
|
|
@ -447,3 +447,73 @@ class Ctrl_DependencyAddForm
|
||||||
return $result;
|
return $result;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
class Ctrl_DependencyDeleteForm
|
||||||
|
extends Controller
|
||||||
|
{
|
||||||
|
|
||||||
|
public function handle( Page $page )
|
||||||
|
{
|
||||||
|
$tasks = Loader::DAO( 'tasks' );
|
||||||
|
|
||||||
|
// Get the task a dependency is being removed from
|
||||||
|
try {
|
||||||
|
$from = (int) $this->getParameter( 'from' );
|
||||||
|
} catch ( ParameterException $e ) {
|
||||||
|
return 'tasks';
|
||||||
|
}
|
||||||
|
$task = $tasks->get( $from );
|
||||||
|
if ( $task === null ) {
|
||||||
|
return 'tasks';
|
||||||
|
}
|
||||||
|
$page->setTitle( $task->title . ' (task)' );
|
||||||
|
if ( $task->completed_at !== null ) {
|
||||||
|
return 'tasks/view?id=' . $from;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get the dependency being deleted
|
||||||
|
try {
|
||||||
|
$to = (int) $this->getParameter( 'to' );
|
||||||
|
} catch ( ParameterException $e ) {
|
||||||
|
return 'tasks/view?id=' . $from;
|
||||||
|
}
|
||||||
|
$dependency = $tasks->get( $to );
|
||||||
|
if ( $dependency === null || ! $this->checkDependency( $task , $to ) ) {
|
||||||
|
return 'tasks/view?id=' . $from;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Generate confirmation text
|
||||||
|
$confText = HTML::make( 'div' )
|
||||||
|
->appendElement( HTML::make( 'p' )
|
||||||
|
->appendText( 'The selected task will no longer depend on ' )
|
||||||
|
->appendElement( HTML::make( 'strong' )
|
||||||
|
->appendText( $dependency->title ) )
|
||||||
|
->appendText( '.' ) );
|
||||||
|
|
||||||
|
// Generate form
|
||||||
|
return Loader::Create( 'Form' , 'Delete dependency' , 'delete-dep' )
|
||||||
|
->addField( Loader::Create( 'Field' , 'from' , 'hidden' )
|
||||||
|
->setDefaultValue( $from ) )
|
||||||
|
->addField( Loader::Create( 'Field' , 'to' , 'hidden' )
|
||||||
|
->setDefaultValue( $to ) )
|
||||||
|
->addField( Loader::Create( 'Field' , 'confirm' , 'html' )->setDefaultValue( $confText ) )
|
||||||
|
->setURL( 'tasks/view?id=' . $from )
|
||||||
|
->addController( Loader::Ctrl( 'dependency_delete' ) )
|
||||||
|
->controller( );
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private function checkDependency( $task , $to )
|
||||||
|
{
|
||||||
|
foreach ( $task->dependencies as $dep ) {
|
||||||
|
if ( $dep->id == $to ) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -17,6 +17,7 @@ class Page_TasksTasks
|
||||||
'notes/edit' => 'edit_note_form' ,
|
'notes/edit' => 'edit_note_form' ,
|
||||||
'notes/delete' => 'delete_note_form' ,
|
'notes/delete' => 'delete_note_form' ,
|
||||||
'deps/add' => 'dependency_add_form' ,
|
'deps/add' => 'dependency_add_form' ,
|
||||||
|
'deps/delete' => 'dependency_delete_form' ,
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -306,14 +306,26 @@ class View_TaskDependencies
|
||||||
->appendElement( $itemList ) );
|
->appendElement( $itemList ) );
|
||||||
$prevItem = $dependency->item;
|
$prevItem = $dependency->item;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$entry = HTML::make( 'li' )->appendElement(
|
||||||
$link = HTML::make( 'a' )
|
$link = HTML::make( 'a' )
|
||||||
->setAttribute( 'href' , $this->base . '/tasks/view?id=' . $dependency->id )
|
->setAttribute( 'href' , $this->base . '/tasks/view?id=' . $dependency->id )
|
||||||
->appendText( $dependency->title );
|
->appendText( $dependency->title ) );
|
||||||
if ( ! $this->reverse ) {
|
if ( ! $this->reverse ) {
|
||||||
$link->setAttribute( 'class' , ( $dependency->completed == 't' )
|
$link->setAttribute( 'class' , ( $dependency->completed == 't' )
|
||||||
? 'satisfied' : 'missing' );
|
? 'satisfied' : 'missing' );
|
||||||
|
|
||||||
|
if ( $this->task->completed_at === null ) {
|
||||||
|
$entry->appendText( ' (' )
|
||||||
|
->appendElement( HTML::make( 'a' )
|
||||||
|
->setAttribute( 'href' , $this->base . '/tasks/deps/delete?from='
|
||||||
|
. $this->task->id . '&to=' . $dependency->id )
|
||||||
|
->appendText( 'remove') )
|
||||||
|
->appendText( ')' );
|
||||||
}
|
}
|
||||||
$itemList->appendElement( HTML::make( 'li' )->appendElement( $link ) );
|
}
|
||||||
|
|
||||||
|
$itemList->appendElement( $entry );
|
||||||
}
|
}
|
||||||
return $list;
|
return $list;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue