* finish task #901.

This commit is contained in:
wangyidong
2012-11-26 05:34:50 +00:00
parent 7cf9a89178
commit 3910229e1d
2 changed files with 49 additions and 25 deletions
+32 -21
View File
@@ -74,7 +74,6 @@ class productModel extends model
$productGroup[$this->lang->product->statusList['closed']][$product->id] = $product->name;
}
}
ksort($productGroup);
/**
* 1. if user selected by mouse, reload it.
@@ -137,26 +136,8 @@ class productModel extends model
if($product->acl == 'open') return true;
/* Get team members. */
$teamMembers = $this->getTeamMemberPairs($product);
/* Private. */
if($product->acl == 'private')
{
return isset($teamMembers[$this->app->user->account]);
}
/* Custom, check groups. */
if($product->acl == 'custom')
{
if(isset($teamMembers[$this->app->user->account])) return true;
$userGroups = $this->app->user->groups;
$productGroups = explode(',', $product->whitelist);
foreach($userGroups as $groupID)
{
if(in_array($groupID, $productGroups)) return true;
}
return false;
}
$privProducts = $this->getPrivProducts();
return isset($privProducts[$product->id]) ? true : false;;
}
/**
@@ -541,4 +522,34 @@ class productModel extends model
return $stats;
}
public function getPrivProducts()
{
$account = ',' . $this->app->user->account . ',';
static $products;
if($products === null)
{
$groupSql = '';
foreach($this->app->user->groups as $group) $groupSql .= "INSTR(CONCAT(',', t1.whitelist, ','), ',$group,') > 0 OR ";
$groupSql = !empty($groupSql) ? '(' . substr($groupSql, 0, strlen($groupSql) - 4) . ')' : '1 != 1';
$products = $this->dao->select('distinct t1.id')->from(TABLE_PRODUCT)->alias('t1')
->leftJoin(TABLE_PROJECTPRODUCT)->alias('t2')->on('t1.id = t2.product')
->leftJoin(TABLE_TEAM)->alias('t3')->on('t2.project = t3.project')
->leftJoin(TABLE_PROJECT)->alias('t4')->on('t2.project = t4.id')
->beginIF(strpos($this->app->company->admins, $account) !== false)->where('t1.deleted')->eq(0)->fi()
->beginIF(strpos($this->app->company->admins, $account) === false)
->where('t1.acl')->eq('open')
->orWhere("(t1.acl = 'custom' AND $groupSql)")
->orWhere('t1.PO')->eq($this->app->user->account)
->orWhere('t1.QM')->eq($this->app->user->account)
->orWhere('t1.RM')->eq($this->app->user->account)
->orWhere('t1.createdBy')->eq($this->app->user->account)
->orWhere('t3.account')->eq($this->app->user->account)
->andWhere('t1.deleted')->eq(0)
->andWhere('t4.deleted')->eq(0)
->fi()
->fetchAll('id');
}
return $products;
}
}
+17 -4
View File
@@ -136,10 +136,23 @@ class searchModel extends model
*/
public function setDefaultParams($fields, $params)
{
$users = $this->loadModel('user')->getPairs();
$products = array('' => '') + $this->loadModel('product')->getPairs();
$projects = array('' => '') + $this->loadModel('project')->getPairs();
$fields = array_keys($fields);
$hasProduct = false;
$hasProject = false;
$hasUser = false;
$fields = array_keys($fields);
foreach($fields as $fieldName)
{
if(empty($params[$fieldName])) continue;
if($params[$fieldName]['values'] == 'products') $hasProduct = true;
if($params[$fieldName]['values'] == 'users') $hasUser = true;
if($params[$fieldName]['values'] == 'projects') $hasProject = true;
}
if($hasUser) $users = $this->loadModel('user')->getPairs();
if($hasProduct) $products = array('' => '') + $this->loadModel('product')->getPairs();
if($hasProject) $projects = array('' => '') + $this->loadModel('project')->getPairs();
foreach($fields as $fieldName)
{
if(!isset($params[$fieldName])) $params[$fieldName] = array('operator' => '=', 'control' => 'input', 'values' => '');