Example #1
0
 /**
  * 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));
 }