args = $args; $this->args_default = array(); $this->filters = array(); $this->labels = array(); $this->callbacks = array(); $this->_key = 'filter-'.$key; $this->_storage = $storage; $this->_init_args(); $this->_trash_filtr = null; } function get_arg( $name ) { // try load from @storage and save if (array_key_exists($name, $this->args)) { return $this->args[ $name ]; } else if (array_key_exists($name, $this->args_default)) { return $this->args_default[ $name ]; } return null; } function _init_args() { if (array_key_exists('filtr_clear', $this->args) && $this->args['filtr_clear'] == 1) { $this->args = array(); } else { $this->_read_args(); } } function add_filter( $name, $values, $default, $label = '', $callback = null ) { $this->filters[ $name ] = $values; $this->labels[ $name ] = ($label)? $label : $name; $this->args_default[ $name ] = $default; if ($callback) $this->callbacks[ $name ] = $callback; } function _save_args() { if (!$this->_key) { return; } if ($this->_storage == 'cookie') { $this->_save_args_in_cookie(); } else { $this->_save_args_in_session(); } } function _save_args_in_session() { if (!$this->_key) { return; } $save_args = array(); foreach ($this->filters as $name => $options) { $arg = (isset($this->args[$name]))? $this->args[$name] : ''; if (count($options) == 1 && reset($options) == 'search') { if ($arg != $this->args_default[$name]) { $option = $arg; $save_args []= ''.urlencode($name).'='.urlencode($option); } } else { foreach($options as $option => $field_name) { if (isset($this->args[$name]) && $this->args[$name] == $option) { $save_args []= ''.urlencode($name).'='.urlencode($option); } } } } $save_args = implode(',', $save_args); $_SESSION[ $this->_key ] = $save_args; } function _save_args_in_cookie() { if (!$this->_key) { return; } $save_args = array(); foreach ($this->filters as $name => $options) { $arg = (isset($this->args[$name]))? $this->args[$name] : ''; if (count($options) == 1 && reset($options) == 'search') { if ($arg != $this->args_default[$name]) { $option = $arg; $save_args []= ''.urlencode($name).'='.urlencode($option); } } else { foreach($options as $option => $field_name) { if (isset($this->args[$name]) && $this->args[$name] == $option) { $save_args []= ''.urlencode($name).'='.urlencode($option); } } } } // if ($save_args) { $save_args = implode(',', $save_args); echo''; // } } function _read_args($force = false) { if (!$this->_key) { return; } if ($this->_storage == 'cookie') { $this->_read_args_from_cookie($force); } else { $this->_read_args_from_session($force); } } function _read_args_from_session($force = false) { if (!$this->_key) { return; } if (!array_key_exists($this->_key, $_SESSION)) { return; } $c_args = explode(',', $_SESSION[$this->_key]); //echo'
read from session c_args: '.$_SESSION[$this->_key].'
'; foreach ($c_args as $c_val) { $c_val = explode('=', $c_val); if (count($c_val) != 2) continue; $name = urldecode($c_val[0]); $option = urldecode($c_val[1]); if ($force || !array_key_exists($name, $this->args)) { //echo'read from session: '.$name.' / '.$this->args[ $name ].' / set '.$option.'
'; $this->args[ $name ] = $option; } }//end foreach } /** * Read args from cookie. */ function _read_args_from_cookie($force = false) { if (!$this->_key) { return; } if (!array_key_exists($this->_key, $_COOKIE)) { return; } $c_args = explode(',', $_COOKIE[$this->_key]); foreach ($c_args as $c_val) { $c_val = explode('=', $c_val); if (count($c_val) != 2) continue; $name = urldecode($c_val[0]); $option = urldecode($c_val[1]); if ($force || !array_key_exists($name, $this->args)) { $this->args[ $name ] = $option; } }//end foreach } /** * Print form fields. Must be inside