示例#1
0
 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);
     }
 }