Exemplo n.º 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);
     }
 }
Exemplo n.º 2
0
 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);
         }
     }
 }