public function executeAddRelationshipCategory($request) { $this->checkEntity($request, false, false); $this->entity2 = Doctrine::getTable('Entity')->find($request->getParameter('entity2_id')); $this->forward404Unless($this->entity2); $ext1 = $this->entity->getPrimaryExtension(); $ext2 = $this->entity2->getPrimaryExtension(); $this->categories = RelationshipCategoryTable::getByExtensionsQuery($ext1, $ext2)->execute(); $this->reference_form = new ReferenceForm(); $rel = new Relationship(); $rel->Entity1 = $this->entity; $rel->Entity2 = $this->entity2; $this->reference_form->setSelectObject($rel); if ($request->isMethod('post')) { $refParams = $request->getParameter('reference'); $this->reference_form->bind($refParams); if ($this->reference_form->isValid()) { //lobbying will need to be handled seperately if ($request->getParameter('category_id') == RelationshipTable::LOBBYING_CATEGORY) { switch ($request->getParameter('lobbying_scenario')) { case 'direct': $r = new Relationship(); $r->Entity1 = $this->entity; $r->Entity2 = $this->entity2; $r->setCategory('Lobbying'); break; case 'direct_reverse': $r = new Relationship(); $r->Entity1 = $this->entity2; $r->Entity2 = $this->entity; $r->setCategory('Lobbying'); break; case 'service': $r = new Relationship(); $r->Entity1 = $this->entity; $r->Entity2 = $this->entity2; $r->setCategory('Transaction'); $r->description1 = 'Lobbying Client'; $r->description2 = $this->entity2['primary_ext'] == 'Org' ? 'Lobbying Firm' : 'Lobbyist'; break; case 'service_reverse': $r = new Relationship(); $r->Entity1 = $this->entity2; $r->Entity2 = $this->entity; $r->setCategory('Transaction'); $r->description1 = 'Lobbying Client'; $r->description2 = $this->entity['primary_ext'] == 'Org' ? 'Lobbying Firm' : 'Lobbyist'; break; default: $request->setError('lobbying_scenario', "You must pick a type of lobbying relationship to create"); return sfView::SUCCESS; break; } $r->saveWithRequiredReference($refParams); LsCache::clearRelationshipCacheById($r->id); $this->redirect($r->getInternalUrl('edit', array('ref' => 'auto'))); } if ($category = Doctrine::getTable('RelationshipCategory')->find($request->getParameter('category_id'))) { //save relationship and reference $r = new Relationship(); $r->Entity1 = $this->entity; $r->Entity2 = $this->entity2; $r->setCategory($category->name); $r->switchEntityOrderIfNecessary(); $r->saveWithRequiredReference($refParams); LsCache::clearRelationshipCacheById($r->id); //redirect to edit page $this->redirect($r->getInternalUrl('edit', array('ref' => 'auto'))); } else { $request->setError('category_id', "You must select a category"); } } else { if (!($categoryId = $request->getParameter('category_id'))) { $request->setError('category_id', "You must select a category"); } } } }