/** * @param array $data * @return IEntity|void * @throws EntityAlreadyExistsException * @throws NotFoundEntityException */ public function updateCompanyService(array $data) { $this_var = $this; $validator_factory = $this->validator_factory; $repository = $this->repository; $marketplace_factory = $this->marketplace_factory; $company_service = $this->tx_manager->transaction(function () use(&$company_service, $this_var, $marketplace_factory, $data, $validator_factory, $repository) { $validator = $validator_factory->buildValidatorForCompanyService($data); if ($validator->fails()) { return $this_var->validationError($validator->messages()); } $id = intval($data['id']); $company_service = $repository->getById($id); if (!$company_service) { throw new NotFoundEntityException('CompanyService', sprintf("id %s", $id)); } $company_service->setName($data['name']); if ($company_service->isDraft()) { $live_service_id = isset($data['live_service_id']) ? $data['live_service_id'] : 0; $published = isset($data['published']) ? $data['published'] : 0; $company_service->setPublished($published); $company_service->setLiveServiceId($live_service_id); } $query = new QueryObject($company_service); $query->addAndCondition(QueryCriteria::equal('Name', $company_service->getName())); $query->addAndCondition(QueryCriteria::equal('Company.ID', $company_service->getCompany()->getIdentifier())); $query->addAndCondition(QueryCriteria::notId('ID', $id)); $res = $repository->getBy($query); if ($res) { throw new EntityAlreadyExistsException('CompanyService', sprintf('name %s', $company_service->getName())); } $this_var->update($company_service, $data); $clearCollections = new ReflectionMethod(get_class($this_var), 'clearCollections'); $clearCollections->setAccessible(true); $clearCollections->invoke($this_var, $company_service); $updateCollections = new ReflectionMethod(get_class($this_var), 'updateCollections'); $updateCollections->setAccessible(true); $updateCollections->invoke($this_var, $company_service, $data); return $company_service; }); return $company_service; }
/** * @param array $data * @return IEntity|void * @throws EntityAlreadyExistsException * @throws NotFoundEntityException */ public function updateCompanyService(array $data) { $this_var = $this; $validator_factory = $this->validator_factory; $repository = $this->repository; $marketplace_factory = $this->marketplace_factory; $company_service = $this->tx_manager->transaction(function () use(&$company_service, $this_var, $marketplace_factory, $data, $validator_factory, $repository) { $validator = $validator_factory->buildValidatorForCompanyService($data); if ($validator->fails()) { return $this_var->validationError($validator->messages()); } $id = intval($data['id']); $company_service = $repository->getById($id); if (!$company_service) { throw new NotFoundEntityException('CompanyService', sprintf("id %s", $id)); } $company_service->setName($data['name']); if ($company_service->isDraft()) { $live_service_id = isset($data['live_service_id']) ? $data['live_service_id'] : 0; $published = isset($data['published']) ? $data['published'] : 0; $company_service->setPublished($published); $company_service->setLiveServiceId($live_service_id); } $query = new QueryObject($company_service); $query->addAndCondition(QueryCriteria::equal('Name', $company_service->getName())); $query->addAndCondition(QueryCriteria::equal('Company.ID', $company_service->getCompany()->getIdentifier())); $query->addAndCondition(QueryCriteria::notId('ID', $id)); $res = $repository->getBy($query); if ($res) { throw new EntityAlreadyExistsException('CompanyService', sprintf('name %s', $company_service->getName())); } $this_var->update($company_service, $data); $clearCollections = new ReflectionMethod(get_class($this_var), 'clearCollections'); $clearCollections->setAccessible(true); $clearCollections->invoke($this_var, $company_service); $updateCollections = new ReflectionMethod(get_class($this_var), 'updateCollections'); $updateCollections->setAccessible(true); $updateCollections->invoke($this_var, $company_service, $data); // send notification to admins $username = Member::currentUser()->getName(); $email_subject = "Update on " . $company_service->getName(); $email_body = $company_service->getName() . " was just updated by " . $username . ".\n Please go <a href='https://openstack.org/marketplaceadmin/'>here</a> to review the data.\n <br><br>Thank you,<br>Marketplace Admin"; $email = EmailFactory::getInstance()->buildEmail('*****@*****.**', MARKETPLACE_ADMIN_UPDATE_EMAIL_TO, $email_subject, $email_body); $email->send(); return $company_service; }); return $company_service; }