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));
 }
Exemple #2
0
 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);
 }
Exemple #3
0
 /**
  * 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;
 }