diff --git a/includes/t-tasks/controllers.inc.php b/includes/t-tasks/controllers.inc.php index de5862d..263a0fd 100644 --- a/includes/t-tasks/controllers.inc.php +++ b/includes/t-tasks/controllers.inc.php @@ -531,6 +531,8 @@ class Ctrl_DependencyAddFiltering extends Controller implements FormAware { + private static $fields = array( 'text' , 'state' , 'items' , 'item-children' , 'keep' ); + private $filtering; private $selector; private $task; @@ -553,6 +555,11 @@ class Ctrl_DependencyAddFiltering $this->filterTaskDependencies( ); $this->addDependencySelector( ); $this->copyFiltersToSelector( ); + if ( $this->getField( 'keep' ) ) { + $this->saveToSession( ); + } elseif ( array_key_exists( 'add-dep-filters' , $_SESSION ) ) { + unset( $_SESSION[ 'add-dep-filters' ] ); + } return null; } @@ -679,8 +686,7 @@ class Ctrl_DependencyAddFiltering private function copyFiltersToSelector( ) { - $fields = array( 'text' , 'state' , 'items' , 'item-children' ); - foreach ( $fields as $f ) { + foreach ( Ctrl_DependencyAddFiltering::$fields as $f ) { $v = $this->getField( $f ); $this->selector->addField( Loader::Create( 'Field' , 'filters-' . $f , 'hidden' ) @@ -689,10 +695,25 @@ class Ctrl_DependencyAddFiltering } } + private function saveToSession( ) + { + if ( array_key_exists( 'add-dep-filters' , $_SESSION ) ) { + $values = $_SESSION[ 'add-dep-filters' ]; + } else { + $values = array( ); + } + foreach ( Ctrl_DependencyAddFiltering::$fields as $f ) { + $fld = $this->filtering->field( $f ); + if ( $fld !== null ) { + $values[ $f ] = $fld->value( ); + } + } + $_SESSION[ 'add-dep-filters' ] = $values; + } + public function getFiltersFromSelector( ) { - $fields = array( 'text' , 'state' , 'items' , 'item-children' ); - foreach ( $fields as $f ) { + foreach ( Ctrl_DependencyAddFiltering::$fields as $f ) { $field = $this->filtering->field( $f ); if ( $field !== null ) { $fv = $this->getParameter( 'filters-' . $f , 'POST' ); @@ -701,6 +722,22 @@ class Ctrl_DependencyAddFiltering } } + public function getFiltersFromSession( ) + { + if ( !array_key_exists( 'add-dep-filters' , $_SESSION ) ) { + return; + } + $values = $_SESSION[ 'add-dep-filters' ]; + foreach ( Ctrl_DependencyAddFiltering::$fields as $f ) { + if ( array_key_exists( $f , $values ) ) { + $field = $this->filtering->field( $f ); + if ( $field != null ) { + $field->setFormValue( $values[ $f ] ); + } + } + } + } + private function getField( $name ) { $fld = $this->filtering->field( $name ); diff --git a/includes/t-tasks/page_controllers.inc.php b/includes/t-tasks/page_controllers.inc.php index 5d469b5..9803f2b 100644 --- a/includes/t-tasks/page_controllers.inc.php +++ b/includes/t-tasks/page_controllers.inc.php @@ -488,6 +488,8 @@ class Ctrl_DependencyAddForm } if ( $submitted !== null ) { $fCtrl->getFiltersFromSelector( ); + } else { + $fCtrl->getFiltersFromSession( ); } // Fake handling the form @@ -527,6 +529,11 @@ class Ctrl_DependencyAddForm ->addOption( '1' , 'Yes' ) ->addOption( '0' , 'No' ) ); } + $filters->addField( Loader::Create( 'Field' , 'keep' , 'select' ) + ->setMandatory( false ) + ->setDescription( 'Keep these filters for next time' ) + ->addOption( '0' , 'No' ) + ->addOption( '1' , 'Yes' ) ); return $filters; }