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); } }