/** * Create a workflow based exception for a role. * * This method is called by a form on the {@link AdminController::manageRoles} * page to allow for the creation of workflow based exceptions for a role. * Workflow exceptions modify which fields are visible or editable based on * what stage of a workflow a contact is in. */ public function actionRoleException() { $model = new Roles(); $temp = Workflow::model()->findAll(); $workflows = array(); foreach ($temp as $workflow) { $workflows[$workflow->id] = $workflow->name; } $roleInput = filter_input(INPUT_POST, 'Roles', FILTER_DEFAULT, FILTER_REQUIRE_ARRAY); if (!empty($roleInput)) { $workflowId = filter_input(INPUT_POST, 'workflow', FILTER_SANITIZE_NUMBER_INT); if (!empty($workflowId)) { $workflowName = Workflow::model()->findByPk($workflowId)->name; } else { $this->redirect('manageRoles'); } $stage = $_POST['workflowStages']; if (isset($stage) && !empty($stage)) { $stageName = X2Model::model('WorkflowStage')->findByAttributes(array('workflowId' => $workflow, 'stageNumber' => $stage))->name; } else { $this->redirect('manageRoles'); } if (!isset($_POST['viewPermissions'])) { $viewPermissions = array(); } else { $viewPermissions = $_POST['viewPermissions']; } if (!isset($_POST['editPermissions'])) { $editPermissions = array(); } else { $editPermissions = $_POST['editPermissions']; } $model->attributes = $_POST['Roles']; $model->timeout *= 60; $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'); } }
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)); }