protected function beforeStoreStatement(array &$response, array &$params, \GO\Base\Data\AbstractStore &$store, \GO\Base\Db\FindParams $storeParams) { //SELECT * FROM cal_categories t //LEFT JOIN go_acl ON (`t`.`acl_id` = go_acl.acl_id AND (go_acl.user_id=57 OR go_acl.group_id IN (2))) //WHERE t.calendar_id = 0 AND go_acl.acl_id IS NOT NULL OR t.calendar_id=56 $groupIds = \GO\Base\Model\User::getGroupIds(\GO::user()->id); $storeCriteria = $storeParams->getCriteria(); $joinUserGroupCriteria = \GO\Base\Db\FindCriteria::newInstance()->addCondition('user_id', \GO::user()->id, '=', 'go_acl', false)->addInCondition('group_id', $groupIds, 'go_acl', false); $joinCriteria = \GO\Base\Db\FindCriteria::newInstance()->addCondition('acl_id', 'go_acl.acl_id', '=', 't', true, true)->mergeWith($joinUserGroupCriteria); $storeParams->join('go_acl', $joinCriteria, 'go_acl', 'LEFT'); if (!empty($params['global_categories']) && !empty($params['calendar_id'])) { $storeCriteria->addCondition('calendar_id', 0, '=', 't', false); $storeCriteria->addCondition('acl_id', NULL, 'IS NOT', 'go_acl'); $storeCriteria->addCondition('calendar_id', $params['calendar_id'], '=', 't', false); } elseif (!empty($params['calendar_id'])) { $storeCriteria->addCondition('calendar_id', $params['calendar_id']); } else { $storeCriteria->addCondition('calendar_id', 0); } $storeParams->ignoreAcl(); return parent::beforeStoreStatement($response, $params, $store, $storeParams); }
private function _appendAclJoin($findParams, $aclJoinProps) { $sql = "\nINNER JOIN go_acl ON (`" . $aclJoinProps['table'] . "`.`" . $aclJoinProps['attribute'] . "` = go_acl.acl_id"; if (isset($findParams['permissionLevel']) && $findParams['permissionLevel'] > \GO\Base\Model\Acl::READ_PERMISSION) { $sql .= " AND go_acl.level>=" . intval($findParams['permissionLevel']); } $groupIds = \GO\Base\Model\User::getGroupIds($findParams['userId']); if (!empty($findParams['ignoreAdminGroup'])) { $key = array_search(GO::config()->group_root, $groupIds); if ($key !== false) { unset($groupIds[$key]); } } $sql .= " AND (go_acl.user_id=" . intval($findParams['userId']) . " OR go_acl.group_id IN (" . implode(',', $groupIds) . "))) "; return $sql; }
public function findRecent($start = false, $limit = false) { $storeParams = \GO\Base\Db\FindParams::newInstance()->ignoreAcl(); $joinSearchCacheCriteria = \GO\Base\Db\FindCriteria::newInstance()->addRawCondition('`t`.`id`', '`sc`.`model_id`')->addCondition('model_type_id', $this->modelTypeId(), '=', 'sc'); $storeParams->join(\GO\Base\Model\SearchCacheRecord::model()->tableName(), $joinSearchCacheCriteria, 'sc', 'INNER'); $aclJoinCriteria = \GO\Base\Db\FindCriteria::newInstance()->addRawCondition('a.acl_id', 'sc.acl_id', '=', false); $aclWhereCriteria = \GO\Base\Db\FindCriteria::newInstance()->addCondition('user_id', \GO::user()->id, '=', 'a', false)->addInCondition("group_id", \GO\Base\Model\User::getGroupIds(\GO::user()->id), "a", false); $storeParams->join(\GO\Base\Model\AclUsersGroups::model()->tableName(), $aclJoinCriteria, 'a', 'INNER'); $storeParams->criteria(\GO\Base\Db\FindCriteria::newInstance()->addModel(Folder::model())->mergeWith($aclWhereCriteria)); $storeParams->group(array('t.id'))->order('mtime', 'DESC'); $storeParams->getCriteria()->addCondition('mtime', \GO\Base\Util\Date::date_add(\GO\Base\Util\Date::clear_time(time()), -7), '>'); if ($start !== false) { $storeParams->start($start); } if ($limit !== false) { $storeParams->limit($limit); } return $this->find($storeParams); }
private function _searchFiles($params) { $response['success'] = true; $queryStr = !empty($params['query']) ? '%' . $params['query'] . '%' : '%'; $limit = !empty($params['limit']) ? $params['limit'] : 30; $start = !empty($params['start']) ? $params['start'] : 0; $aclJoinCriteria = \GO\Base\Db\FindCriteria::newInstance()->addRawCondition('a.acl_id', 'sc.acl_id', '=', false); $aclWhereCriteria = \GO\Base\Db\FindCriteria::newInstance()->addCondition('user_id', \GO::user()->id, '=', 'a', false)->addInCondition("group_id", \GO\Base\Model\User::getGroupIds(\GO::user()->id), "a", false); $findParams = \GO\Base\Db\FindParams::newInstance()->select('*')->ignoreAcl()->joinCustomFields()->joinModel(array('model' => 'GO\\Base\\Model\\SearchCacheRecord', 'localTableAlias' => 't', 'localField' => 'id', 'foreignField' => 'model_id', 'tableAlias' => 'sc'))->join(\GO\Base\Model\AclUsersGroups::model()->tableName(), $aclJoinCriteria, 'a', 'INNER')->debugSql()->criteria(\GO\Base\Db\FindCriteria::newInstance()->addCondition('model_type_id', \GO::getModel('GO\\Files\\Model\\File')->modelTypeId(), '=', 'sc', true)->mergeWith(\GO\Base\Db\FindCriteria::newInstance()->addCondition('name', $queryStr, 'LIKE', 'sc', false)->addCondition('keywords', $queryStr, 'LIKE', 'sc', false))->mergeWith($aclWhereCriteria)); $filesStmt = \GO\Files\Model\File::model()->find($findParams); $response['total'] = $filesStmt->rowCount(); $filesStmt = \GO\Files\Model\File::model()->find($findParams->start($start)->limit($limit)); $response['results'] = array(); $response['cm_state'] = ''; $response['may_apply_state'] = false; $response['lock_state'] = false; $response['permission_level'] = 0; foreach ($filesStmt as $searchFileModel) { $response['results'][] = $searchFileModel->getJsonData(); } return $response; }
/** * Check if the user is member of the admin group * * @return boolean */ public function isAdmin() { return in_array(GO::config()->group_root, User::getGroupIds($this->id)); }
/** * Get all the subfolders of this folder. This function checks permissions in a * special way. When folder have acl_id=0 they inherit permissions of the parent folder. * * @return \GO\Base\Db\ActiveStatement */ public function getSubFolders($findParams = false, $noGrouping = false) { if (!$findParams) { $findParams = \GO\Base\Db\FindParams::newInstance(); } $findParams->ignoreAcl(); //We'll build a special acl check for folders that inherit permissions here. //$findParams->debugSql(); $aclJoinCriteria = \GO\Base\Db\FindCriteria::newInstance()->addRawCondition('a.acl_id', 't.acl_id', '=', false); $aclWhereCriteria = \GO\Base\Db\FindCriteria::newInstance()->addCondition('acl_id', 0, '=', 't', false)->addCondition('user_id', \GO::user()->id, '=', 'a', false)->addInCondition("group_id", \GO\Base\Model\User::getGroupIds(\GO::user()->id), "a", false); $findParams->join(\GO\Base\Model\AclUsersGroups::model()->tableName(), $aclJoinCriteria, 'a', 'LEFT'); $findParams->criteria(\GO\Base\Db\FindCriteria::newInstance()->addModel(Folder::model())->addCondition('parent_id', $this->id)->mergeWith($aclWhereCriteria)); if (!$noGrouping) { $findParams->group(array('t.id')); } return Folder::model()->find($findParams); }
protected function actionGroupStore($user_id = 0) { $selectedGroupIds = array(); if (empty($user_id)) { $selectedGroupIds = User::getDefaultGroupIds(); } else { // $user = User::model()->findByPk($user_id); $selectedGroupIds = User::getGroupIds($user_id); } $columnModel = new \GO\Base\Data\ColumnModel('GO\\Base\\Model\\Group'); $columnModel->formatColumn('selected', 'in_array($model->id, $selectedGroupIds)', array('selectedGroupIds' => $selectedGroupIds)); $columnModel->formatColumn('disabled', '($user_id==1 && $model->id==GO::config()->group_root) || $model->id==GO::config()->group_everyone', array('user_id' => $user_id)); $store = new \GO\Base\Data\DbStore('GO\\Base\\Model\\Group', $columnModel); $store->defaultSort = array('name'); return $store->getData(); }
/** * Get all user contacts that a given user is authorized to see * * @param int $user_id * @param \GO\Base\Db\FindParams $findParams * @return Contact Statement */ public function findUsers($user_id, \GO\Base\Db\FindParams $findParams = null) { $aclJoinCriteria = \GO\Base\Db\FindCriteria::newInstance()->addRawCondition('a.acl_id', 'goUser.acl_id', '=', false); $aclWhereCriteria = \GO\Base\Db\FindCriteria::newInstance()->addCondition('user_id', $user_id, '=', 'a', false)->addInCondition("group_id", \GO\Base\Model\User::getGroupIds($user_id), "a", false); $fp = \GO\Base\Db\FindParams::newInstance()->group('t.id')->ignoreAcl()->joinRelation('goUser')->join(\GO\Base\Model\AclUsersGroups::model()->tableName(), $aclJoinCriteria, 'a', 'INNER'); $fp->getCriteria()->addCondition('enabled', true, '=', 'goUser')->mergeWith($aclWhereCriteria); if (isset($findParams)) { $fp->mergeWith($findParams); } return Contact::model()->find($fp); }