public function actionRoleException() { $model = new Roles(); $temp = Workflow::model()->findAll(); $workflows = array(); foreach ($temp as $workflow) { $workflows[$workflow->id] = $workflow->name; } if (isset($_POST['Roles'])) { $workflow = $_POST['workflow']; $workflowName = Workflow::model()->findByPk($workflow)->name; $stage = $_POST['workflowStages']; $stageName = WorkflowStage::model()->findByPk($stage)->name; $viewPermissions = $_POST['viewPermissions']; $editPermissions = $_POST['editPermissions']; $users = $_POST['users']; $model->attributes = $_POST['Roles']; $oldRole = Roles::model()->findByAttributes(array('name' => $model->name)); $model->users = ""; $model->name .= " - {$workflowName}: {$stageName}"; if ($model->save()) { $replacement = new RoleToWorkflow(); $replacement->workflowId = $workflow; $replacement->stageId = $stage; $replacement->roleId = $oldRole->id; $replacement->replacementId = $model->id; $replacement->save(); $fields = Fields::model()->findAll(); $temp = array(); foreach ($fields as $field) { $temp[] = $field->id; } $both = array_intersect($viewPermissions, $editPermissions); $view = array_diff($viewPermissions, $editPermissions); $neither = array_diff($temp, $viewPermissions); foreach ($both as $field) { $rolePerm = new RoleToPermission(); $rolePerm->roleId = $model->id; $rolePerm->fieldId = $field; $rolePerm->permission = 2; $rolePerm->save(); } foreach ($view as $field) { $rolePerm = new RoleToPermission(); $rolePerm->roleId = $model->id; $rolePerm->fieldId = $field; $rolePerm->permission = 1; $rolePerm->save(); } foreach ($neither as $field) { $rolePerm = new RoleToPermission(); $rolePerm->roleId = $model->id; $rolePerm->fieldId = $field; $rolePerm->permission = 0; $rolePerm->save(); } } $this->redirect('manageRoles'); } $this->render('roleException', array('model' => $model, 'workflows' => $workflows)); }
public function updateStages($newStages) { $oldIds = array(); foreach ($this->stages as $stage) { $oldIds[] = $stage->id; } $newIds = array(); for ($i = 1; $i <= count($newStages); $i++) { if (isset($newStages[$i]['stageId'])) { $newIds[$i] = $newStages[$i]['stageId']; } else { $newIds[$i] = ''; } } $forDeletion = array_diff($oldIds, $newIds); $validStages = true; $returnStages = array(); foreach ($newIds as $number => $id) { $stage = WorkflowStage::model()->findByPk($id); if (!$stage) { $stage = new WorkflowStage(); } $stage->workflowId = $this->id; $stage->stageNumber = $number; $stage->attributes = $newStages[$number]; $stage->roles = $newStages[$number]['roles']; if (empty($stage->roles) || in_array('', $stage->roles)) { $stage->roles = array(); } $returnStages[] = $stage; if (!$stage->validate()) { $validStages = false; } } return array($validStages, $returnStages, $forDeletion); }
/** * Get a data provider for members of a given type in a given stage * @param string $type {'contacts', 'opportunities', 'accounts'} */ public function getStageMemberDataProvider($type, $workflowId, $dateRange, $expectedCloseDateDateRange, $stage, $user) { $modelName = X2Model::getModelName($type); $model = X2Model::model($modelName); $tableName = $model->tableName(); $stageModel = WorkflowStage::model()->findByAttributes(array('workflowId' => $workflowId, 'stageNumber' => $stage)); $params = array(':workflowId' => $workflowId, ':stage' => $stageModel->id, ':start' => $dateRange['start'], ':end' => $dateRange['end'], ':type' => $type); if ($expectedCloseDateDateRange['range'] !== 'all') { $params = array_merge($params, array(':expectedCloseDateStart' => $expectedCloseDateDateRange['end'], ':expectedCloseDateEnd' => $expectedCloseDateDateRange['end'])); } if (!empty($user)) { $userString = " AND x2_actions.assignedTo=:user "; $params[':user'] = $user; } else { $userString = ""; } list($accessCondition, $accessConditionParams) = $modelName::model()->getAccessSQLCondition($tableName); $params = array_merge($params, $accessConditionParams); $stageMemberSql = Yii::app()->db->createCommand()->select("{$tableName}.*, x2_actions.lastUpdated as actionLastUpdated")->from($tableName)->join('x2_actions', "{$tableName}.id = x2_actions.associationId")->where(($expectedCloseDateDateRange['range'] !== 'all' ? $tableName . '.expectedCloseDate BETWEEN :expectedCloseDateStart AND :expectedCloseDateEnd AND ' : '') . "x2_actions.workflowId=:workflowId AND x2_actions.stageNumber=:stage AND\n x2_actions.associationType=:type AND complete!='Yes' AND \n (completeDate IS NULL OR completeDate=0) AND \n x2_actions.createDate BETWEEN :start AND :end " . $userString . " AND " . $accessCondition)->getText(); $memberCount = Yii::app()->db->createCommand()->select("COUNT(*)")->from($tableName)->join('x2_actions', "{$tableName}.id = x2_actions.associationId")->where(($expectedCloseDateDateRange['range'] !== 'all' ? $tableName . '.expectedCloseDate BETWEEN :expectedCloseDateStart AND :expectedCloseDateEnd AND ' : '') . "x2_actions.workflowId=:workflowId AND x2_actions.stageNumber=:stage AND\n x2_actions.associationType=:type AND complete!='Yes' AND \n (completeDate IS NULL OR completeDate=0) AND \n x2_actions.createDate BETWEEN :start AND :end " . $userString . ' AND ' . $accessCondition, $params)->queryScalar(); $membersDataProvider = new CSqlDataProvider($stageMemberSql, array('totalItemCount' => $memberCount, 'sort' => array('defaultOrder' => 'lastUpdated DESC'), 'pagination' => array('pageSize' => 20), 'params' => $params)); return $membersDataProvider; }