/** * Dodajanje opcij * * Vsebino yml datoteke ažurira v entitetah Option in OptionValue * * @param type $em entity manager * @param type $val Ena opcija iz yml datoteke */ public function populateOptions($em, $val) { $optR = $em->getRepository('App\\Entity\\Option'); $o = $optR->findOneByName($val['name']); $readOnly = empty($val['readOnly']) ? false : $val['readOnly']; if (!$o) { $o = new Option(); $em->persist($o); $o->setName($val['name']); } else { /** * spremembe naredimo le, če je readonly */ if (!$readOnly) { return; } } $o->setReadOnly($readOnly); $o->setType($val['type']); $o->setDescription($val['description']); $o->setDefaultValue(empty($val['defaultValue']) ? null : $val['defaultValue']); $o->setPerUser(empty($val['perUser']) ? false : $val['perUser']); $o->setPublic(empty($val['public']) ? false : $val['public']); $o->setRole(empty($val['role']) ? null : $val['role']); /** * če obstajajo globalne ali uporabniške vrednosti ažuriramo entiteto OptionValue: */ if (!empty($val['optionValue'])) { echo " " . $val['name'] . ' -> not empty Option Value ' . PHP_EOL; if (!empty($val['optionValue']['global'])) { echo " global" . PHP_EOL; /** * ali obstaja globalna opcija ? */ $optValue = $em->getRepository('App\\Entity\\OptionValue')->getOptionValuesGlobalValue($o); // pričakujemo, da najde največ 1 globalno vrednost. if (empty($optValue)) { $optVal = new OptionValue(); $optVal->setValue($val['optionValue']['global']['value']); $optVal->setGlobal(true); $optVal->addOption($o); $em->persist($optVal); } echo " opt val: " . $val['optionValue']['global']['value'][0]['key'] . " " . $val['optionValue']['global']['value'][0]['value'] . PHP_EOL; } /** * ali obstajajo uporabniške vrednosti */ if (!empty($val['optionValue']['user'])) { $optValueUserY = $val['optionValue']['user']; foreach ($optValueUserY as $user) { echo " user " . $user['email'] . PHP_EOL; // najprej preverim, če uporabniško ime že obstaja v entiteti User $u = $em->getRepository('Aaa\\Entity\\User')->findOneByemail($user['email']); $this->expect($u, "Ni tega uporabnika", 1000300); // $$ rb potrebno še implementirati trnsl // ali obstajajo opcije userja $optValue = $em->getRepository('App\\Entity\\OptionValue')->getOptionValuesUserValue($o, $u); if (empty($optValue)) { $optVal = new OptionValue(); $optVal->setValue($user['value']); $optVal->setGlobal(false); $optVal->addOption($o); $optVal->addUser($u); $em->persist($optVal); // ali je lahko več persistov pred flush-em? } echo " opt val: " . $user['value'][0]['key'] . " " . $user['value'][0]['value'] . PHP_EOL; } } } }
/** * * Nastavi uporabniško opcijo v OptionValue entiteti * * param type $value vrednost, ki jo vstavi * * @param string $name Ime opcij * @param mixed $value vrednost, ki jo vstavi * @return boolean */ public function setGlobalOption($name, $value) { // preverjanje avtorizacije $this->expectPermission("Option-write"); $this->expectPermission("OptionValue-write"); $this->expectPermission("OptionValue-writeGlobal"); $em = $this->getEm(); $rep = $em->getRepository('App\\Entity\\Option'); /* @var $opt \App\Entity\Option */ $opt = $rep->findOneByName($name); $this->expect($opt, 'Opcije ne obstajajo ' . $name, 1000401); // preveri, če ima globalno opcijo $this->expect(!$opt->getReadOnly(), 'Opcija ni globalna ' . $name, 1000402); $optValR = $em->getRepository('App\\Entity\\OptionValue'); $globalValueId = $optValR->getOptionValuesGlobalId($opt); if (empty($globalValueId)) { // kreiramo nov zapis v OptionValue $optVal = new OptionValue(); $optVal->setValue($value); $optVal->setGlobal(true); $optVal->addOption($opt); } else { // le zamenjamo vrednost $optVal = $optValR->findOneById($globalValueId); $optVal->setValue($value); } $em->persist($optVal); // preverjanje avtorizacije s kontekstom $this->expectPermission("Option-write", $opt); $this->expectPermission("OptionValue-write", $opt); $this->expectPermission("OptionValue-writeGlobal", $opt); $em->flush(); return true; }