diff options
-rw-r--r-- | mod/chanview.php | 50 | ||||
-rw-r--r-- | mod/directory.php | 159 | ||||
-rw-r--r-- | mod/dirsearch.php | 8 |
3 files changed, 127 insertions, 90 deletions
diff --git a/mod/chanview.php b/mod/chanview.php index 601df88fd..92ed757f9 100644 --- a/mod/chanview.php +++ b/mod/chanview.php @@ -1,9 +1,11 @@ <?php require_once('include/Contact.php'); +require_once('include/zot.php'); function chanview_content(&$a) { + $observer = $a->get_observer(); $xchan = null; $r = null; @@ -30,26 +32,58 @@ function chanview_content(&$a) { $r = q("select * from xchan where xchan_url = '%s' limit 1", dbesc($_REQUEST['url']) ); - if(! $r) - $r = array(array('xchan_url' => $_REQUEST['url'])); } if($r) { $xchan = $r[0]; - if($xchan['xchan_hash']) - $a->set_widget('vcard',vcard_from_xchan($xchan)); + } + + + + // Here, let's see if we have an xchan. If we don't, how we proceed is determined by what + // info we do have. If it's a URL, we can offer to visit it directly. If it's a webbie or + // address, we can and should try to import it. If it's just a hash, we can't continue, but we + // probably wouldn't have a hash if we don't already have an xchan for this channel. + + if(! $xchan) { + logger('mod_chanview: fallback'); + // This is hackish - construct a zot address from the url + if($_REQUEST['url']) { + if(preg_match('/https?\:\/\/(.*?)(\/channel\/|\/profile\/)(.*?)$/ism',$_REQUEST['url'],$matches)) { + $_REQUEST['address'] = $matches[3] . '@' . $matches[1]; + } + logger('mod_chanview: constructed address ' . print_r($matches,true)); + } + if($_REQUEST['address']) { + $ret = zot_finger($_REQUEST['address'],null); + if($ret['success']) { + $j = json_decode($ret['body'],true); + if($j) + import_xchan($j); + $r = q("select * from xchan where xchan_addr = '%s' limit 1", + dbesc($_REQUEST['address']) + ); + if($r) + $xchan = $r[0]; + } + + } } - else { - notice( t('No valid channel provided.') . EOL); + + if(! $xchan) { + notice( t('Channel not found.') . EOL); return; } - $observer = $a->get_observer(); - + if($xchan['xchan_hash']) + $a->set_widget('vcard',vcard_from_xchan($xchan)); + $url = (($observer) ? z_root() . '/magic?f=&dest=' . $xchan['xchan_url'] . '&addr=' . $xchan['xchan_addr'] : $xchan['xchan_url'] ); + + $o = replace_macros(get_markup_template('chanview.tpl'),array( '$url' => $url diff --git a/mod/directory.php b/mod/directory.php index 99687a373..d9182d1bd 100644 --- a/mod/directory.php +++ b/mod/directory.php @@ -57,7 +57,6 @@ function directory_content(&$a) { if($search) $query .= '&name=' . urlencode($search); - } if($a->pager['page'] != 1) $query .= '&p=' . $a->pager['page']; @@ -67,111 +66,113 @@ function directory_content(&$a) { if($x['success']) { $t = 0; $j = json_decode($x['body'],true); - if($j && $j['results']) { - - $entries = array(); - - $photo = 'thumb'; + if($j) { - foreach($j['results'] as $rr) { + if($j['results']) { + $entries = array(); + $photo = 'thumb'; + foreach($j['results'] as $rr) { - $profile_link = chanlink_url($rr['url']); + $profile_link = chanlink_url($rr['url']); - $pdesc = (($rr['description']) ? $rr['description'] . '<br />' : ''); + $pdesc = (($rr['description']) ? $rr['description'] . '<br />' : ''); - $details = ''; - if(strlen($rr['locale'])) - $details .= $rr['locale']; - if(strlen($rr['region'])) { + $details = ''; if(strlen($rr['locale'])) - $details .= ', '; - $details .= $rr['region']; - } - if(strlen($rr['country'])) { - if(strlen($details)) - $details .= ', '; - $details .= $rr['country']; - } - if(strlen($rr['birthday'])) { - if(($years = age($rr['birthday'],'UTC','')) != 0) - $details .= '<br />' . t('Age: ') . $years ; - } - if(strlen($rr['gender'])) - $details .= '<br />' . t('Gender: ') . $rr['gender']; - - $page_type = ''; - - $profile = $rr; - - if ((x($profile,'locale') == 1) - || (x($profile,'region') == 1) - || (x($profile,'postcode') == 1) - || (x($profile,'country') == 1)) - $location = t('Location:'); - - $gender = ((x($profile,'gender') == 1) ? t('Gender:') : False); + $details .= $rr['locale']; + if(strlen($rr['region'])) { + if(strlen($rr['locale'])) + $details .= ', '; + $details .= $rr['region']; + } + if(strlen($rr['country'])) { + if(strlen($details)) + $details .= ', '; + $details .= $rr['country']; + } + if(strlen($rr['birthday'])) { + if(($years = age($rr['birthday'],'UTC','')) != 0) + $details .= '<br />' . t('Age: ') . $years ; + } + if(strlen($rr['gender'])) + $details .= '<br />' . t('Gender: ') . $rr['gender']; + + $page_type = ''; + + $profile = $rr; + + if ((x($profile,'locale') == 1) + || (x($profile,'region') == 1) + || (x($profile,'postcode') == 1) + || (x($profile,'country') == 1)) + $location = t('Location:'); + + $gender = ((x($profile,'gender') == 1) ? t('Gender:') : False); - $marital = ((x($profile,'marital') == 1) ? t('Status:') : False); + $marital = ((x($profile,'marital') == 1) ? t('Status:') : False); - $homepage = ((x($profile,'homepage') == 1) ? t('Homepage:') : False); + $homepage = ((x($profile,'homepage') == 1) ? t('Homepage:') : False); - $about = ((x($profile,'about') == 1) ? t('About:') : False); + $about = ((x($profile,'about') == 1) ? t('About:') : False); - $entry = array( - 'id' => ++$t, - 'profile_link' => $profile_link, - 'photo' => $rr['photo'], - 'alttext' => $rr['name'] . ' ' . $rr['address'], - 'name' => $rr['name'], - 'details' => $pdesc . $details, - 'profile' => $profile, - 'location' => $location, - 'gender' => $gender, - 'pdesc' => $pdesc, - 'marital' => $marital, - 'homepage' => $homepage, - 'about' => $about, + $entry = array( + 'id' => ++$t, + 'profile_link' => $profile_link, + 'photo' => $rr['photo'], + 'alttext' => $rr['name'] . ' ' . $rr['address'], + 'name' => $rr['name'], + 'details' => $pdesc . $details, + 'profile' => $profile, + 'location' => $location, + 'gender' => $gender, + 'pdesc' => $pdesc, + 'marital' => $marital, + 'homepage' => $homepage, + 'about' => $about, - ); + ); - $arr = array('contact' => $rr, 'entry' => $entry); + $arr = array('contact' => $rr, 'entry' => $entry); - call_hooks('directory_item', $arr); + call_hooks('directory_item', $arr); - $entries[] = $entry; + $entries[] = $entry; - unset($profile); - unset($location); + unset($profile); + unset($location); - } + } - logger('entries: ' . print_r($entries,true)); + logger('mod_directory: entries: ' . print_r($entries,true), LOGGER_DATA); - $o .= replace_macros($tpl, array( - '$search' => $search, - '$desc' => t('Find'), - '$finddsc' => t('Finding:'), - '$safetxt' => htmlspecialchars($search,ENT_QUOTES,'UTF-8'), - '$entries' => $entries, - '$dirlbl' => t('Directory'), - '$submit' => t('Find') - )); + $o .= replace_macros($tpl, array( + '$search' => $search, + '$desc' => t('Find'), + '$finddsc' => t('Finding:'), + '$safetxt' => htmlspecialchars($search,ENT_QUOTES,'UTF-8'), + '$entries' => $entries, + '$dirlbl' => t('Directory'), + '$submit' => t('Find') + )); - $o .= alt_pager($a,$j['records'], t('more'), t('back')); + $o .= alt_pager($a,$j['records'], t('more'), t('back')); + } + else { + if($a->pager['page'] == 1 && $j['records'] == 0 && strpos($search,'@')) { + goaway(z_root() . '/chanview/?f=&address=' . $search); + } + info( t("No entries (some entries may be hidden).") . EOL); + } } - - else - info( t("No entries (some entries may be hidden).") . EOL); - } - + } return $o; } diff --git a/mod/dirsearch.php b/mod/dirsearch.php index 07af90ffb..b3893afe7 100644 --- a/mod/dirsearch.php +++ b/mod/dirsearch.php @@ -78,9 +78,11 @@ function dirsearch_content(&$a) { $qlimit = " LIMIT $limit "; else { $qlimit = " LIMIT " . intval($startrec) . " , " . intval($perpage); - $r = q("SELECT COUNT(xchan_hash) AS `total` FROM xchan left join xprof on xchan_hash = xprof_hash where 1 $sql_extra"); - if($r) { - $ret['total_items'] = $r[0]['total']; + if($return_total) { + $r = q("SELECT COUNT(xchan_hash) AS `total` FROM xchan left join xprof on xchan_hash = xprof_hash where 1 $sql_extra"); + if($r) { + $ret['total_items'] = $r[0]['total']; + } } } |