first cut at a directory popup. It's a bit annoying at the moment, so we'll have to make it less so. Also had second thoughts about the project homepage changes made yesterday. Just because a bunch of Reddit trolls can't get social networking out of their brain long enough to explore other technologies or even read the project page doesn't mean we should pander to them and explain how or why we either are or aren't a social network.

This commit is contained in:
friendica 2013-12-23 17:24:25 -08:00
parent 49d2ada4f8
commit b08d4cc1fe
9 changed files with 196 additions and 9 deletions

View file

@ -116,9 +116,6 @@ The internet is broken. We're fixing it.</div>
Now open your eyes. We've done some amazing things with decentralisation technology over the last few years and have created a different kind of network. We call it the Red Matrix. Forget the old internet - it's hopelessly broken and increasingly being choked off in order to take your money and spy on you. We're building tomorrow's internet today. And we're doing things a bit differently than what you may be used to. We could wait for this new internet to be built, but we don't really trust the typical corporations and governmental bodies to do it right. So we're building it on top of the old internet. And we're building privacy into its DNA. And it's <strong>here now</strong>.
</p>
<p>
It seems that many people can only envision the internet through the distorted perception of social networking. So let's get a few things straight. Is the Red Matrix a <em>social network</em>? No. <strong>Is your car an air-conditioner</strong>? No. Your car may <strong>have</strong> an air conditioner, but that isn't its prime function. Its prime function is a transportation device. The Red Matrix has some very advanced communication technology embedded in it, (much more advanced than many so-called <em>social networks</em>), and one can do social network things with it (quite well in fact); but its prime function is a decentralised <strong>identity-aware</strong> web publishing platform. More on that in a minute. Decentralised privacy aware communications between channels is (like your car's air conditioner) just another feature the Red Matrix provides. It doesn't belong to a corporation; it's just an integral part of your new internet.
</p>
<p>
The Red Matrix is a decentralised network where the <strong>people using it are in charge</strong> and the size of your server farm and wealth do not offer any comparable advantage. Anybody may participate on a level playing field. Cloud storage, file sharing, communications, content creation and management belong to <strong>everybody</strong> and can be shared with <strong>anybody</strong> (or <strong>somebody</strong>, or <strong>nobody</strong>). This is only a representative sample of the services we plan to offer. In an internet where creativity is allowed to flourish and corporate overlords have no power, the door is open to entirely new forms of expression and applications. The Red Matrix software is free and open source; created by volunteers and distributed under the MIT license.
</p>
<p>

View file

@ -168,6 +168,7 @@ function directory_content(&$a) {
'id' => ++$t,
'profile_link' => $profile_link,
'photo' => $rr['photo'],
'hash' => $rr['hash'],
'alttext' => $rr['name'] . ' ' . $rr['address'],
'name' => $rr['name'],
'details' => $pdesc . $details,
@ -186,7 +187,7 @@ function directory_content(&$a) {
call_hooks('directory_item', $arr);
$entries[] = $entry;
$entries[] = $arr['entry'];
unset($profile);
unset($location);

151
mod/dirprofile.php Normal file
View file

@ -0,0 +1,151 @@
<?php
require_once('include/dir_fns.php');
function dirprofile_init(&$a) {
if((get_config('system','block_public')) && (! local_user()) && (! remote_user())) {
notice( t('Public access denied.') . EOL);
return;
}
$hash = $_REQUEST['hash'];
if(! $hash)
return '';
$o = '';
$dirmode = intval(get_config('system','directory_mode'));
if(($dirmode == DIRECTORY_MODE_PRIMARY) || ($dirmode == DIRECTORY_MODE_STANDALONE)) {
$url = z_root() . '/dirsearch';
}
if(! $url) {
$directory = find_upstream_directory($dirmode);
if($directory) {
$url = $directory['url'] . '/dirsearch';
}
else {
$url = DIRECTORY_FALLBACK_MASTER . '/dirsearch';
}
}
logger('mod_directory: URL = ' . $url, LOGGER_DEBUG);
$contacts = array();
if(local_user()) {
$x = q("select abook_xchan from abook where abook_channel = %d",
intval(local_user())
);
if($x) {
foreach($x as $xx)
$contacts[] = $xx['abook_xchan'];
}
}
if($url) {
$query = $url . '?f=&hash=' . $hash;
$x = z_fetch_url($query);
logger('dirprofile: return from upstream: ' . print_r($x,true), LOGGER_DATA);
if($x['success']) {
$t = 0;
$j = json_decode($x['body'],true);
if($j) {
if($j['results']) {
$entries = array();
$photo = 'thumb';
foreach($j['results'] as $rr) {
$profile_link = chanlink_url($rr['url']);
$pdesc = (($rr['description']) ? $rr['description'] . '<br />' : '');
$connect_link = ((local_user()) ? z_root() . '/follow?f=&url=' . urlencode($rr['address']) : '');
if(in_array($rr['hash'],$contacts))
$connect_link = '';
$details = '';
if(strlen($rr['locale']))
$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);
$homepage = ((x($profile,'homepage') == 1) ? t('Homepage:') : False);
$about = ((x($profile,'about') == 1) ? t('About:') : False);
$entry = replace_macros(get_markup_template('direntry_large.tpl'), array(
'$id' => ++$t,
'$profile_link' => $profile_link,
'$photo' => $rr['photo_l'],
'$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,
'$conn_label' => t('Connect'),
'$connect' => $connect_link,
));
echo $entry;
killme();
}
}
else {
info( t("Not found.") . EOL);
}
}
}
}
}

View file

@ -27,9 +27,10 @@ function dirsearch_content(&$a) {
json_return_and_die($ret);
}
$hash = ((x($_REQUEST['hash'])) ? $_REQUEST['hash'] : '');
$name = ((x($_REQUEST,'name')) ? $_REQUEST['name'] : '');
$hub = ((x($_REQUEST,'hub')) ? $_REQUEST['hub'] : '');
$hub = ((x($_REQUEST,'hub')) ? $_REQUEST['hub'] : '');
$address = ((x($_REQUEST,'address')) ? $_REQUEST['address'] : '');
$locale = ((x($_REQUEST,'locale')) ? $_REQUEST['locale'] : '');
$region = ((x($_REQUEST,'region')) ? $_REQUEST['region'] : '');
@ -91,6 +92,13 @@ function dirsearch_content(&$a) {
$sql_extra .= " AND xprof_age >= " . intval($agege) . ") ";
}
if($hash) {
$sql_extra = " AND xchan_hash = '" . dbesc($hash) . "' ";
}
$perpage = (($_REQUEST['n']) ? $_REQUEST['n'] : 80);
$page = (($_REQUEST['p']) ? intval($_REQUEST['p'] - 1) : 0);
$startrec = (($page+1) * $perpage) - $perpage;
@ -112,6 +120,9 @@ function dirsearch_content(&$a) {
$logic = ((strlen($sql_extra)) ? 0 : 1);
if($hash)
$logic = 1;
$safesql = (($safe > 0) ? " and not ( xchan_flags & " . intval(XCHAN_FLAGS_CENSORED|XCHAN_FLAGS_SELFCENSORED) . " ) " : '');
if($safe < 0)
$safesql = " and ( xchan_flags & " . intval(XCHAN_FLAGS_CENSORED|XCHAN_FLAGS_SELFCENSORED) . " ) ";
@ -161,13 +172,13 @@ function dirsearch_content(&$a) {
json_return_and_die($spkt);
}
else {
dbg(1);
$r = q("SELECT xchan.*, xprof.* from xchan left join xprof on xchan_hash = xprof_hash where ( $logic $sql_extra ) and not ( xchan_flags & %d ) and not ( xchan_flags & %d ) and not ( xchan_flags & %d ) $safesql $order $qlimit ",
intval(XCHAN_FLAGS_HIDDEN),
intval(XCHAN_FLAGS_ORPHAN),
intval(XCHAN_FLAGS_DELETED)
);
dbg(0);
}
$ret['page'] = $page + 1;
@ -187,6 +198,7 @@ function dirsearch_content(&$a) {
// $entry['updated'] = (($rr['ud_date']) ? $rr['ud_date'] : '0000-00-00 00:00:00');
// $entry['update_guid'] = (($rr['ud_guid']) ? $rr['ud_guid'] : '');
$entry['url'] = $rr['xchan_url'];
$entry['photo_l'] = $rr['xchan_photo_l'];
$entry['photo'] = $rr['xchan_photo_m'];
$entry['address'] = $rr['xchan_addr'];
$entry['description'] = $rr['xprof_desc'];

View file

@ -55,6 +55,8 @@
#profile-expires,
#profile-expires,
#jot-perms-icon,
#jot-preview-link,
#profile-encrypt,
.hover, .focus {
cursor: pointer;
}

8
view/js/mod_directory.js Normal file
View file

@ -0,0 +1,8 @@
function dirdetails(hash) {
$.get('dirprofile' + '?f=&hash=' + hash, function( data ) {
$.colorbox({ html: data });
});
}

View file

@ -7,7 +7,7 @@
</div>
</div>
<div class="contact-name" id="directory-name-{{$entry.id}}">{{$entry.name}}</div>
<div class="contact-name" id="directory-name-{{$entry.id}}" ><span onmouseover="dirdetails('{{$entry.hash}}');" class="fakelink" >{{$entry.name}}</span></div>
{{if $entry.connect}}
<div class="directory-connect"><a href="{{$entry.connect}}">{{$entry.conn_label}}</a></div>
{{/if}}

16
view/tpl/direntry_large.tpl Executable file
View file

@ -0,0 +1,16 @@
<div class="directory-item lframe" id="directory-item-{{$id}}" >
<div class="generic-content-wrapper">
<div class="contact-photo-wrapper" id="directory-photo-wrapper-{{$id}}" >
<div class="contact-photo" id="directory-photo-{{$id}}" >
<a href="{{$profile_link}}" class="directory-profile-link" id="directory-profile-link-{{$id}}" ><img class="directory-photo-img" src="{{$photo}}" alt="{{$alttext}}" title="{{$alttext}}" /></a>
</div>
</div>
<div class="contact-name" id="directory-name-{{$id}}" >{{$name}}</div>
{{if $entry.connect}}
<div class="directory-connect"><a href="{{$connect}}">{{$conn_label}}</a></div>
{{/if}}
<div class="contact-details">{{$details}}</div>
</div>
</div>

View file

@ -70,7 +70,7 @@
</div>
{{/if}}
{{if $preview}}<span onclick="preview_post();" id="jot-preview-link" class="fakelink"><i class="icon-eye-open jot-icons" title="{{$preview}}"></i></span>{{/if}}
{{if $preview}}<span onclick="preview_post();" id="jot-preview-link"><i class="icon-eye-open jot-icons" title="{{$preview}}"></i></span>{{/if}}
<div id="profile-jot-perms-end"></div>