public function createMatrixAssignment()

in synergy/server/controller/RunCtrl.php [786:834]


    public function createMatrixAssignment($data, $createdBy) {
        $labelId = -1;
        $project = $this->getProject($data->runId);
        if (isset($data->labelId) && !empty($data->labelId)) {
            $labelId = intval($data->labelId);
        }
        $allOwners = array();
        $allMembers = array();
        for ($k = 0, $maxk = count($data->tribes); $k < $maxk; $k++) {
            $members = $this->getTribeCtrl()->getMembers($data->tribes[$k]->id);
            $leader = $this->getTribeCtrl()->getLeader($data->tribes[$k]->id);
            if (!$this->leaderIsMember($members, $leader)) {
                array_push($members, $leader);
            }
            $result = array_merge($allMembers, $members);
            $allMembers = $result;
            for ($l = 0, $maxl = count($members); $l < $maxl; $l++) {
                if (!isset($allOwners[$members[$l]->username])) {
                    $allOwners[$members[$l]->username] = $this->getSpecCtrl()->getSpecificationsByOwnerAndVersion($members[$l]->username, $data->versionId, $project->id);
                }
            }
        }

        for ($j = 0, $maxj = count($data->users); $j < $maxj; $j++) {
            if (!isset($allOwners[$data->users[$j]->username])) {
                $allOwners[$data->users[$j]->username] = $this->getSpecCtrl()->getSpecificationsByOwnerAndVersion($data->users[$j]->username, $data->versionId, $project->id);
            }
        }

        $processedUsers = array();
        $failures = array();
        for ($i = 0, $maxi = count($data->platforms); $i < $maxi; $i++) {
            for ($j = 0, $maxj = count($data->users); $j < $maxj; $j++) {// iterate over users
                if (!$this->createMatrixAssignmentForUser($allOwners[$data->users[$j]->username], $data->platforms[$i]->id, $data->users[$j]->username, $data->runId, $labelId, $createdBy)) {
                    array_push($failures, $data->users[$j]->username);
                }
                $processedUsers[$data->users[$j]->username] = 1;
            }

            for ($k = 0, $maxk = count($allMembers); $k < $maxk; $k++) {
                if (!isset($processedUsers[$allMembers[$k]->username])) { // so not yet processed in iteration above
                    if (!$this->createMatrixAssignmentForUser($allOwners[$allMembers[$k]->username], $data->platforms[$i]->id, $allMembers[$k]->username, $data->runId, $labelId, $createdBy)) {
                        array_push($failures, $allMembers[$k]->username);
                    }
                }
            }
        }
        return $failures;
    }