diff --git a/include/identity.php b/include/identity.php index 1cd2e6f73a..2230d98a42 100644 --- a/include/identity.php +++ b/include/identity.php @@ -45,39 +45,9 @@ if(! function_exists('profile_load')) { return; } - if(remote_user() && count($_SESSION['remote'])) { - foreach($_SESSION['remote'] as $visitor) { - if($visitor['uid'] == $user[0]['uid']) { - $r = q("SELECT `profile-id` FROM `contact` WHERE `id` = %d LIMIT 1", - intval($visitor['cid']) - ); - if(count($r)) - $profile = $r[0]['profile-id']; - break; - } - } - } + $pdata = get_profiledata_by_nick($nickname, $user[0]['uid'], $profile); - $r = null; - - if($profile) { - $profile_int = intval($profile); - $r = q("SELECT `profile`.`uid` AS `profile_uid`, `profile`.* , `contact`.`avatar-date` AS picdate, `contact`.`addr` AS faddr, `user`.* FROM `profile` - INNER JOIN `contact` on `contact`.`uid` = `profile`.`uid` INNER JOIN `user` ON `profile`.`uid` = `user`.`uid` - WHERE `user`.`nickname` = '%s' AND `profile`.`id` = %d AND `contact`.`self` = 1 LIMIT 1", - dbesc($nickname), - intval($profile_int) - ); - } - if((!$r) && (!count($r))) { - $r = q("SELECT `profile`.`uid` AS `profile_uid`, `profile`.* , `contact`.`avatar-date` AS picdate, `contact`.`addr` AS faddr, `user`.* FROM `profile` - INNER JOIN `contact` ON `contact`.`uid` = `profile`.`uid` INNER JOIN `user` ON `profile`.`uid` = `user`.`uid` - WHERE `user`.`nickname` = '%s' AND `profile`.`is-default` = 1 AND `contact`.`self` = 1 LIMIT 1", - dbesc($nickname) - ); - } - - if(($r === false) || (!count($r)) && !count($profiledata)) { + if(($pdata === false) || (!count($pdata)) && !count($profiledata)) { logger('profile error: ' . $a->query_string, LOGGER_DEBUG); notice( t('Requested profile is not available.') . EOL ); $a->error = 404; @@ -86,16 +56,16 @@ if(! function_exists('profile_load')) { // fetch user tags if this isn't the default profile - if(!$r[0]['is-default']) { + if(!$pdata['is-default']) { $x = q("SELECT `pub_keywords` FROM `profile` WHERE `uid` = %d AND `is-default` = 1 LIMIT 1", - intval($r[0]['profile_uid']) + intval($pdata['profile_uid']) ); if($x && count($x)) - $r[0]['pub_keywords'] = $x[0]['pub_keywords']; + $pdata['pub_keywords'] = $x[0]['pub_keywords']; } - $a->profile = $r[0]; - $a->profile_uid = $r[0]['profile_uid']; + $a->profile = $pdata; + $a->profile_uid = $pdata['profile_uid']; $a->profile['mobile-theme'] = get_pconfig($a->profile['profile_uid'], 'system', 'mobile_theme'); $a->profile['network'] = NETWORK_DFRN; @@ -147,6 +117,58 @@ if(! function_exists('profile_load')) { } +/** + * @brief Get all profil data of a local user + * If the viewer is an authenticated remote viewer, the profile displayed is the + * one that has been configured for his/her viewing in the Contact manager. + * Passing a non-zero profile ID can also allow a preview of a selected profile + * by the owner + * + * @param string $nickname + * @param int $uid + * @param int $profile + * ID of the profile + * @returns array + * Includes all available profile data + */ +function get_profiledata_by_nick($nickname, $uid = 0, $profile = 0) { + if(remote_user() && count($_SESSION['remote'])) { + foreach($_SESSION['remote'] as $visitor) { + if($visitor['uid'] == $uid) { + $r = q("SELECT `profile-id` FROM `contact` WHERE `id` = %d LIMIT 1", + intval($visitor['cid']) + ); + if(count($r)) + $profile = $r[0]['profile-id']; + break; + } + } + } + + $r = null; + + if($profile) { + $profile_int = intval($profile); + $r = q("SELECT `profile`.`uid` AS `profile_uid`, `profile`.* , `contact`.`avatar-date` AS picdate, `contact`.`addr`, `user`.* FROM `profile` + INNER JOIN `contact` on `contact`.`uid` = `profile`.`uid` INNER JOIN `user` ON `profile`.`uid` = `user`.`uid` + WHERE `user`.`nickname` = '%s' AND `profile`.`id` = %d AND `contact`.`self` = 1 LIMIT 1", + dbesc($nickname), + intval($profile_int) + ); + } + if((!$r) && (!count($r))) { + $r = q("SELECT `profile`.`uid` AS `profile_uid`, `profile`.* , `contact`.`avatar-date` AS picdate, `contact`.`addr`, `user`.* FROM `profile` + INNER JOIN `contact` ON `contact`.`uid` = `profile`.`uid` INNER JOIN `user` ON `profile`.`uid` = `user`.`uid` + WHERE `user`.`nickname` = '%s' AND `profile`.`is-default` = 1 AND `contact`.`self` = 1 LIMIT 1", + dbesc($nickname) + ); + } + + return $r[0]; + +} + + /** * * Function: profile_sidebar @@ -161,8 +183,6 @@ if(! function_exists('profile_load')) { * Exceptions: Returns empty string if passed $profile is wrong type or not populated * */ - - if(! function_exists('profile_sidebar')) { function profile_sidebar($profile, $block = 0) { $a = get_app(); @@ -170,7 +190,7 @@ if(! function_exists('profile_sidebar')) { $o = ''; $location = false; $address = false; - $pdesc = true; +// $pdesc = true; if((! is_array($profile)) && (! count($profile))) return $o; @@ -178,12 +198,8 @@ if(! function_exists('profile_sidebar')) { $profile['picdate'] = urlencode($profile['picdate']); if (($profile['network'] != "") AND ($profile['network'] != NETWORK_DFRN)) { - require_once('include/contact_selectors.php'); - if ($profile['url'] != "") - $profile['network_name'] = ''.network_to_name($profile['network'], $profile['url']).""; - else - $profile['network_name'] = network_to_name($profile['network']); - } else + $profile['network_name'] = format_network_name($profile['network'],$profile['url']); + } else $profile['network_name'] = ""; call_hooks('profile_sidebar_enter', $profile); @@ -270,6 +286,16 @@ if(! function_exists('profile_sidebar')) { ); } + // check if profile is a forum + if((x($profile['page-flags']) == 2) + || (x($profile['page-flags']) == 5) + || (x($profile['forum'])) + || (x($profile['prv'])) + || (x($profile['community']))) + $account_type = t('Forum'); + else + $account_type = ""; + if((x($profile,'address') == 1) || (x($profile,'locality') == 1) || (x($profile,'region') == 1) @@ -344,9 +370,10 @@ if(! function_exists('profile_sidebar')) { '$remoteconnect' => $remoteconnect, '$subscribe_feed' => $subscribe_feed, '$wallmessage' => $wallmessage, + '$account_type' => $account_type, '$location' => $location, '$gender' => $gender, - '$pdesc' => $pdesc, +// '$pdesc' => $pdesc, '$marital' => $marital, '$homepage' => $homepage, '$about' => $about, diff --git a/include/items.php b/include/items.php index 1e68787d24..2ac494ba27 100644 --- a/include/items.php +++ b/include/items.php @@ -1250,8 +1250,10 @@ function item_store($arr,$force_parent = false, $notify = false, $dontcache = fa if ($notify) $guid_prefix = ""; - else - $guid_prefix = $arr['network']; + else { + $parsed = parse_url($arr["author-link"]); + $guid_prefix = hash("crc32", $parsed["host"]); + } $arr['wall'] = ((x($arr,'wall')) ? intval($arr['wall']) : 0); $arr['guid'] = ((x($arr,'guid')) ? notags(trim($arr['guid'])) : get_guid(32, $guid_prefix)); @@ -2320,6 +2322,9 @@ function edited_timestamp_is_newer($existing, $update) { function consume_feed($xml,$importer,&$contact, &$hub, $datedir = 0, $pass = 0) { if ($contact['network'] === NETWORK_OSTATUS) { if ($pass < 2) { + // Test - remove before flight + //$tempfile = tempnam(get_temppath(), "ostatus2"); + //file_put_contents($tempfile, $xml); logger("Consume OStatus messages ", LOGGER_DEBUG); ostatus_import($xml,$importer,$contact, $hub); } diff --git a/include/ostatus.php b/include/ostatus.php index ebd5741e51..07eaec85d5 100644 --- a/include/ostatus.php +++ b/include/ostatus.php @@ -1282,6 +1282,14 @@ function ostatus_add_author($doc, $owner, $profile) { return $author; } +/* +To-Do: Picture attachments should look like this: + +https://status.pirati.ca/attachment/572819 + +*/ + function ostatus_entry($doc, $item, $owner, $toplevel = false) { $a = get_app(); diff --git a/include/text.php b/include/text.php index 2534891805..1b03c39d26 100644 --- a/include/text.php +++ b/include/text.php @@ -2289,32 +2289,23 @@ function formatBytes($bytes, $precision = 2) { } /** - * @brief Translate the PAGE type flags in human readable string + * @brief translate and format the networkname of a contact * - * @param int $page_type - * @return string $trans_type + * @param string $network + * Networkname of the contact (e.g. dfrn, rss and so on) + * @param sting $url + * The contact url + * @return string */ -function page_type_translate($page_type) { +function format_network_name($network, $url = 0) { + if ($network != "") { + require_once('include/contact_selectors.php'); + if ($url != "") + $network_name = ''.network_to_name($network, $url).""; + else + $network_name = network_to_name($network); - // ToDo: we need a good interpretable translation for PAGE_SOAPBOX - // and PAGE_PRVGROUP - switch ($page_type) { - case PAGE_NORMAL: - $trans_type = t('Normal Account'); - break; - case PAGE_SOAPBOX: - $trans_type = t('Fan Page'); - break; - case PAGE_COMMUNITY: - $trans_type = t('Community Forum'); - break; - case PAGE_FREELOVE: - $trans_type = t('Open Forum'); - break; - case PAGE_PRVGROUP: - $trans_type = t('Private Forum'); - break; + return $network_name; } - return $trans_type; } diff --git a/mod/contacts.php b/mod/contacts.php index f1537d5086..cff68abc65 100644 --- a/mod/contacts.php +++ b/mod/contacts.php @@ -35,10 +35,20 @@ function contacts_init(&$a) { if($contact_id) { $a->data['contact'] = $r[0]; + + if (($a->data['contact']['network'] != "") AND ($a->data['contact']['network'] != NETWORK_DFRN)) { + $networkname = format_network_name($a->data['contact']['network'],$a->data['contact']['url']); + } else + $networkname = ''; + $vcard_widget = replace_macros(get_markup_template("vcard-widget.tpl"),array( '$name' => htmlentities($a->data['contact']['name']), '$photo' => $a->data['contact']['photo'], - '$url' => ($a->data['contact']['network'] == NETWORK_DFRN) ? z_root()."/redir/".$a->data['contact']['id'] : $a->data['contact']['url'] + '$url' => ($a->data['contact']['network'] == NETWORK_DFRN) ? z_root()."/redir/".$a->data['contact']['id'] : $a->data['contact']['url'], + '$addr' => (($a->data['contact']['addr'] != "") ? ($a->data['contact']['addr']) : ""), + '$network_name' => $networkname, + '$network' => t('Network:'), + 'account_type' => (($a->data['contact']['forum'] || $a->data['contact']['prv']) ? t('Forum') : '') )); $finpeople_widget = ''; $follow_widget = ''; @@ -570,16 +580,8 @@ function contacts_content(&$a) { $follow = $a->get_baseurl(true)."/follow?url=".urlencode($contact["url"]); - $header = $contact["name"]; - - if ($contact["addr"] != "") - $header .= " <".$contact["addr"].">"; - - $header .= " (".network_to_name($contact['network'], $contact['url']).")"; - $o .= replace_macros($tpl, array( //'$header' => t('Contact Editor'), - //'$header' => htmlentities($header), '$tab_str' => $tab_str, '$submit' => t('Submit'), '$lbl_vis1' => t('Profile Visibility'), @@ -922,23 +924,8 @@ function contact_posts($a, $contact_id) { intval($a->pager['itemspage']) ); - if (!$r) - $o = $contact["url"]." - ".$contact_id; - $tab_str = contacts_tab($a, $contact_id, 1); - $header = $contact["name"]; - - if ($contact["addr"] != "") - $header .= " <".$contact["addr"].">"; - - $header .= " (".network_to_name($contact['network'], $contact['url']).")"; - - //$tpl = get_markup_template("section_title.tpl"); - //$o = replace_macros($tpl,array( - // '$title' => htmlentities($header) - //)); - $o .= $tab_str; $o .= conversation($a,$r,'community',false); diff --git a/mod/crepair.php b/mod/crepair.php index 99a039b379..6f951bdf6e 100644 --- a/mod/crepair.php +++ b/mod/crepair.php @@ -23,14 +23,9 @@ function crepair_init(&$a) { $a->page['aside'] = ''; if($contact_id) { - $a->data['contact'] = $r[0]; - $tpl = get_markup_template("vcard-widget.tpl"); - $vcard_widget .= replace_macros($tpl, array( - '$name' => htmlentities($a->data['contact']['name']), - '$photo' => $a->data['contact']['photo'] - )); - $a->page['aside'] .= $vcard_widget; - + $a->data['contact'] = $r[0]; + $contact = $r[0]; + profile_load($a, "", 0, get_contact_details_by_url($contact["url"])); } } @@ -161,17 +156,10 @@ function crepair_content(&$a) { $tab_str = contacts_tab($a, $contact['id'], 5); - $header = $contact["name"]; - - if ($contact["addr"] != "") - $header .= " <".$contact["addr"].">"; - - $header .= " (".network_to_name($contact['network'], $contact['url']).")"; $tpl = get_markup_template('crepair.tpl'); $o .= replace_macros($tpl, array( //'$title' => t('Repair Contact Settings'), - //'$title' => htmlentities($header), '$tab_str' => $tab_str, '$warning' => $warning, '$info' => $info, diff --git a/mod/directory.php b/mod/directory.php index bedc71907e..cb233db898 100644 --- a/mod/directory.php +++ b/mod/directory.php @@ -86,7 +86,7 @@ function directory_content(&$a) { $limit = intval($a->pager['start']).",".intval($a->pager['itemspage']); $r = $db->q("SELECT `profile`.*, `profile`.`uid` AS `profile_uid`, `user`.`nickname`, `user`.`timezone` , `user`.`page-flags`, - `contact`.`addr` AS faddr, `contact`.`url` AS profile_url FROM `profile` + `contact`.`addr`, `contact`.`url` AS profile_url FROM `profile` LEFT JOIN `user` ON `user`.`uid` = `profile`.`uid` LEFT JOIN `contact` ON `contact`.`uid` = `user`.`uid` WHERE `is-default` = 1 $publish AND `user`.`blocked` = 0 AND `contact`.`self` $sql_extra $order LIMIT ".$limit); @@ -102,7 +102,7 @@ function directory_content(&$a) { $community = ''; $itemurl= ''; - $itemurl = (($rr['faddr'] != "") ? $rr['faddr'] : $rr['profile_url']); + $itemurl = (($rr['addr'] != "") ? $rr['addr'] : $rr['profile_url']); $profile_link = z_root() . '/profile/' . ((strlen($rr['nickname'])) ? $rr['nickname'] : $rr['profile_uid']); diff --git a/mod/photos.php b/mod/photos.php index 5ca973d166..6b97d7d4fb 100644 --- a/mod/photos.php +++ b/mod/photos.php @@ -24,24 +24,32 @@ function photos_init(&$a) { if($a->argc > 1) { $nick = $a->argv[1]; - $r = q("SELECT * FROM `user` WHERE `nickname` = '%s' AND `blocked` = 0 LIMIT 1", + $user = q("SELECT * FROM `user` WHERE `nickname` = '%s' AND `blocked` = 0 LIMIT 1", dbesc($nick) ); - if(! count($r)) + if(! count($user)) return; - $a->data['user'] = $r[0]; - $a->profile_uid = $r[0]['uid']; + $a->data['user'] = $user[0]; + $a->profile_uid = $user[0]['uid']; $is_owner = (local_user() && (local_user() == $a->profile_uid)); - $profilephoto = $a->get_cached_avatar_image($a->get_baseurl() . '/photo/profile/' . $a->data['user']['uid'] . '.jpg'); + $profile = get_profiledata_by_nick($nick, $a->profile_uid); + + if((x($profile['page-flags']) == 2) || (x($profile['page-flags']) == 5)) + $account_type = t('Forum'); + else + $account_type = ""; $tpl = get_markup_template("vcard-widget.tpl"); $vcard_widget .= replace_macros($tpl, array( - '$name' => $a->data['user']['username'], - '$photo' => $profilephoto + '$name' => $profile['name'], + '$photo' => $profile['photo'], + '$addr' => (($profile['addr'] != "") ? $profile['addr'] : ""), + '$account_type' => $account_type, + '$pdesc' => (($profile['pdesc'] != "") ? $profile['pdesc'] : ""), )); @@ -89,7 +97,7 @@ function photos_init(&$a) { $photo_albums_widget = replace_macros(get_markup_template('photo_albums.tpl'),array( '$nick' => $a->data['user']['nickname'], '$title' => t('Photo Albums'), - 'recent' => t('Recent Photos'), + '$recent' => t('Recent Photos'), '$albums' => $albums['albums'], '$baseurl' => z_root(), '$upload' => array( t('Upload New Photos'), $a->get_baseurl() . '/photos/' . $a->data['user']['nickname'] . '/upload'), diff --git a/mod/videos.php b/mod/videos.php index 4f5d7cd22d..7ea09d6a93 100644 --- a/mod/videos.php +++ b/mod/videos.php @@ -21,23 +21,31 @@ function videos_init(&$a) { if($a->argc > 1) { $nick = $a->argv[1]; - $r = q("SELECT * FROM `user` WHERE `nickname` = '%s' AND `blocked` = 0 LIMIT 1", + $user = q("SELECT * FROM `user` WHERE `nickname` = '%s' AND `blocked` = 0 LIMIT 1", dbesc($nick) ); - if(! count($r)) + if(! count($user)) return; - $a->data['user'] = $r[0]; - $a->profile_uid = $r[0]['uid']; + $a->data['user'] = $user[0]; + $a->profile_uid = $user[0]['uid']; - $profilephoto = $a->get_cached_avatar_image($a->get_baseurl() . '/photo/profile/' . $a->data['user']['uid'] . '.jpg'); + $profile = get_profiledata_by_nick($nick, $a->profile_uid); + + if((x($profile['page-flags']) == 2) || (x($profile['page-flags']) == 5)) + $account_type = t('Forum'); + else + $account_type = ""; $tpl = get_markup_template("vcard-widget.tpl"); - $vcard_widget = replace_macros($tpl, array( - '$name' => $a->data['user']['username'], - '$photo' => $profilephoto + $vcard_widget .= replace_macros($tpl, array( + '$name' => $profile['name'], + '$photo' => $profile['photo'], + '$addr' => (($profile['addr'] != "") ? $profile['addr'] : ""), + '$account_type' => $account_type, + '$pdesc' => (($profile['pdesc'] != "") ? $profile['pdesc'] : ""), )); @@ -53,7 +61,7 @@ function videos_init(&$a) { $albums_visible = ((intval($a->data['user']['hidewall']) && (! local_user()) && (! remote_user())) ? false : true); if($albums_visible) { - $o .= '