Dependency filters can be kept during a session
This commit is contained in:
parent
525497e1f4
commit
fa45d59ea8
2 changed files with 48 additions and 4 deletions
|
@ -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 );
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue