private function walkJsonNodes(\stdClass $parentData, Competency $parentCompetency, Scale $scale) { if (isset($parentData->competencies)) { foreach ($parentData->competencies as $competency) { $newCompetency = new Competency(); $newCompetency->setName($competency->name); $newCompetency->setParent($parentCompetency, true); $this->walkJsonNodes($competency, $newCompetency, $scale); } } else { foreach ($parentData->abilities as $ability) { $newAbility = new Ability(); $newAbility->setName($ability->name); $level = null; foreach ($scale->getLevels() as $scaleLevel) { if ($scaleLevel->getName() === $ability->level) { $level = $scaleLevel; break; } } $link = new CompetencyAbility(); $link->setCompetency($parentCompetency); $link->setAbility($newAbility); $link->setLevel($level); } } return $parentCompetency; }
public function testValidateWithExistingChildCompetency() { $parent = $this->mock('HeVinci\\CompetencyBundle\\Entity\\Competency'); $parent->expects($this->once())->method('getRoot')->willReturn(1); $competency = new Competency(); $competency->setName('CHILD'); $competency->setParent($parent); $this->repo->expects($this->once())->method('findOneBy')->with(['name' => 'CHILD', 'root' => 1])->willReturn(null); $this->context->expects($this->never())->method('addViolationAt'); $this->validator->validate($competency, new UniqueCompetency()); }
protected function persistCompetency($name, Competency $parent = null, Scale $scale = null) { $competency = new Competency(); $competency->setName($name); if ($parent) { $competency->setParent($parent); } if ($scale) { $competency->setScale($scale); } $this->om->persist($competency); return $competency; }
/** * Creates a sub-competency. * * @param Competency $parent * @param Competency $child * @return Competency * @throws \LogicException if the competency already has abilities */ public function createSubCompetency(Competency $parent, Competency $child) { if ($this->competencyAbilityRepo->countByCompetency($parent) > 0) { throw new \LogicException("Cannot create sub-competency: competency {$parent->getId()}" . ' is already associated with abilities'); } $child->setParent($parent); $this->om->persist($child); $this->om->flush(); return $child; }