diff options
Diffstat (limited to 'framework')
| -rw-r--r-- | framework/Collections/TList.php | 27 | ||||
| -rw-r--r-- | framework/Collections/TMap.php | 14 | ||||
| -rw-r--r-- | framework/Web/UI/WebControls/TDataGrid.php | 4 | 
3 files changed, 24 insertions, 21 deletions
| diff --git a/framework/Collections/TList.php b/framework/Collections/TList.php index f2628231..132f2be6 100644 --- a/framework/Collections/TList.php +++ b/framework/Collections/TList.php @@ -90,7 +90,7 @@ class TList extends TComponent implements IteratorAggregate,ArrayAccess  	 */
  	public function itemAt($index)
  	{
 -		if(isset($this->_d[$index]))
 +		if($index>=0 && $index<$this->_c)
  			return $this->_d[$index];
  		else
  			throw new TInvalidDataValueException('list_index_invalid',$index);
 @@ -149,15 +149,17 @@ class TList extends TComponent implements IteratorAggregate,ArrayAccess  	 */
  	public function removeAt($index)
  	{
 -		if(isset($this->_d[$index]))
 +		if($index>=0 && $index<$this->_c)
  		{
 -			$item=$this->_d[$index];
 -			if($index===$this->_c-1)
 -				unset($this->_d[$index]);
 +			$this->_c--;
 +			if($index===$this->_c)
 +				return array_pop($this->_d);
  			else
 +			{
 +				$item=$this->_d[$index];
  				array_splice($this->_d,$index,1);
 -			$this->_c--;
 -			return $item;
 +				return $item;
 +			}
  		}
  		else
  			throw new TInvalidDataValueException('list_index_invalid',$index);
 @@ -245,7 +247,7 @@ class TList extends TComponent implements IteratorAggregate,ArrayAccess  	 */
  	public function offsetExists($offset)
  	{
 -		return isset($this->_d[$offset]);
 +		return ($offset>=0 && $offset<$this->_c);
  	}
  	/**
 @@ -257,7 +259,7 @@ class TList extends TComponent implements IteratorAggregate,ArrayAccess  	 */
  	public function offsetGet($offset)
  	{
 -		if(isset($this->_d[$offset]))
 +		if($offset>=0 && $offset<$this->_c)
  			return $this->_d[$offset];
  		else
  			throw new TInvalidDataValueException('list_index_invalid',$offset);
 @@ -317,6 +319,10 @@ class TListIterator implements Iterator  	 * @var integer index of the current item
  	 */
  	private $_i;
 +	/**
 +	 * @var integer count of the data items
 +	 */
 +	private $_c;
  	/**
  	 * Constructor.
 @@ -326,6 +332,7 @@ class TListIterator implements Iterator  	{
  		$this->_d=&$data;
  		$this->_i=0;
 +		$this->_c=count($this->_d);
  	}
  	/**
 @@ -373,7 +380,7 @@ class TListIterator implements Iterator  	 */
  	public function valid()
  	{
 -		return isset($this->_d[$this->_i]);
 +		return $this->_i<$this->_c;
  	}
  }
 diff --git a/framework/Collections/TMap.php b/framework/Collections/TMap.php index be37a46b..4d810503 100644 --- a/framework/Collections/TMap.php +++ b/framework/Collections/TMap.php @@ -97,14 +97,12 @@ class TMap extends TComponent implements IteratorAggregate,ArrayAccess  	/**
  	 * Adds an item into the map.
 -	 * Note, if the specified key already exists, the old value will be removed first.
 +	 * Note, if the specified key already exists, the old value will be overwritten.
  	 * @param mixed key
  	 * @param mixed value
  	 */
  	public function add($key,$value)
  	{
 -		if(isset($this->_d[$key]))
 -			$this->remove($key);
  		$this->_d[$key]=$value;
  	}
 @@ -116,7 +114,7 @@ class TMap extends TComponent implements IteratorAggregate,ArrayAccess  	 */
  	public function remove($key)
  	{
 -		if(isset($this->_d[$key]))
 +		if(isset($this->_d[$key]) || array_key_exists($key,$this->_d))
  		{
  			$value=$this->_d[$key];
  			unset($this->_d[$key]);
 @@ -141,7 +139,7 @@ class TMap extends TComponent implements IteratorAggregate,ArrayAccess  	 */
  	public function contains($key)
  	{
 -		return isset($this->_d[$key]);
 +		return isset($this->_d[$key]) || array_key_exists($key,$this->_d);
  	}
  	/**
 @@ -305,11 +303,7 @@ class TMapIterator implements Iterator  	 */
  	public function next()
  	{
 -		do
 -		{
 -			$this->_key=next($this->_keys);
 -		}
 -		while(!isset($this->_d[$this->_key]) && $this->_key!==false);
 +		$this->_key=next($this->_keys);
  	}
  	/**
 diff --git a/framework/Web/UI/WebControls/TDataGrid.php b/framework/Web/UI/WebControls/TDataGrid.php index f8dd0b17..f7f51e04 100644 --- a/framework/Web/UI/WebControls/TDataGrid.php +++ b/framework/Web/UI/WebControls/TDataGrid.php @@ -773,7 +773,7 @@ class TDataGrid extends TBaseDataList  			else
  				$this->_autoColumns=null;
  			$state=$this->getViewState('Columns',array());
 -			if($this->_columns)
 +			if($this->_columns && $this->_columns->getCount()===count($state))
  			{
  				$i=0;
  				foreach($this->_columns as $column)
 @@ -824,6 +824,8 @@ class TDataGrid extends TBaseDataList  		$columns=new TList($this->getColumns());
  		$columns->mergeWith($this->_autoColumns);
 +		$items=$this->getItems();
 +
  		if($columns->getCount()>0)
  		{
  			foreach($columns as $column)
 | 
