public function executeAdvanced($request) { $this->entity_form = new EntityForm(); $this->tier2_defs = array(); $this->tier3_defs = array(); $this->extension_forms = array(); $this->primary_exts = array('Person', 'Org'); foreach ($this->primary_exts as $primaryExt) { $primaryClass = $primaryExt . 'Form'; $this->extension_forms[$primaryExt]['primary'] = new $primaryClass(); $this->tier2_defs[$primaryExt] = ExtensionDefinitionTable::getByTier(2, $primaryExt); $this->tier3_defs[$primaryExt] = ExtensionDefinitionTable::getByTier(3, $primaryExt); foreach ($this->tier2_defs[$primaryExt] as $ext) { if ($ext->has_fields) { $tier2Class = $ext->name . 'Form'; $this->extension_forms[$primaryExt]['other'][$ext->name] = new $tier2Class(); } } foreach ($this->tier3_defs[$primaryExt] as $ext) { if ($ext->has_fields) { $tier3Class = $ext->name . 'Form'; $this->extension_forms[$primaryExt]['other'][$ext->name] = new $tier3Class(); } } } $this->request_primary = null; if ($request->hasParameter('entity')) { $params = $request->getParameter('entity'); //bind params to entity form $this->entity_form->setDefaults($params); //bind params to other forms, if a primary extension is selected if ($primary = $request->getParameter('primary')) { $primary = $this->request_primary = $primary[0]; $this->extension_forms[$primary]['primary']->setDefaults($params); foreach ($this->extension_forms[$primary]['other'] as $form) { $form->setDefaults($params); } } //build extensions arary $extensions = array(); if ($request->getParameter('extensions')) { $extensions = array_keys($request->getParameter('extensions')); } if ($primary) { $extensions[] = $primary; $allowedExtensions = ExtensionDefinitionTable::getNamesByParent($primary); $extensions = array_intersect($extensions, array_merge(array($primary), $allowedExtensions)); } //build fields array $fields = array_filter($params, array('LsLogic', 'isNotNull')); //build query and pager $page = $request->getParameter('page', 1); $num = $request->getParameter('num', 20); $q = EntityTable::getAdvancedSearchQuery($extensions, $fields); $this->results_pager = new Doctrine_Pager($q, $page, $num); } }
public function executeAddRelationship($request) { $this->checkEntity($request, false, false); //for entity creation form, show network options if user's home network is not the US $homeNetworkId = sfGuardUserTable::getHomeNetworkId(); $networkIds = array_unique(array(LsListTable::US_NETWORK_ID, $homeNetworkId)); if (count($networkIds) > 1) { $this->networks = LsDoctrineQuery::create()->from('LsList l')->whereIn('l.id', $networkIds)->execute(); } if ($request->isMethod('post')) { $primary = $request->getParameter('primary'); $primary = $primary[0]; $name = $request->getParameter('name'); if (!$name) { $request->setError('name', 'You must enter a name'); } if ($primary == 'Person') { $entity = PersonTable::parseFlatName($name); if ($name && !$entity->name_last) { $request->setError('name', 'The name you entered is invalid'); } } elseif ($primary == 'Org') { $entity = new Entity(); $entity->addExtension('Org'); $entity->name = $name; } else { $request->setError('primary', 'You must select a type'); } if (!$request->hasErrors()) { //set blurb $entity->blurb = $request->getParameter('blurb'); //add extensions $extensions = array(); if ($request->getParameter('extensions')) { $extensions = array_keys($request->getParameter('extensions')); } $allowedExtensions = ExtensionDefinitionTable::getNamesByParent($primary); $extensions = array_intersect($extensions, $allowedExtensions); foreach ($extensions as $extension) { $entity->addExtension($extension); } //get networks to add entity to $networkIds = $request->getParameter('network_ids', array(sfGuardUserTable::getHomeNetworkId())); //save and redirect to edit page $entity->save(null, true, $networkIds); $this->redirect($this->entity->getInternalUrl('addRelationshipCategory', array('entity2_id' => $entity->id))); } } //form submission, display matching persons if ($request->hasParameter('q')) { $num = $request->getParameter('num', 10); $page = $request->getParameter('page', 1); if (!($terms = $request->getParameter('q'))) { $this->entity_pager = new LsDoctrinePager(array(), $page, $num); } else { switch (sfConfig::get('app_search_engine')) { case 'sphinx': $this->entity_pager = EntityTable::getSphinxPager($terms, $page, $num); break; case 'lucene': $ary = EntityTable::getLuceneArray($terms, null); $this->entity_pager = new LsDoctrinePager($ary, $page, $num); break; case 'mysql': default: $terms = explode(' ', $terms); $q = EntityTable::getSimpleSearchQuery($terms); $this->entity_pager = new Doctrine_Pager($q, $page, $num); break; } } $this->primary_exts = array('Person', 'Org'); $this->tier2_defs = array(); $this->tier3_defs = array(); foreach ($this->primary_exts as $primaryExt) { $this->tier2_defs[$primaryExt] = ExtensionDefinitionTable::getByTier(2, $primaryExt); $this->tier3_defs[$primaryExt] = ExtensionDefinitionTable::getByTier(3, $primaryExt); } } }