directory page still needs a lot of work, look up locally if local master or standalone, need to put some basic profile info in discovery page and direct to local directory master

This commit is contained in:
friendica 2012-12-19 19:51:52 -08:00
parent 2f48c31082
commit ad20e1f617
6 changed files with 159 additions and 132 deletions

View File

@ -143,12 +143,13 @@ define ( 'UPDATE_FAILED', 1);
* *
*/ */
define ( 'PAGE_NORMAL', 0 ); define ( 'PAGE_NORMAL', 0x0000 );
define ( 'PAGE_SOAPBOX', 1 ); define ( 'PAGE_HIDDEN', 0x0001 );
define ( 'PAGE_COMMUNITY', 2 ); define ( 'PAGE_AUTOCONNECT', 0x0002 );
define ( 'PAGE_FREELOVE', 3 );
define ( 'PAGE_BLOG', 4 ); //define ( 'PAGE_FREELOVE', 3 );
define ( 'PAGE_PRVGROUP', 5 ); //define ( 'PAGE_BLOG', 4 );
//define ( 'PAGE_PRVGROUP', 5 );
/** /**
* Network and protocol family types * Network and protocol family types

6
include/dir_fns.php Normal file
View File

@ -0,0 +1,6 @@
<?php
function find_upstream_directory($dirmode) {
return '';
}

View File

@ -2,10 +2,8 @@
require_once('boot.php'); require_once('boot.php');
require_once('include/zot.php'); require_once('include/zot.php');
require_once('include/cli_startup.php'); require_once('include/cli_startup.php');
require_once('include/dir_fns.php');
function find_upstream_directory($dirmode) {
return;
}
function directory_run($argv, $argc){ function directory_run($argv, $argc){

View File

@ -1,14 +1,11 @@
<?php <?php
require_once('include/dir_fns.php');
function directory_init(&$a) { function directory_init(&$a) {
$a->set_pager_itemspage(60); $a->set_pager_itemspage(60);
if(local_user()) {
require_once('include/contact_widgets.php');
$a->page['aside'] .= findpeople_widget();
}
} }
function directory_aside(&$a) { function directory_aside(&$a) {
@ -35,144 +32,158 @@ function directory_content(&$a) {
else else
$search = ((x($_GET,'search')) ? notags(trim(rawurldecode($_GET['search']))) : ''); $search = ((x($_GET,'search')) ? notags(trim(rawurldecode($_GET['search']))) : '');
$tpl = get_markup_template('directory_header.tpl'); $tpl = get_markup_template('directory_header.tpl');
$globaldir = '';
$gdirpath = dirname(get_config('system','directory_submit_url')); $dirmode = get_config('system','directory_mode');
if(strlen($gdirpath)) { if($dirmode === false)
$globaldir = '<ul><li><div id="global-directory-link"><a href="' $dirmode = DIRECTORY_MODE_NORMAL;
. zid($gdirpath,true) . '">' . t('Global Directory') . '</a></div></li></ul>';
if(($dirmode == DIRECTORY_MODE_PRIMARY) || ($dirmode == DIRECTORY_MODE_STANDALONE)) {
$localdir = true;
return;
} }
$admin = ''; // FIXME
$localdir = true;
$o .= replace_macros($tpl, array(
'$search' => $search,
'$globaldir' => $globaldir,
'$desc' => t('Find on this site'),
'$admin' => $admin,
'$finding' => (strlen($search) ? '<h4>' . t('Finding: ') . "'" . $search . "'" . '</h4>' : ""),
'$sitedir' => t('Site Directory'),
'$submit' => t('Find')
));
if($search)
$search = dbesc($search);
$sql_extra = ((strlen($search)) ? " AND MATCH (`profile`.`name`, `user`.`nickname`, `pdesc`, `locality`,`region`,`country_name`,`gender`,`marital`,`sexual`,`about`,`romance`,`work`,`education`,`pub_keywords`,`prv_keywords` ) AGAINST ('$search' IN BOOLEAN MODE) " : "");
$publish = ((get_config('system','publish_all')) ? '' : " AND `publish` = 1 " );
$r = q("SELECT COUNT(*) AS `total` FROM `profile` LEFT JOIN `user` ON `user`.`uid` = `profile`.`uid` WHERE `is_default` = 1 $publish AND `user`.`blocked` = 0 $sql_extra "); if(! $localdir) {
if(count($r)) $directory = find_upstream_directory($dirmode);
$a->set_pager_total($r[0]['total']);
$order = " ORDER BY `name` ASC "; if($directory) {
$url = $directory['url'];
}
else {
$url = DIRECTORY_FALLBACK_MASTER . '/post';
}
}
$r = q("SELECT `profile`.*, `profile`.`uid` AS `profile_uid`, `user`.`nickname`, `user`.`timezone` , `user`.`page-flags` FROM `profile` LEFT JOIN `user` ON `user`.`uid` = `profile`.`uid` WHERE `is_default` = 1 $publish AND `user`.`blocked` = 0 $sql_extra $order LIMIT %d , %d ",
intval($a->pager['start']),
intval($a->pager['itemspage'])
);
if(count($r)) {
if(in_array('small', $a->argv)) if($localdir) {
if($search)
$search = dbesc($search);
$sql_extra = ((strlen($search)) ? " AND MATCH (`profile`.`name`, channel.channel_address, `pdesc`, `locality`,`region`,`country_name`,`gender`,`marital`,`sexual`,`about`,`romance`,`work`,`education`,`pub_keywords`,`prv_keywords` ) AGAINST ('$search' IN BOOLEAN MODE) " : "");
$r = q("SELECT COUNT(channel_id) AS `total` FROM channel left join profile on channel.channel_id = profile.uid WHERE `is_default` = 1 and not ( channel_pageflags & %d ) $sql_extra ",
intval(PAGE_HIDDEN)
);
if($r)
$a->set_pager_total($r[0]['total']);
$order = " ORDER BY `name` ASC ";
$r = q("SELECT `profile`.*, `profile`.`uid` AS `profile_uid`, channel_name, channel_address, channel_hash, channel_timezone, channel_pageflags FROM `profile` LEFT JOIN channel ON channel_id = `profile`.`uid` WHERE `is_default` = 1 and not ( channel_pageflags & %d ) $sql_extra $order LIMIT %d , %d ",
intval(PAGE_HIDDEN),
intval($a->pager['start']),
intval($a->pager['itemspage'])
);
if($r) {
$entries = array();
$photo = 'thumb'; $photo = 'thumb';
else
$photo = 'photo';
foreach($r as $rr) { foreach($r as $rr) {
$profile_link = chanlink_hash($rr['channel_hash']);
$profile_link = $a->get_baseurl() . '/channel/' . $rr['nickname'];
$pdesc = (($rr['pdesc']) ? $rr['pdesc'] . '<br />' : ''); $pdesc = (($rr['pdesc']) ? $rr['pdesc'] . '<br />' : '');
$details = ''; $details = '';
if(strlen($rr['locality']))
$details .= $rr['locality'];
if(strlen($rr['region'])) {
if(strlen($rr['locality'])) if(strlen($rr['locality']))
$details .= ', '; $details .= $rr['locality'];
$details .= $rr['region']; if(strlen($rr['region'])) {
} if(strlen($rr['locality']))
if(strlen($rr['country_name'])) { $details .= ', ';
if(strlen($details)) $details .= $rr['region'];
$details .= ', '; }
$details .= $rr['country_name']; if(strlen($rr['country_name'])) {
} if(strlen($details))
if(strlen($rr['dob'])) { $details .= ', ';
if(($years = age($rr['dob'],$rr['timezone'],'')) != 0) $details .= $rr['country_name'];
$details .= '<br />' . t('Age: ') . $years ; }
} if(strlen($rr['dob'])) {
if(strlen($rr['gender'])) if(($years = age($rr['dob'],$rr['timezone'],'')) != 0)
$details .= '<br />' . t('Gender: ') . $rr['gender']; $details .= '<br />' . t('Age: ') . $years ;
}
if(strlen($rr['gender']))
$details .= '<br />' . t('Gender: ') . $rr['gender'];
if($rr['page-flags'] == PAGE_NORMAL) $page_type = '';
$page_type = "Personal Profile";
if($rr['page-flags'] == PAGE_SOAPBOX)
$page_type = "Fan Page";
if($rr['page-flags'] == PAGE_COMMUNITY)
$page_type = "Community Forum";
if($rr['page-flags'] == PAGE_FREELOVE)
$page_type = "Open Forum";
if($rr['page-flags'] == PAGE_PRVGROUP)
$page_type = "Private Group";
$profile = $rr; $profile = $rr;
if((x($profile,'address') == 1) if((x($profile,'address') == 1)
|| (x($profile,'locality') == 1) || (x($profile,'locality') == 1)
|| (x($profile,'region') == 1) || (x($profile,'region') == 1)
|| (x($profile,'postal_code') == 1) || (x($profile,'postal_code') == 1)
|| (x($profile,'country_name') == 1)) || (x($profile,'country_name') == 1))
$location = t('Location:'); $location = t('Location:');
$gender = ((x($profile,'gender') == 1) ? t('Gender:') : False); $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);
$tpl = get_markup_template('directory_item.tpl');
$entry = replace_macros($tpl,array(
'$id' => $rr['id'],
'$profile-link' => $profile_link,
'$photo' => $a->get_cached_avatar_image($rr[$photo]),
'$alt-text' => $rr['name'],
'$name' => $rr['name'],
'$details' => $pdesc . $details,
'$page-type' => $page_type,
'$profile' => $profile,
'$location' => template_escape($location),
'$gender' => $gender,
'$pdesc' => $pdesc,
'$marital' => $marital,
'$homepage' => $homepage,
'$about' => $about,
$entry = array(
'id' => $rr['id'],
'profile_link' => $profile_link,
'photo' => $rr[$photo],
'alttext' => $rr['channel_name'],
'name' => $rr['channel_name'],
'details' => $pdesc . $details,
'profile' => $profile,
'location' => $location,
'gender' => $gender,
'pdesc' => $pdesc,
'marital' => $marital,
'homepage' => $homepage,
'about' => $about,
);
$arr = array('contact' => $rr, 'entry' => $entry);
call_hooks('directory_item', $arr);
unset($profile);
unset($location);
$entries[] = $entry;
}
logger('entries: ' . print_r($entries,true));
$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')
)); ));
$arr = array('contact' => $rr, 'entry' => $entry);
call_hooks('directory_item', $arr); $o .= paginate($a);
unset($profile);
unset($location);
$o .= $entry;
} }
$o .= "<div class=\"directory-end\" ></div>\r\n"; else
$o .= paginate($a); info( t("No entries (some entries may be hidden).") . EOL);
} }
else
info( t("No entries \x28some entries may be hidden\x29.") . EOL);
return $o; return $o;
} }

View File

@ -1,16 +1,16 @@
<h1>$sitedir</h1> <h1>$dirlbl</h1>
$globaldir {{ if $search }}
$admin <h4>$finddsc $safetxt</h4>
{{ endif }}
$finding {{for $entries as $entry}}
<div id="directory-search-wrapper"> {{ inc direntry.tpl }}{{ endinc }}
<form id="directory-search-form" action="directory" method="get" >
<span class="dirsearch-desc">$desc</span> {{ endfor }}
<input type="text" name="search" id="directory-search" class="search-input" onfocus="this.select();" value="$search" />
<input type="submit" name="submit" id="directory-search-submit" value="$submit" class="button" />
</form>
</div> <div class="directory-end"></div>
<div id="directory-search-end"></div>

11
view/tpl/direntry.tpl Normal file
View File

@ -0,0 +1,11 @@
<div class="directory-item lframe" id="directory-item-$entry.id" >
<div class="contact-photo-wrapper" id="directory-photo-wrapper-$entry.id" >
<div class="contact-photo" id="directory-photo-$entry.id" >
<a href="$entry.profile_link" class="directory-profile-link" id="directory-profile-link-$entry.id" ><img class="directory-photo-img" src="$entry.photo" alt="$entry.alttext" title="$entry.alttext" /></a>
</div>
</div>
<div class="contact-name" id="directory-name-$entry.id">$entry.name</div>
<div class="contact-details">$entry.details</div>
</div>