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); }
/** * Add the selected id's to the findCriteria. You use this in the other controller. eg. ContactController and not AddressbookController. * Should be called in \GO\Base\Controller\AbstractModelController::beforeStoreStatement * Will be called in \GO\Base\Data\DbStore::multiSelect() * @param \GO\Base\Db\FindParams $findParams (object reference) * @param string $columnName database column to match keys to * @param string $tableAlias table alias of the column to match * @param boolean $useAnd use AND when adding where condition * @param boolean $useNot use NOT when adding where condition */ public function addSelectedToFindCriteria(\GO\Base\Db\FindParams &$findParams, $columnName, $tableAlias = 't', $useAnd = true, $useNot = false) { $selectedCount = count($this->selectedIds); //ignore here. Permissions are checked in by _setSelectedIds. if ($this->_checkPermissions) { // $this->_validateSelection(); if ($selectedCount) { $findParams->ignoreAcl(); } } if ($selectedCount) { if ($selectedCount > 1) { $tableName = "ms_" . $this->_requestParamName; $findParams->getCriteria()->addInTemporaryTableCondition($tableName, $columnName, $this->selectedIds, $tableAlias, $useAnd, $useNot); } else { // $findParams->getCriteria()->addInCondition($columnName, $this->selectedIds, $tableAlias, $useAnd, $useNot); $findParams->getCriteria()->addCondition($columnName, $this->selectedIds[0], $useNot ? '!=' : '=', $tableAlias, $useAnd); } } // $findParams->debugSql(); // $this->_save(); }