Xataface  2.0alpha2
Xataface Application Framework
 All Data Structures Namespaces Files Functions Variables Groups Pages
single_record_search.php
Go to the documentation of this file.
1 <?php
12  function handle(&$params){
14  $record =& $app->getRecord();
15  $query =& $app->getQuery();
16  if ( !isset($query['--subsearch']) ) $query['--subsearch'] = '';
17 
18  $results = array();
19 
20  foreach ( $record->_table->relationships() as $rname=>$r){
21  $fields = $r->fields(true);
22  $qstr = array();
23  foreach ( $fields as $field ){
24  //list($tname, $field) = explode('.', $field);
25  $qstr[] = '`'.str_replace('`','',$field)."` LIKE '%".addslashes($query['--subsearch'])."%'";
26  }
27  $qstr = implode(' OR ', $qstr);
28  $results[$rname] = $record->getRelatedRecordObjects($rname, 0, 10, $qstr);
29  unset($r);
30  unset($fields);
31  }
32 
33  if ( @$query['--format'] == 'RSS2.0' ){
34  $this->handleRSS($results);
35  } else {
36  df_display(array('results'=>&$results, 'queryString'=>$query['--subsearch']), 'Dataface_single_record_search.html');
37  }
38  }
39 
40  function handleRSS($results){
42  $record =& $app->getRecord();
43  $query =& $app->getQuery();
44  import('feedcreator.class.php');
45  import('Dataface/FeedTool.php');
46  $ft = new Dataface_FeedTool();
47  $rss = new UniversalFeedCreator();
48  $rss->encoding = $app->_conf['oe'];
49  //$rss->useCached(); // use cached version if age<1 hour
50  $del =& $record->_table->getDelegate();
51  if ( !$del or !method_exists($del, 'getSingleRecordSearchFeed') ){
52  $del =& $app->getDelegate();
53  }
54  if ( $del and method_exists($del, 'getSingleRecordSearchFeed') ){
55  $feedInfo = $del->getSingleRecordSearchFeed($record, $query);
56  if ( !$feedInfo ) $feedInfo = array();
57  }
58  if ( isset($feedInfo['title']) ) $rss->title = $feedInfo['title'];
59  else $rss->title = $record->getTitle().'[ Search for "'.$query['--subsearch'].'"]';
60 
61  if ( isset($feedInfo['description']) ) $rss->description = $feedInfo['description'];
62  else $rss->description = '';
63 
64  if ( isset($feedInfo['link']) ) $rss->link = $feedInfo['link'];
65  else $rss->link = htmlentities(df_absolute_url($app->url('').'&--subsearch='.urlencode($query['--subsearch'])));
66 
67  $rss->syndicationURL = $rss->link;
68 
69 
70  $records = array();
71 
72  foreach ($results as $result){
73  foreach ($result as $rec){
74  $records[] = $rec->toRecord();
75 
76  }
77  }
78 
79  uasort($records, array($this, 'cmp_last_modified') );
80 
81 
82 
83  foreach ($records as $rec){
84  if ( $rec->checkPermission('view') and $rec->checkPermission('view in rss') ){
85  $rss->addItem($ft->createFeedItem($rec));
86  }
87 
88  }
89  if ( !$query['--subsearch'] ){
90  $rss->addItem($ft->createFeedItem($record));
91  }
92 
93  header("Content-Type: application/xml; charset=".$app->_conf['oe']);
94  echo $rss->createFeed('RSS2.0');
95  exit;
96  }
97 
98 
99  function cmp_last_modified($a,$b){
100  $amod = $a->getLastModified();
101  $bmod = $b->getLastModified();
102  if ( $amod == $bmod ) return 0;
103  else return ( ($amod < $bmod) ? 1:-1);
104  }
105 
106 }