Skip to content

Commit

Permalink
Update CSort.php
Browse files Browse the repository at this point in the history
Now CSort can get object. Add method for modelClass (hasModelClass & getModelClass)
Fix getDirections() - get default order from string criteria.
  • Loading branch information
Xakki committed Mar 19, 2013
1 parent 6ff26bd commit 03d5305
Showing 1 changed file with 46 additions and 11 deletions.
57 changes: 46 additions & 11 deletions framework/web/CSort.php
Expand Up @@ -205,6 +205,25 @@ public function __construct($modelClass=null)
$this->modelClass=$modelClass;
}

/**
* Check connection model
*/
private function hasModelClass()
{
return ($this->modelClass?true:false);
}

/**
* get object of connect model
* return link object
*/
private function getModelClass()
{
if(is_string($this->modelClass) and $this->modelClass)
$this->modelClass = CActiveRecord::model($this->modelClass);
return $this->modelClass;
}

/**
* Modifies the query criteria by changing its {@link CDbCriteria::order} property.
* This method will use {@link directions} to determine which columns need to be sorted.
Expand Down Expand Up @@ -236,8 +255,8 @@ public function getOrderBy($criteria=null)
return is_string($this->defaultOrder) ? $this->defaultOrder : '';
else
{
if($this->modelClass!==null)
$schema=CActiveRecord::model($this->modelClass)->getDbConnection()->getSchema();
if($this->hasModelClass())
$schema = $this->getModelClass()->getDbConnection()->getSchema();
$orders=array();
foreach($directions as $attribute=>$descending)
{
Expand All @@ -257,7 +276,7 @@ public function getOrderBy($criteria=null)
if(($pos=strpos($attribute,'.'))!==false)
$attribute=$schema->quoteTableName(substr($attribute,0,$pos)).'.'.$schema->quoteColumnName(substr($attribute,$pos+1));
else
$attribute=($criteria===null || $criteria->alias===null ? CActiveRecord::model($this->modelClass)->getTableAlias(true) : $schema->quoteTableName($criteria->alias)).'.'.$schema->quoteColumnName($attribute);
$attribute=($criteria===null || $criteria->alias===null ? $this->getModelClass()->getTableAlias(true) : $schema->quoteTableName($criteria->alias)).'.'.$schema->quoteColumnName($attribute);
}
$orders[]=$descending?$attribute.' DESC':$attribute;
}
Expand Down Expand Up @@ -326,8 +345,9 @@ public function resolveLabel($attribute)
}
elseif(is_string($definition))
$attribute=$definition;
if($this->modelClass!==null)
return CActiveRecord::model($this->modelClass)->getAttributeLabel($attribute);

if( $this->hasModelClass() )
return $this->getModelClass()->getAttributeLabel($attribute);
else
return $attribute;
}
Expand Down Expand Up @@ -365,8 +385,23 @@ public function getDirections()
}
}
}
if($this->_directions===array() && is_array($this->defaultOrder))
$this->_directions=$this->defaultOrder;
if($this->_directions===array())
{
if(is_array($this->defaultOrder))
{
$this->_directions=$this->defaultOrder;
}
// Support multiple sort
elseif($this->defaultOrder)
{
$list = explode(',', $this->defaultOrder);
foreach($list as $i)
{
$i = explode(' ', trim($i) );
$this->_directions[trim($i[0])] = (stripos($i[1], 'DESC')===false ? static::SORT_ASC : static::SORT_DESC);
}
}
}
}
return $this->_directions;
}
Expand Down Expand Up @@ -421,8 +456,8 @@ public function resolveAttribute($attribute)
{
if($this->attributes!==array())
$attributes=$this->attributes;
elseif($this->modelClass!==null)
$attributes=CActiveRecord::model($this->modelClass)->attributeNames();
else if($this->hasModelClass())
$attributes = $this->getModelClass()->attributeNames();
else
return false;
foreach($attributes as $name=>$definition)
Expand All @@ -434,7 +469,7 @@ public function resolveAttribute($attribute)
}
elseif($definition==='*')
{
if($this->modelClass!==null && CActiveRecord::model($this->modelClass)->hasAttribute($attribute))
if($this->hasModelClass() && $this->getModelClass()->hasAttribute($attribute))
return $attribute;
}
elseif($definition===$attribute)
Expand All @@ -456,4 +491,4 @@ protected function createLink($attribute,$label,$url,$htmlOptions)
{
return CHtml::link($label,$url,$htmlOptions);
}
}
}

0 comments on commit 03d5305

Please sign in to comment.