Merge pull request #4157 from MrPetovan/task/fix-notices

Fix PHP notices
This commit is contained in:
Michael Vogel 2018-01-02 15:16:43 +01:00 committed by GitHub
commit 92b501aa83
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
31 changed files with 1088 additions and 1165 deletions

View File

@ -572,6 +572,51 @@ function x($s, $k = null)
} }
} }
/**
* Return the provided variable value if it exists and is truthy or the provided
* default value instead.
*
* Works with initialized variables and potentially uninitialized array keys
*
* Usages:
* - defaults($var, $default)
* - defaults($array, 'key', $default)
*
* @brief Returns a defaut value if the provided variable or array key is falsy
* @see x()
* @return mixed
*/
function defaults() {
$args = func_get_args();
if (count($args) < 2) {
throw new BadFunctionCallException('defaults() requires at least 2 parameters');
}
if (count($args) > 3) {
throw new BadFunctionCallException('defaults() cannot use more than 3 parameters');
}
if (count($args) === 3 && !is_array($args[0])) {
throw new BadFunctionCallException('defaults($arr, $key, $def) requires an array as first parameter');
}
if (count($args) === 3 && is_null($args[1])) {
throw new BadFunctionCallException('defaults($arr, $key, $def) $key is null');
}
$default = array_pop($args);
if (call_user_func_array('x', $args)) {
if (count($args) === 1) {
$return = $args[0];
} else {
$return = $args[0][$args[1]];
}
} else {
$return = $default;
}
return $return;
}
/** /**
* @brief Returns the baseurl. * @brief Returns the baseurl.
* *
@ -1590,14 +1635,11 @@ function argv($x)
function infinite_scroll_data($module) function infinite_scroll_data($module)
{ {
if (PConfig::get(local_user(), 'system', 'infinite_scroll') if (PConfig::get(local_user(), 'system', 'infinite_scroll')
&& ($module == "network") && ($_GET["mode"] != "minimal") && $module == 'network'
&& defaults($_GET, 'mode', '') != 'minimal'
) { ) {
// get the page number // get the page number
if (is_string($_GET["page"])) { $pageno = defaults($_GET, 'page', 1);
$pageno = $_GET["page"];
} else {
$pageno = 1;
}
$reload_uri = ""; $reload_uri = "";
@ -1608,7 +1650,8 @@ function infinite_scroll_data($module)
} }
} }
if (($a->page_offset != "") && ! strstr($reload_uri, "&offset=")) { $a = get_app();
if ($a->page_offset != "" && !strstr($reload_uri, "&offset=")) {
$reload_uri .= "&offset=" . urlencode($a->page_offset); $reload_uri .= "&offset=" . urlencode($a->page_offset);
} }

View File

@ -435,60 +435,65 @@ function bb_replace_images($body, $images) {
return $newbody; return $newbody;
} }
function bb_ShareAttributes($share, $simplehtml) { function bb_ShareAttributes($share, $simplehtml)
{
$attributes = $share[2]; $attributes = $share[2];
$author = ""; $author = "";
preg_match("/author='(.*?)'/ism", $attributes, $matches); preg_match("/author='(.*?)'/ism", $attributes, $matches);
if ($matches[1] != "") if (x($matches, 1)) {
$author = html_entity_decode($matches[1],ENT_QUOTES,'UTF-8'); $author = html_entity_decode($matches[1], ENT_QUOTES, 'UTF-8');
}
preg_match('/author="(.*?)"/ism', $attributes, $matches); preg_match('/author="(.*?)"/ism', $attributes, $matches);
if ($matches[1] != "") if (x($matches, 1)) {
$author = $matches[1]; $author = $matches[1];
}
$profile = ""; $profile = "";
preg_match("/profile='(.*?)'/ism", $attributes, $matches); preg_match("/profile='(.*?)'/ism", $attributes, $matches);
if ($matches[1] != "") if (x($matches, 1)) {
$profile = $matches[1]; $profile = $matches[1];
}
preg_match('/profile="(.*?)"/ism', $attributes, $matches); preg_match('/profile="(.*?)"/ism', $attributes, $matches);
if ($matches[1] != "") if (x($matches, 1)) {
$profile = $matches[1]; $profile = $matches[1];
}
$avatar = ""; $avatar = "";
preg_match("/avatar='(.*?)'/ism", $attributes, $matches); preg_match("/avatar='(.*?)'/ism", $attributes, $matches);
if ($matches[1] != "") if (x($matches, 1)) {
$avatar = $matches[1]; $avatar = $matches[1];
}
preg_match('/avatar="(.*?)"/ism', $attributes, $matches); preg_match('/avatar="(.*?)"/ism', $attributes, $matches);
if ($matches[1] != "") if (x($matches, 1)) {
$avatar = $matches[1]; $avatar = $matches[1];
}
$link = ""; $link = "";
preg_match("/link='(.*?)'/ism", $attributes, $matches); preg_match("/link='(.*?)'/ism", $attributes, $matches);
if ($matches[1] != "") if (x($matches, 1)) {
$link = $matches[1]; $link = $matches[1];
}
preg_match('/link="(.*?)"/ism', $attributes, $matches); preg_match('/link="(.*?)"/ism', $attributes, $matches);
if ($matches[1] != "") if (x($matches, 1)) {
$link = $matches[1]; $link = $matches[1];
}
$posted = ""; $posted = "";
$itemcache = get_itemcachepath();
preg_match("/posted='(.*?)'/ism", $attributes, $matches); preg_match("/posted='(.*?)'/ism", $attributes, $matches);
if ($matches[1] != "") if (x($matches, 1)) {
$posted = $matches[1]; $posted = $matches[1];
}
preg_match('/posted="(.*?)"/ism', $attributes, $matches); preg_match('/posted="(.*?)"/ism', $attributes, $matches);
if ($matches[1] != "") if (x($matches, 1)) {
$posted = $matches[1]; $posted = $matches[1];
}
// relative dates only make sense when they aren't cached
if ($itemcache == "")
$reldate = (($posted) ? " " . relative_date($posted) : '');
// We only call this so that a previously unknown contact can be added. // We only call this so that a previously unknown contact can be added.
// This is important for the function "get_contact_details_by_url". // This is important for the function "get_contact_details_by_url".
@ -497,99 +502,107 @@ function bb_ShareAttributes($share, $simplehtml) {
$data = Contact::getDetailsByURL($profile); $data = Contact::getDetailsByURL($profile);
if (isset($data["name"]) && ($data["name"] != "") && isset($data["addr"]) && ($data["addr"] != "")) if (x($data, "name") && x($data, "addr")) {
$userid_compact = $data["name"]." (".$data["addr"].")"; $userid_compact = $data["name"] . " (" . $data["addr"] . ")";
else } else {
$userid_compact = GetProfileUsername($profile,$author, true); $userid_compact = GetProfileUsername($profile, $author, true);
}
if (isset($data["addr"]) && ($data["addr"] != "")) if (x($data, "addr")) {
$userid = $data["addr"]; $userid = $data["addr"];
else } else {
$userid = GetProfileUsername($profile,$author, false); $userid = GetProfileUsername($profile, $author, false);
}
if (isset($data["name"]) && ($data["name"] != "")) if (x($data, "name")) {
$author = $data["name"]; $author = $data["name"];
}
if (isset($data["micro"]) && ($data["micro"] != "")) if (x($data, "micro")) {
$avatar = $data["micro"]; $avatar = $data["micro"];
}
$preshare = trim($share[1]); $preshare = trim($share[1]);
if ($preshare != "") if ($preshare != "") {
$preshare .= "<br /><br />"; $preshare .= "<br /><br />";
}
switch ($simplehtml) { switch ($simplehtml) {
case 1: case 1:
$text = $preshare.html_entity_decode("&#x2672; ", ENT_QUOTES, 'UTF-8').' <a href="'.$profile.'">'.$userid."</a>: <br />»".$share[3]."«"; $text = $preshare . html_entity_decode("&#x2672; ", ENT_QUOTES, 'UTF-8') . ' <a href="' . $profile . '">' . $userid . "</a>: <br />»" . $share[3] . "«";
break; break;
case 2: case 2:
$text = $preshare.html_entity_decode("&#x2672; ", ENT_QUOTES, 'UTF-8').' '.$userid_compact.": <br />".$share[3]; $text = $preshare . html_entity_decode("&#x2672; ", ENT_QUOTES, 'UTF-8') . ' ' . $userid_compact . ": <br />" . $share[3];
break; break;
case 3: // Diaspora case 3: // Diaspora
$headline .= '<b>'.html_entity_decode("&#x2672; ", ENT_QUOTES, 'UTF-8').$userid.':</b><br />'; $headline .= '<b>' . html_entity_decode("&#x2672; ", ENT_QUOTES, 'UTF-8') . $userid . ':</b><br />';
$text = trim($share[1]); $text = trim($share[1]);
if ($text != "") if ($text != "") {
$text .= "<hr />"; $text .= "<hr />";
}
if (substr(normalise_link($link), 0, 19) != "http://twitter.com/") { if (substr(normalise_link($link), 0, 19) != "http://twitter.com/") {
$text .= $headline.'<blockquote>'.trim($share[3])."</blockquote><br />"; $text .= $headline . '<blockquote>' . trim($share[3]) . "</blockquote><br />";
if ($link != "") if ($link != "") {
$text .= '<br /><a href="'.$link.'">[l]</a>'; $text .= '<br /><a href="' . $link . '">[l]</a>';
} else }
$text .= '<br /><a href="'.$link.'">'.$link.'</a>'; } else {
$text .= '<br /><a href="' . $link . '">' . $link . '</a>';
}
break; break;
case 4: case 4:
$headline .= '<br /><b>'.html_entity_decode("&#x2672; ", ENT_QUOTES, 'UTF-8'); $headline .= '<br /><b>' . html_entity_decode("&#x2672; ", ENT_QUOTES, 'UTF-8');
$headline .= sprintf(t('<a href="%1$s" target="_blank">%2$s</a> %3$s'), $link, $userid, $posted); $headline .= t('<a href="%1$s" target="_blank">%2$s</a> %3$s', $link, $userid, $posted);
$headline .= ":</b><br />"; $headline .= ":</b><br />";
$text = trim($share[1]); $text = trim($share[1]);
if ($text != "") if ($text != "") {
$text .= "<hr />"; $text .= "<hr />";
}
$text .= $headline.'<blockquote class="shared_content">'.trim($share[3])."</blockquote><br />"; $text .= $headline . '<blockquote class="shared_content">' . trim($share[3]) . "</blockquote><br />";
break; break;
case 5: case 5:
$text = $preshare.html_entity_decode("&#x2672; ", ENT_QUOTES, 'UTF-8').' '.$userid_compact.": <br />".$share[3]; $text = $preshare . html_entity_decode("&#x2672; ", ENT_QUOTES, 'UTF-8') . ' ' . $userid_compact . ": <br />" . $share[3];
break; break;
case 6: // app.net case 6: // app.net
$text = $preshare."&gt;&gt; @".$userid_compact.": <br />".$share[3]; $text = $preshare . "&gt;&gt; @" . $userid_compact . ": <br />" . $share[3];
break; break;
case 7: // statusnet/GNU Social case 7: // statusnet/GNU Social
$text = $preshare.html_entity_decode("&#x2672; ", ENT_QUOTES, 'UTF-8')." @".$userid_compact.": ".$share[3]; $text = $preshare . html_entity_decode("&#x2672; ", ENT_QUOTES, 'UTF-8') . " @" . $userid_compact . ": " . $share[3];
break; break;
case 8: // twitter case 8: // twitter
$text = $preshare."RT @".$userid_compact.": ".$share[3]; $text = $preshare . "RT @" . $userid_compact . ": " . $share[3];
break; break;
case 9: // Google+/Facebook case 9: // Google+/Facebook
$text = $preshare.html_entity_decode("&#x2672; ", ENT_QUOTES, 'UTF-8').' '.$userid_compact.": <br />".$share[3]; $text = $preshare . html_entity_decode("&#x2672; ", ENT_QUOTES, 'UTF-8') . ' ' . $userid_compact . ": <br />" . $share[3];
if ($link != "") if ($link != "") {
$text .= "<br /><br />".$link; $text .= "<br /><br />" . $link;
}
break; break;
default: default:
$text = trim($share[1])."\n"; $text = trim($share[1]) . "\n";
$avatar = proxy_url($avatar, false, PROXY_SIZE_THUMB); $avatar = proxy_url($avatar, false, PROXY_SIZE_THUMB);
$tpl = get_markup_template('shared_content.tpl'); $tpl = get_markup_template('shared_content.tpl');
$text .= replace_macros($tpl, $text .= replace_macros($tpl, array(
array( '$profile' => $profile,
'$profile' => $profile, '$avatar' => $avatar,
'$avatar' => $avatar, '$author' => $author,
'$author' => $author, '$link' => $link,
'$link' => $link, '$posted' => $posted,
'$posted' => $posted, '$content' => trim($share[3])
'$reldate' => $reldate, )
'$content' => trim($share[3]) );
)
);
break; break;
} }

View File

@ -545,8 +545,10 @@ function conversation(App $a, $items, $mode, $update, $preview = false) {
$profile_owner = $a->profile['profile_uid']; $profile_owner = $a->profile['profile_uid'];
if (!$update) { if (!$update) {
$tab = notags(trim($_GET['tab'])); $tab = 'posts';
$tab = ( $tab ? $tab : 'posts' ); if (x($_GET, 'tab')) {
$tab = notags(trim($_GET['tab']));
}
if ($tab === 'posts') { if ($tab === 'posts') {
/* /*
* This is ugly, but we can't pass the profile_uid through the session to the ajax updater, * This is ugly, but we can't pass the profile_uid through the session to the ajax updater,
@ -647,20 +649,10 @@ function conversation(App $a, $items, $mode, $update, $preview = false) {
$threadsid++; $threadsid++;
$comment = '';
$owner_url = ''; $owner_url = '';
$owner_name = ''; $owner_name = '';
$sparkle = ''; $sparkle = '';
if ($mode === 'search' || $mode === 'community') {
if (((activity_match($item['verb'], ACTIVITY_LIKE)) || (activity_match($item['verb'], ACTIVITY_DISLIKE)))
&& ($item['id'] != $item['parent']))
continue;
$nickname = $item['nickname'];
} else {
$nickname = $a->user['nickname'];
}
// prevent private email from leaking. // prevent private email from leaking.
if ($item['network'] === NETWORK_MAIL && local_user() != $item['uid']) { if ($item['network'] === NETWORK_MAIL && local_user() != $item['uid']) {
continue; continue;
@ -813,7 +805,6 @@ function conversation(App $a, $items, $mode, $update, $preview = false) {
'like' => '', 'like' => '',
'dislike' => '', 'dislike' => '',
'comment' => '', 'comment' => '',
//'conv' => (($preview) ? '' : array('href'=> 'display/' . $nickname . '/' . $item['id'], 'title'=> t('View in context'))),
'conv' => (($preview) ? '' : array('href'=> 'display/'.$item['guid'], 'title'=> t('View in context'))), 'conv' => (($preview) ? '' : array('href'=> 'display/'.$item['guid'], 'title'=> t('View in context'))),
'previewing' => $previewing, 'previewing' => $previewing,
'wait' => t('Please wait'), 'wait' => t('Please wait'),
@ -1197,39 +1188,40 @@ function format_like($cnt, array $arr, $type, $id) {
return $o; return $o;
} }
function status_editor(App $a, $x, $notes_cid = 0, $popup = false) { function status_editor(App $a, $x, $notes_cid = 0, $popup = false)
{
$o = ''; $o = '';
$geotag = (x($x, 'allow_location') ? replace_macros(get_markup_template('jot_geotag.tpl'), array()) : ''); $geotag = x($x, 'allow_location') ? replace_macros(get_markup_template('jot_geotag.tpl'), array()) : '';
$tpl = get_markup_template('jot-header.tpl'); $tpl = get_markup_template('jot-header.tpl');
$a->page['htmlhead'] .= replace_macros($tpl, array( $a->page['htmlhead'] .= replace_macros($tpl, array(
'$newpost' => 'true', '$newpost' => 'true',
'$baseurl' => System::baseUrl(true), '$baseurl' => System::baseUrl(true),
'$geotag' => $geotag, '$geotag' => $geotag,
'$nickname' => $x['nickname'], '$nickname' => $x['nickname'],
'$ispublic' => t('Visible to <strong>everybody</strong>'), '$ispublic' => t('Visible to <strong>everybody</strong>'),
'$linkurl' => t('Please enter a link URL:'), '$linkurl' => t('Please enter a link URL:'),
'$vidurl' => t("Please enter a video link/URL:"), '$vidurl' => t("Please enter a video link/URL:"),
'$audurl' => t("Please enter an audio link/URL:"), '$audurl' => t("Please enter an audio link/URL:"),
'$term' => t('Tag term:'), '$term' => t('Tag term:'),
'$fileas' => t('Save to Folder:'), '$fileas' => t('Save to Folder:'),
'$whereareu' => t('Where are you right now?'), '$whereareu' => t('Where are you right now?'),
'$delitems' => t('Delete item(s)?') '$delitems' => t('Delete item(s)?')
)); ));
$tpl = get_markup_template('jot-end.tpl'); $tpl = get_markup_template('jot-end.tpl');
$a->page['end'] .= replace_macros($tpl, array( $a->page['end'] .= replace_macros($tpl, array(
'$newpost' => 'true', '$newpost' => 'true',
'$baseurl' => System::baseUrl(true), '$baseurl' => System::baseUrl(true),
'$geotag' => $geotag, '$geotag' => $geotag,
'$nickname' => $x['nickname'], '$nickname' => $x['nickname'],
'$ispublic' => t('Visible to <strong>everybody</strong>'), '$ispublic' => t('Visible to <strong>everybody</strong>'),
'$linkurl' => t('Please enter a link URL:'), '$linkurl' => t('Please enter a link URL:'),
'$vidurl' => t("Please enter a video link/URL:"), '$vidurl' => t("Please enter a video link/URL:"),
'$audurl' => t("Please enter an audio link/URL:"), '$audurl' => t("Please enter an audio link/URL:"),
'$term' => t('Tag term:'), '$term' => t('Tag term:'),
'$fileas' => t('Save to Folder:'), '$fileas' => t('Save to Folder:'),
'$whereareu' => t('Where are you right now?') '$whereareu' => t('Where are you right now?')
)); ));
@ -1262,57 +1254,56 @@ function status_editor(App $a, $x, $notes_cid = 0, $popup = false) {
$tpl = get_markup_template("jot.tpl"); $tpl = get_markup_template("jot.tpl");
$o .= replace_macros($tpl,array( $o .= replace_macros($tpl,array(
'$return_path' => $query_str, '$return_path' => $query_str,
'$action' => 'item', '$action' => 'item',
'$share' => (x($x,'button') ? $x['button'] : t('Share')), '$share' => defaults($x, 'button', t('Share')),
'$upload' => t('Upload photo'), '$upload' => t('Upload photo'),
'$shortupload' => t('upload photo'), '$shortupload' => t('upload photo'),
'$attach' => t('Attach file'), '$attach' => t('Attach file'),
'$shortattach' => t('attach file'), '$shortattach' => t('attach file'),
'$weblink' => t('Insert web link'), '$weblink' => t('Insert web link'),
'$shortweblink' => t('web link'), '$shortweblink' => t('web link'),
'$video' => t('Insert video link'), '$video' => t('Insert video link'),
'$shortvideo' => t('video link'), '$shortvideo' => t('video link'),
'$audio' => t('Insert audio link'), '$audio' => t('Insert audio link'),
'$shortaudio' => t('audio link'), '$shortaudio' => t('audio link'),
'$setloc' => t('Set your location'), '$setloc' => t('Set your location'),
'$shortsetloc' => t('set location'), '$shortsetloc' => t('set location'),
'$noloc' => t('Clear browser location'), '$noloc' => t('Clear browser location'),
'$shortnoloc' => t('clear location'), '$shortnoloc' => t('clear location'),
'$title' => $x['title'], '$title' => defaults($x, 'title', ''),
'$placeholdertitle' => t('Set title'), '$placeholdertitle' => t('Set title'),
'$category' => $x['category'], '$category' => defaults($x, 'category', ''),
'$placeholdercategory' => (Feature::isEnabled(local_user(), 'categories') ? t('Categories (comma-separated list)') : ''), '$placeholdercategory' => Feature::isEnabled(local_user(), 'categories') ? t('Categories (comma-separated list)') : '',
'$wait' => t('Please wait'), '$wait' => t('Please wait'),
'$permset' => t('Permission settings'), '$permset' => t('Permission settings'),
'$shortpermset' => t('permissions'), '$shortpermset' => t('permissions'),
'$ptyp' => (($notes_cid) ? 'note' : 'wall'), '$ptyp' => $notes_cid ? 'note' : 'wall',
'$content' => $x['content'], '$content' => defaults($x, 'content', ''),
'$post_id' => $x['post_id'], '$post_id' => defaults($x, 'post_id', ''),
'$baseurl' => System::baseUrl(true), '$baseurl' => System::baseUrl(true),
'$defloc' => $x['default_location'], '$defloc' => $x['default_location'],
'$visitor' => $x['visitor'], '$visitor' => $x['visitor'],
'$pvisit' => (($notes_cid) ? 'none' : $x['visitor']), '$pvisit' => $notes_cid ? 'none' : $x['visitor'],
'$public' => t('Public post'), '$public' => t('Public post'),
'$jotnets' => $jotnets, '$lockstate' => $x['lockstate'],
'$lockstate' => $x['lockstate'], '$bang' => $x['bang'],
'$bang' => $x['bang'], '$profile_uid' => $x['profile_uid'],
'$profile_uid' => $x['profile_uid'], '$preview' => Feature::isEnabled($x['profile_uid'], 'preview') ? t('Preview') : '',
'$preview' => ((Feature::isEnabled($x['profile_uid'],'preview')) ? t('Preview') : ''), '$jotplugins' => $jotplugins,
'$jotplugins' => $jotplugins, '$notes_cid' => $notes_cid,
'$notes_cid' => $notes_cid, '$sourceapp' => t($a->sourcename),
'$sourceapp' => t($a->sourcename), '$cancel' => t('Cancel'),
'$cancel' => t('Cancel'), '$rand_num' => random_digits(12),
'$rand_num' => random_digits(12),
// ACL permissions box // ACL permissions box
'$acl' => $x['acl'], '$acl' => $x['acl'],
'$acl_data' => $x['acl_data'], '$acl_data' => $x['acl_data'],
'$group_perms' => t('Post to Groups'), '$group_perms' => t('Post to Groups'),
'$contact_perms' => t('Post to Contacts'), '$contact_perms' => t('Post to Contacts'),
'$private' => t('Private post'), '$private' => t('Private post'),
'$is_private' => $private_post, '$is_private' => $private_post,
'$public_link' => $public_post_link, '$public_link' => $public_post_link,
//jot nav tab (used in some themes) //jot nav tab (used in some themes)
'$message' => t('Message'), '$message' => t('Message'),
@ -1321,7 +1312,7 @@ function status_editor(App $a, $x, $notes_cid = 0, $popup = false) {
if ($popup == true) { if ($popup == true) {
$o = '<div id="jot-popup" style="display: none;">'.$o.'</div>'; $o = '<div id="jot-popup" style="display: none;">' . $o . '</div>';
} }
return $o; return $o;
@ -1577,9 +1568,9 @@ function get_responses($conv_responses, $response_verbs, $ob, $item) {
$ret = array(); $ret = array();
foreach ($response_verbs as $v) { foreach ($response_verbs as $v) {
$ret[$v] = array(); $ret[$v] = array();
$ret[$v]['count'] = ((x($conv_responses[$v], $item['uri'])) ? $conv_responses[$v][$item['uri']] : ''); $ret[$v]['count'] = defaults($conv_responses[$v], $item['uri'], '');
$ret[$v]['list'] = ((x($conv_responses[$v], $item['uri'])) ? $conv_responses[$v][$item['uri'] . '-l'] : ''); $ret[$v]['list'] = defaults($conv_responses[$v], $item['uri'] . '-l', '');
$ret[$v]['self'] = ((x($conv_responses[$v], $item['uri'])) ? $conv_responses[$v][$item['uri'] . '-self'] : '0'); $ret[$v]['self'] = defaults($conv_responses[$v], $item['uri'] . '-self', '0');
if (count($ret[$v]['list']) > MAX_LIKERS) { if (count($ret[$v]['list']) > MAX_LIKERS) {
$ret[$v]['list_part'] = array_slice($ret[$v]['list'], 0, MAX_LIKERS); $ret[$v]['list_part'] = array_slice($ret[$v]['list'], 0, MAX_LIKERS);
array_push($ret[$v]['list_part'], '<a href="#" data-toggle="modal" data-target="#' . $v . 'Modal-' array_push($ret[$v]['list_part'], '<a href="#" data-toggle="modal" data-target="#' . $v . 'Modal-'

View File

@ -13,7 +13,7 @@ use Friendica\Util\Map;
require_once 'include/bbcode.php'; require_once 'include/bbcode.php';
require_once 'include/datetime.php'; require_once 'include/datetime.php';
require_once "include/conversation.php"; require_once 'include/conversation.php';
function format_event_html($ev, $simple = false) { function format_event_html($ev, $simple = false) {
if (! ((is_array($ev)) && count($ev))) { if (! ((is_array($ev)) && count($ev))) {
@ -88,7 +88,7 @@ function format_event_html($ev, $simple = false) {
/** /**
* @brief Convert an array with event data to bbcode. * @brief Convert an array with event data to bbcode.
* *
* @param array $ev Array which conains the event data. * @param array $ev Array which conains the event data.
* @return string The event as a bbcode formatted string. * @return string The event as a bbcode formatted string.
*/ */
@ -126,7 +126,7 @@ function format_event_bbcode($ev) {
/** /**
* @brief Extract bbcode formatted event data from a string * @brief Extract bbcode formatted event data from a string
* and convert it to html. * and convert it to html.
* *
* @params: string $s The string which should be parsed for event data. * @params: string $s The string which should be parsed for event data.
* @return string The html output. * @return string The html output.
*/ */
@ -143,7 +143,7 @@ function bbtovcal($s) {
/** /**
* @brief Extract bbcode formatted event data from a string. * @brief Extract bbcode formatted event data from a string.
* *
* @params: string $s The string which should be parsed for event data. * @params: string $s The string which should be parsed for event data.
* @return array The array with the event information. * @return array The array with the event information.
*/ */
@ -206,10 +206,10 @@ function ev_compare($a,$b) {
/** /**
* @brief Delete an event from the event table. * @brief Delete an event from the event table.
* *
* Note: This function does only delete the event from the event table not its * Note: This function does only delete the event from the event table not its
* related entry in the item table. * related entry in the item table.
* *
* @param int $event_id Event ID. * @param int $event_id Event ID.
* @return void * @return void
*/ */
@ -224,9 +224,9 @@ function event_delete($event_id) {
/** /**
* @brief Store the event. * @brief Store the event.
* *
* Store the event in the event table and create an event item in the item table. * Store the event in the event table and create an event item in the item table.
* *
* @param array $arr Array with event data. * @param array $arr Array with event data.
* @return int The event id. * @return int The event id.
*/ */
@ -433,7 +433,7 @@ function event_store($arr) {
/** /**
* @brief Create an array with translation strings used for events. * @brief Create an array with translation strings used for events.
* *
* @return array Array with translations strings. * @return array Array with translations strings.
*/ */
function get_event_strings() { function get_event_strings() {
@ -564,7 +564,7 @@ function event_by_id($owner_uid = 0, $event_params, $sql_extra = '') {
* string 'adjust_start' => * string 'adjust_start' =>
* *
* @param string $sql_extra Additional sql conditions (e.g. permission request). * @param string $sql_extra Additional sql conditions (e.g. permission request).
* *
* @return array Query results. * @return array Query results.
*/ */
function events_by_date($owner_uid = 0, $event_params, $sql_extra = '') { function events_by_date($owner_uid = 0, $event_params, $sql_extra = '') {
@ -626,6 +626,9 @@ function process_events($arr) {
// Show edit and drop actions only if the user is the owner of the event and the event // Show edit and drop actions only if the user is the owner of the event and the event
// is a real event (no bithdays). // is a real event (no bithdays).
$edit = null;
$copy = null;
$drop = null;
if (local_user() && local_user() == $rr['uid'] && $rr['type'] == 'event') { if (local_user() && local_user() == $rr['uid'] && $rr['type'] == 'event') {
$edit = ((! $rr['cid']) ? array(System::baseUrl() . '/events/event/' . $rr['id'], t('Edit event'), '', '') : null); $edit = ((! $rr['cid']) ? array(System::baseUrl() . '/events/event/' . $rr['id'], t('Edit event'), '', '') : null);
$copy = ((! $rr['cid']) ? array(System::baseUrl() . '/events/copy/' . $rr['id'], t('Duplicate event'), '', '') : null); $copy = ((! $rr['cid']) ? array(System::baseUrl() . '/events/copy/' . $rr['id'], t('Duplicate event'), '', '') : null);
@ -768,7 +771,7 @@ function event_format_export ($events, $format = 'ical', $timezone) {
/** /**
* @brief Get all events for a user ID. * @brief Get all events for a user ID.
* *
* The query for events is done permission sensitive. * The query for events is done permission sensitive.
* If the user is the owner of the calendar he/she * If the user is the owner of the calendar he/she
* will get all of his/her available events. * will get all of his/her available events.
@ -922,7 +925,7 @@ function widget_events() {
/** /**
* @brief Format an item array with event data to HTML. * @brief Format an item array with event data to HTML.
* *
* @param arr $item Array with item and event data. * @param arr $item Array with item and event data.
* @return string HTML output. * @return string HTML output.
*/ */
@ -1013,12 +1016,12 @@ function format_event_item($item) {
/** /**
* @brief Format a string with map bbcode to an array with location data. * @brief Format a string with map bbcode to an array with location data.
* *
* Note: The string must only contain location data. A string with no bbcode will be * Note: The string must only contain location data. A string with no bbcode will be
* handled as location name. * handled as location name.
* *
* @param string $s The string with the bbcode formatted location data. * @param string $s The string with the bbcode formatted location data.
* *
* @return array The array with the location data. * @return array The array with the location data.
* 'name' => The name of the location,<br> * 'name' => The name of the location,<br>
* 'address' => The address of the location,<br> * 'address' => The address of the location,<br>

View File

@ -1,8 +1,8 @@
<?php <?php
/** /**
* @file include/identity.php * @file include/identity.php
*/ */
use Friendica\App; use Friendica\App;
use Friendica\Content\Feature; use Friendica\Content\Feature;
use Friendica\Content\ForumManager; use Friendica\Content\ForumManager;
@ -50,13 +50,25 @@ function profile_load(App $a, $nickname, $profile = 0, $profiledata = array(), $
dbesc($nickname) dbesc($nickname)
); );
if (!$user && count($user) && !count($profiledata)) { if (!$user && !count($user) && !count($profiledata)) {
logger('profile error: ' . $a->query_string, LOGGER_DEBUG); logger('profile error: ' . $a->query_string, LOGGER_DEBUG);
notice(t('Requested account is not available.') . EOL); notice(t('Requested account is not available.') . EOL);
$a->error = 404; $a->error = 404;
return; return;
} }
if (!x($a->page, 'aside')) {
$a->page['aside'] = '';
}
if ($profiledata) {
$a->page['aside'] .= profile_sidebar($profiledata, true, $show_connect);
if (!DBM::is_result($user)) {
return;
}
}
$pdata = get_profiledata_by_nick($nickname, $user[0]['uid'], $profile); $pdata = get_profiledata_by_nick($nickname, $user[0]['uid'], $profile);
if (empty($pdata) && empty($profiledata)) { if (empty($pdata) && empty($profiledata)) {
@ -73,8 +85,9 @@ function profile_load(App $a, $nickname, $profile = 0, $profiledata = array(), $
"SELECT `pub_keywords` FROM `profile` WHERE `uid` = %d AND `is-default` = 1 LIMIT 1", "SELECT `pub_keywords` FROM `profile` WHERE `uid` = %d AND `is-default` = 1 LIMIT 1",
intval($pdata['profile_uid']) intval($pdata['profile_uid'])
); );
if ($x && count($x)) if ($x && count($x)) {
$pdata['pub_keywords'] = $x[0]['pub_keywords']; $pdata['pub_keywords'] = $x[0]['pub_keywords'];
}
} }
$a->profile = $pdata; $a->profile = $pdata;
@ -83,9 +96,9 @@ function profile_load(App $a, $nickname, $profile = 0, $profiledata = array(), $
$a->profile['mobile-theme'] = PConfig::get($a->profile['profile_uid'], 'system', 'mobile_theme'); $a->profile['mobile-theme'] = PConfig::get($a->profile['profile_uid'], 'system', 'mobile_theme');
$a->profile['network'] = NETWORK_DFRN; $a->profile['network'] = NETWORK_DFRN;
$a->page['title'] = $a->profile['name'] . " @ " . $a->config['sitename']; $a->page['title'] = $a->profile['name'] . ' @ ' . $a->config['sitename'];
if (!$profiledata && !PConfig::get(local_user(), 'system', 'always_my_theme')) { if (!$profiledata && !PConfig::get(local_user(), 'system', 'always_my_theme')) {
$_SESSION['theme'] = $a->profile['theme']; $_SESSION['theme'] = $a->profile['theme'];
} }
@ -97,19 +110,18 @@ function profile_load(App $a, $nickname, $profile = 0, $profiledata = array(), $
$a->set_template_engine(); // reset the template engine to the default in case the user's theme doesn't specify one $a->set_template_engine(); // reset the template engine to the default in case the user's theme doesn't specify one
$theme_info_file = "view/theme/" . current_theme() . "/theme.php"; $theme_info_file = 'view/theme/' . current_theme() . '/theme.php';
if (file_exists($theme_info_file)) { if (file_exists($theme_info_file)) {
require_once $theme_info_file; require_once $theme_info_file;
} }
if (! (x($a->page, 'aside'))) { if (!x($a->page, 'aside')) {
$a->page['aside'] = ''; $a->page['aside'] = '';
} }
if (local_user() && local_user() == $a->profile['uid'] && $profiledata) { if (local_user() && local_user() == $a->profile['uid'] && $profiledata) {
$a->page['aside'] .= replace_macros( $a->page['aside'] .= replace_macros(
get_markup_template('profile_edlink.tpl'), get_markup_template('profile_edlink.tpl'), array(
array(
'$editprofile' => t('Edit profile'), '$editprofile' => t('Edit profile'),
'$profid' => $a->profile['id'] '$profid' => $a->profile['id']
) )
@ -123,19 +135,13 @@ function profile_load(App $a, $nickname, $profile = 0, $profiledata = array(), $
* By now, the contact block isn't shown, when a different profile is given * By now, the contact block isn't shown, when a different profile is given
* But: When this profile was on the same server, then we could display the contacts * But: When this profile was on the same server, then we could display the contacts
*/ */
if ($profiledata) { if (!$profiledata) {
$a->page['aside'] .= profile_sidebar($profiledata, true, $show_connect);
} else {
$a->page['aside'] .= profile_sidebar($a->profile, $block, $show_connect); $a->page['aside'] .= profile_sidebar($a->profile, $block, $show_connect);
} }
/*if (! $block)
$a->page['aside'] .= contact_block();*/
return; return;
} }
/** /**
* @brief Get all profil data of a local user * @brief Get all profil data of a local user
* *
@ -144,11 +150,12 @@ function profile_load(App $a, $nickname, $profile = 0, $profiledata = array(), $
* Passing a non-zero profile ID can also allow a preview of a selected profile * Passing a non-zero profile ID can also allow a preview of a selected profile
* by the owner * by the owner
* *
* Includes all available profile data
*
* @param string $nickname nick * @param string $nickname nick
* @param int $uid uid * @param int $uid uid
* @param int $profile ID of the profile * @param int $profile ID of the profile
* @returns array * @returns array
* Includes all available profile data
*/ */
function get_profiledata_by_nick($nickname, $uid = 0, $profile = 0) function get_profiledata_by_nick($nickname, $uid = 0, $profile = 0)
{ {
@ -198,7 +205,6 @@ function get_profiledata_by_nick($nickname, $uid = 0, $profile = 0)
return $r; return $r;
} }
/** /**
* @brief Formats a profile for display in the sidebar. * @brief Formats a profile for display in the sidebar.
* *
@ -225,28 +231,27 @@ function profile_sidebar($profile, $block = 0, $show_connect = true)
$o = ''; $o = '';
$location = false; $location = false;
$address = false; $address = false;
// $pdesc = true;
// This function can also use contact information in $profile // This function can also use contact information in $profile
$is_contact = x($profile, 'cid'); $is_contact = x($profile, 'cid');
if ((! is_array($profile)) && (! count($profile))) { if (!is_array($profile) && !count($profile)) {
return $o; return $o;
} }
$profile['picdate'] = urlencode($profile['picdate']); $profile['picdate'] = urlencode(defaults($profile, 'picdate', ''));
if (($profile['network'] != "") && ($profile['network'] != NETWORK_DFRN)) { if (($profile['network'] != '') && ($profile['network'] != NETWORK_DFRN)) {
$profile['network_name'] = format_network_name($profile['network'], $profile['url']); $profile['network_name'] = format_network_name($profile['network'], $profile['url']);
} else { } else {
$profile['network_name'] = ""; $profile['network_name'] = '';
} }
call_hooks('profile_sidebar_enter', $profile); call_hooks('profile_sidebar_enter', $profile);
// don't show connect link to yourself // don't show connect link to yourself
$connect = (($profile['uid'] != local_user()) ? t('Connect') : false); $connect = $profile['uid'] != local_user() ? t('Connect') : false;
// don't show connect link to authenticated visitors either // don't show connect link to authenticated visitors either
if (remote_user() && count($_SESSION['remote'])) { if (remote_user() && count($_SESSION['remote'])) {
@ -264,10 +269,10 @@ function profile_sidebar($profile, $block = 0, $show_connect = true)
// Is the local user already connected to that user? // Is the local user already connected to that user?
if ($connect && local_user()) { if ($connect && local_user()) {
if (isset($profile["url"])) { if (isset($profile['url'])) {
$profile_url = normalise_link($profile["url"]); $profile_url = normalise_link($profile['url']);
} else { } else {
$profile_url = normalise_link(System::baseUrl()."/profile/".$profile["nickname"]); $profile_url = normalise_link(System::baseUrl() . '/profile/' . $profile['nickname']);
} }
if (dba::exists('contact', array('pending' => false, 'uid' => local_user(), 'nurl' => $profile_url))) { if (dba::exists('contact', array('pending' => false, 'uid' => local_user(), 'nurl' => $profile_url))) {
@ -275,21 +280,24 @@ function profile_sidebar($profile, $block = 0, $show_connect = true)
} }
} }
if ($connect && ($profile['network'] != NETWORK_DFRN) && !isset($profile['remoteconnect'])) if ($connect && ($profile['network'] != NETWORK_DFRN) && !isset($profile['remoteconnect'])) {
$connect = false; $connect = false;
}
$remoteconnect = null; $remoteconnect = null;
if (isset($profile['remoteconnect'])) if (isset($profile['remoteconnect'])) {
$remoteconnect = $profile['remoteconnect']; $remoteconnect = $profile['remoteconnect'];
}
if ($connect && ($profile['network'] == NETWORK_DFRN) && !isset($remoteconnect)) if ($connect && ($profile['network'] == NETWORK_DFRN) && !isset($remoteconnect)) {
$subscribe_feed = t("Atom feed"); $subscribe_feed = t('Atom feed');
else } else {
$subscribe_feed = false; $subscribe_feed = false;
}
if (remote_user() || (get_my_url() && $profile['unkmail'] && ($profile['uid'] != local_user()))) { if (remote_user() || (get_my_url() && x($profile, 'unkmail') && ($profile['uid'] != local_user()))) {
$wallmessage = t('Message'); $wallmessage = t('Message');
$wallmessage_link = "wallmessage/".$profile["nickname"]; $wallmessage_link = 'wallmessage/' . $profile['nickname'];
if (remote_user()) { if (remote_user()) {
$r = q( $r = q(
@ -307,9 +315,9 @@ function profile_sidebar($profile, $block = 0, $show_connect = true)
); );
} }
if ($r) { if ($r) {
$remote_url = $r[0]["url"]; $remote_url = $r[0]['url'];
$message_path = preg_replace("=(.*)/profile/(.*)=ism", "$1/message/new/", $remote_url); $message_path = preg_replace('=(.*)/profile/(.*)=ism', '$1/message/new/', $remote_url);
$wallmessage_link = $message_path.base64_encode($profile["addr"]); $wallmessage_link = $message_path . base64_encode($profile['addr']);
} }
} else { } else {
$wallmessage = false; $wallmessage = false;
@ -318,7 +326,7 @@ function profile_sidebar($profile, $block = 0, $show_connect = true)
// show edit profile to yourself // show edit profile to yourself
if (!$is_contact && $profile['uid'] == local_user() && Feature::isEnabled(local_user(), 'multi_profiles')) { if (!$is_contact && $profile['uid'] == local_user() && Feature::isEnabled(local_user(), 'multi_profiles')) {
$profile['edit'] = array(System::baseUrl(). '/profiles', t('Profiles'),"", t('Manage/edit profiles')); $profile['edit'] = array(System::baseUrl() . '/profiles', t('Profiles'), '', t('Manage/edit profiles'));
$r = q( $r = q(
"SELECT * FROM `profile` WHERE `uid` = %d", "SELECT * FROM `profile` WHERE `uid` = %d",
local_user() local_user()
@ -338,14 +346,14 @@ function profile_sidebar($profile, $block = 0, $show_connect = true)
'alt' => t('Profile Image'), 'alt' => t('Profile Image'),
'profile_name' => $rr['profile-name'], 'profile_name' => $rr['profile-name'],
'isdefault' => $rr['is-default'], 'isdefault' => $rr['is-default'],
'visibile_to_everybody' => t('visible to everybody'), 'visibile_to_everybody' => t('visible to everybody'),
'edit_visibility' => t('Edit visibility'), 'edit_visibility' => t('Edit visibility'),
); );
} }
} }
} }
if (!$is_contact && $profile['uid'] == local_user() && !Feature::isEnabled(local_user(), 'multi_profiles')) { if (!$is_contact && $profile['uid'] == local_user() && !Feature::isEnabled(local_user(), 'multi_profiles')) {
$profile['edit'] = array(System::baseUrl(). '/profiles/'.$profile['id'], t('Edit profile'),"", t('Edit profile')); $profile['edit'] = array(System::baseUrl() . '/profiles/' . $profile['id'], t('Edit profile'), '', t('Edit profile'));
$profile['menu'] = array( $profile['menu'] = array(
'chg_photo' => t('Change profile photo'), 'chg_photo' => t('Change profile photo'),
'cr_new' => null, 'cr_new' => null,
@ -356,28 +364,23 @@ function profile_sidebar($profile, $block = 0, $show_connect = true)
// Fetch the account type // Fetch the account type
$account_type = Contact::getAccountType($profile); $account_type = Contact::getAccountType($profile);
if ((x($profile, 'address') == 1) if (x($profile, 'address')
|| (x($profile, 'location') == 1) || x($profile, 'location')
|| (x($profile, 'locality') == 1) || x($profile, 'locality')
|| (x($profile, 'region') == 1) || x($profile, 'region')
|| (x($profile, 'postal-code') == 1) || x($profile, 'postal-code')
|| (x($profile, 'country-name') == 1) || x($profile, 'country-name')
) { ) {
$location = t('Location:'); $location = t('Location:');
} }
$gender = ((x($profile, 'gender') == 1) ? t('Gender:') : false); $gender = x($profile, 'gender') ? t('Gender:') : false;
$marital = x($profile, 'marital') ? t('Status:') : false;
$homepage = x($profile, 'homepage') ? t('Homepage:') : false;
$about = x($profile, 'about') ? t('About:') : false;
$xmpp = x($profile, 'xmpp') ? t('XMPP:') : false;
if ((x($profile, 'hidewall') || $block) && !local_user() && !remote_user()) {
$marital = ((x($profile, 'marital') == 1) ? t('Status:') : false);
$homepage = ((x($profile, 'homepage') == 1) ? t('Homepage:') : false);
$about = ((x($profile, 'about') == 1) ? t('About:') : false);
$xmpp = ((x($profile, 'xmpp') == 1) ? t('XMPP:') : false);
if (($profile['hidewall'] || $block) && (! local_user()) && (! remote_user())) {
$location = $pdesc = $gender = $marital = $homepage = $about = false; $location = $pdesc = $gender = $marital = $homepage = $about = false;
} }
@ -385,7 +388,7 @@ function profile_sidebar($profile, $block = 0, $show_connect = true)
$firstname = $split_name['first']; $firstname = $split_name['first'];
$lastname = $split_name['last']; $lastname = $split_name['last'];
if ($profile['guid'] != "") { if (x($profile, 'guid')) {
$diaspora = array( $diaspora = array(
'guid' => $profile['guid'], 'guid' => $profile['guid'],
'podloc' => System::baseUrl(), 'podloc' => System::baseUrl(),
@ -402,6 +405,9 @@ function profile_sidebar($profile, $block = 0, $show_connect = true)
$diaspora = false; $diaspora = false;
} }
$contact_block = '';
$updated = '';
$contacts = 0;
if (!$block) { if (!$block) {
$contact_block = contact_block(); $contact_block = contact_block();
@ -411,7 +417,7 @@ function profile_sidebar($profile, $block = 0, $show_connect = true)
intval($a->profile['uid']) intval($a->profile['uid'])
); );
if (DBM::is_result($r)) { if (DBM::is_result($r)) {
$updated = date("c", strtotime($r[0]['updated'])); $updated = date('c', strtotime($r[0]['updated']));
} }
$r = q( $r = q(
@ -437,45 +443,41 @@ function profile_sidebar($profile, $block = 0, $show_connect = true)
$p[$k] = $v; $p[$k] = $v;
} }
if (isset($p["about"])) { if (isset($p['about'])) {
$p["about"] = bbcode($p["about"]); $p['about'] = bbcode($p['about']);
} }
if (isset($p["address"])) { if (isset($p['address'])) {
$p["address"] = bbcode($p["address"]); $p['address'] = bbcode($p['address']);
} else { } else {
$p["address"] = bbcode($p["location"]); $p['address'] = bbcode($p['location']);
} }
if (isset($p["photo"])) { if (isset($p['photo'])) {
$p["photo"] = proxy_url($p["photo"], false, PROXY_SIZE_SMALL); $p['photo'] = proxy_url($p['photo'], false, PROXY_SIZE_SMALL);
} }
$tpl = get_markup_template('profile_vcard.tpl'); $tpl = get_markup_template('profile_vcard.tpl');
$o .= replace_macros( $o .= replace_macros($tpl, array(
$tpl,
array(
'$profile' => $p, '$profile' => $p,
'$xmpp' => $xmpp, '$xmpp' => $xmpp,
'$connect' => $connect, '$connect' => $connect,
'$remoteconnect' => $remoteconnect, '$remoteconnect' => $remoteconnect,
'$subscribe_feed' => $subscribe_feed, '$subscribe_feed' => $subscribe_feed,
'$wallmessage' => $wallmessage, '$wallmessage' => $wallmessage,
'$wallmessage_link' => $wallmessage_link, '$wallmessage_link' => $wallmessage_link,
'$account_type' => $account_type, '$account_type' => $account_type,
'$location' => $location, '$location' => $location,
'$gender' => $gender, '$gender' => $gender,
// '$pdesc' => $pdesc, '$marital' => $marital,
'$marital' => $marital,
'$homepage' => $homepage, '$homepage' => $homepage,
'$about' => $about, '$about' => $about,
'$network' => t('Network:'), '$network' => t('Network:'),
'$contacts' => $contacts, '$contacts' => $contacts,
'$updated' => $updated, '$updated' => $updated,
'$diaspora' => $diaspora, '$diaspora' => $diaspora,
'$contact_block' => $contact_block, '$contact_block' => $contact_block,
) ));
);
$arr = array('profile' => &$profile, 'entry' => &$o); $arr = array('profile' => &$profile, 'entry' => &$o);
@ -484,27 +486,26 @@ function profile_sidebar($profile, $block = 0, $show_connect = true)
return $o; return $o;
} }
function get_birthdays() function get_birthdays()
{ {
$a = get_app(); $a = get_app();
$o = ''; $o = '';
if (! local_user() || $a->is_mobile || $a->is_tablet) { if (!local_user() || $a->is_mobile || $a->is_tablet) {
return $o; return $o;
} }
/* /*
* $mobile_detect = new Mobile_Detect(); * $mobile_detect = new Mobile_Detect();
* $is_mobile = $mobile_detect->isMobile() || $mobile_detect->isTablet(); * $is_mobile = $mobile_detect->isMobile() || $mobile_detect->isTablet();
* if ($is_mobile) * if ($is_mobile)
* return $o; * return $o;
*/ */
$bd_format = t('g A l F d'); // 8 AM Friday January 18 $bd_format = t('g A l F d'); // 8 AM Friday January 18
$bd_short = t('F d'); $bd_short = t('F d');
$cachekey = "get_birthdays:".local_user(); $cachekey = 'get_birthdays:' . local_user();
$r = Cache::get($cachekey); $r = Cache::get($cachekey);
if (is_null($r)) { if (is_null($r)) {
$s = dba::p( $s = dba::p(
@ -538,7 +539,7 @@ function get_birthdays()
$classtoday = $istoday ? ' birthday-today ' : ''; $classtoday = $istoday ? ' birthday-today ' : '';
if ($total) { if ($total) {
foreach ($r as &$rr) { foreach ($r as &$rr) {
if (! strlen($rr['name'])) { if (!strlen($rr['name'])) {
continue; continue;
} }
@ -553,54 +554,50 @@ function get_birthdays()
$sparkle = ''; $sparkle = '';
$url = $rr['url']; $url = $rr['url'];
if ($rr['network'] === NETWORK_DFRN) { if ($rr['network'] === NETWORK_DFRN) {
$sparkle = " sparkle"; $sparkle = ' sparkle';
$url = System::baseUrl() . '/redir/' . $rr['cid']; $url = System::baseUrl() . '/redir/' . $rr['cid'];
} }
$rr['link'] = $url; $rr['link'] = $url;
$rr['title'] = $rr['name']; $rr['title'] = $rr['name'];
$rr['date'] = day_translate(datetime_convert('UTC', $a->timezone, $rr['start'], $rr['adjust'] ? $bd_format : $bd_short)) . (($today) ? ' ' . t('[today]') : ''); $rr['date'] = day_translate(datetime_convert('UTC', $a->timezone, $rr['start'], $rr['adjust'] ? $bd_format : $bd_short)) . (($today) ? ' ' . t('[today]') : '');
$rr['startime'] = null; $rr['startime'] = null;
$rr['today'] = $today; $rr['today'] = $today;
} }
} }
} }
$tpl = get_markup_template("birthdays_reminder.tpl"); $tpl = get_markup_template('birthdays_reminder.tpl');
return replace_macros( return replace_macros($tpl, array(
$tpl,
array(
'$baseurl' => System::baseUrl(), '$baseurl' => System::baseUrl(),
'$classtoday' => $classtoday, '$classtoday' => $classtoday,
'$count' => $total, '$count' => $total,
'$event_reminders' => t('Birthday Reminders'), '$event_reminders' => t('Birthday Reminders'),
'$event_title' => t('Birthdays this week:'), '$event_title' => t('Birthdays this week:'),
'$events' => $r, '$events' => $r,
'$lbr' => '{', // raw brackets mess up if/endif macro processing '$lbr' => '{', // raw brackets mess up if/endif macro processing
'$rbr' => '}' '$rbr' => '}'
) ));
);
} }
function get_events() function get_events()
{ {
require_once 'include/bbcode.php'; require_once 'include/bbcode.php';
$a = get_app(); $a = get_app();
if (! local_user() || $a->is_mobile || $a->is_tablet) { if (!local_user() || $a->is_mobile || $a->is_tablet) {
return $o; return $o;
} }
/* /*
* $mobile_detect = new Mobile_Detect(); * $mobile_detect = new Mobile_Detect();
* $is_mobile = $mobile_detect->isMobile() || $mobile_detect->isTablet(); * $is_mobile = $mobile_detect->isMobile() || $mobile_detect->isTablet();
* if ($is_mobile) * if ($is_mobile)
* return $o; * return $o;
*/ */
$bd_format = t('g A l F d'); // 8 AM Friday January 18 $bd_format = t('g A l F d'); // 8 AM Friday January 18
$bd_short = t('F d'); $classtoday = '';
$s = dba::p( $s = dba::p(
"SELECT `event`.* FROM `event` "SELECT `event`.* FROM `event`
@ -614,7 +611,6 @@ function get_events()
$r = array(); $r = array();
if (DBM::is_result($s)) { if (DBM::is_result($s)) {
$now = strtotime('now');
$istoday = false; $istoday = false;
while ($rr = dba::fetch($s)) { while ($rr = dba::fetch($s)) {
@ -634,7 +630,7 @@ function get_events()
} }
$description = substr(strip_tags(bbcode($rr['desc'])), 0, 32) . '... '; $description = substr(strip_tags(bbcode($rr['desc'])), 0, 32) . '... ';
if (! $description) { if (!$description) {
$description = t('[No description]'); $description = t('[No description]');
} }
@ -647,8 +643,8 @@ function get_events()
$today = ((substr($strt, 0, 10) === datetime_convert('UTC', $a->timezone, 'now', 'Y-m-d')) ? true : false); $today = ((substr($strt, 0, 10) === datetime_convert('UTC', $a->timezone, 'now', 'Y-m-d')) ? true : false);
$rr['title'] = $title; $rr['title'] = $title;
$rr['description'] = $desciption; $rr['description'] = $description;
$rr['date'] = day_translate(datetime_convert('UTC', $rr['adjust'] ? $a->timezone : 'UTC', $rr['start'], $bd_format)) . (($today) ? ' ' . t('[today]') : ''); $rr['date'] = day_translate(datetime_convert('UTC', $rr['adjust'] ? $a->timezone : 'UTC', $rr['start'], $bd_format)) . (($today) ? ' ' . t('[today]') : '');
$rr['startime'] = $strt; $rr['startime'] = $strt;
$rr['today'] = $today; $rr['today'] = $today;
@ -657,18 +653,15 @@ function get_events()
dba::close($s); dba::close($s);
$classtoday = (($istoday) ? 'event-today' : ''); $classtoday = (($istoday) ? 'event-today' : '');
} }
$tpl = get_markup_template("events_reminder.tpl"); $tpl = get_markup_template('events_reminder.tpl');
return replace_macros( return replace_macros($tpl, array(
$tpl,
array(
'$baseurl' => System::baseUrl(), '$baseurl' => System::baseUrl(),
'$classtoday' => $classtoday, '$classtoday' => $classtoday,
'$count' => count($r), '$count' => count($r),
'$event_reminders' => t('Event Reminders'), '$event_reminders' => t('Event Reminders'),
'$event_title' => t('Events this week:'), '$event_title' => t('Events this week:'),
'$events' => $r, '$events' => $r,
) ));
);
} }
function advanced_profile(App $a) function advanced_profile(App $a)
@ -677,9 +670,8 @@ function advanced_profile(App $a)
$uid = $a->profile['uid']; $uid = $a->profile['uid'];
$o .= replace_macros( $o .= replace_macros(
get_markup_template('section_title.tpl'), get_markup_template('section_title.tpl'), array(
array( '$title' => t('Profile')
'$title' => t('Profile')
) )
); );
@ -688,32 +680,32 @@ function advanced_profile(App $a)
$profile = array(); $profile = array();
$profile['fullname'] = array( t('Full Name:'), $a->profile['name'] ) ; $profile['fullname'] = array(t('Full Name:'), $a->profile['name']);
if ($a->profile['gender']) { if ($a->profile['gender']) {
$profile['gender'] = array( t('Gender:'), $a->profile['gender'] ); $profile['gender'] = array(t('Gender:'), $a->profile['gender']);
} }
if (($a->profile['dob']) && ($a->profile['dob'] > '0001-01-01')) { if (($a->profile['dob']) && ($a->profile['dob'] > '0001-01-01')) {
$year_bd_format = t('j F, Y'); $year_bd_format = t('j F, Y');
$short_bd_format = t('j F'); $short_bd_format = t('j F');
$val = intval($a->profile['dob']) ?
day_translate(datetime_convert('UTC', 'UTC', $a->profile['dob'] . ' 00:00 +00:00', $year_bd_format))
: day_translate(datetime_convert('UTC', 'UTC', '2001-' . substr($a->profile['dob'], 5) . ' 00:00 +00:00', $short_bd_format));
$val = ((intval($a->profile['dob'])) $profile['birthday'] = array(t('Birthday:'), $val);
? day_translate(datetime_convert('UTC', 'UTC', $a->profile['dob'] . ' 00:00 +00:00', $year_bd_format))
: day_translate(datetime_convert('UTC', 'UTC', '2001-' . substr($a->profile['dob'], 5) . ' 00:00 +00:00', $short_bd_format)));
$profile['birthday'] = array( t('Birthday:'), $val);
} }
if (!empty($a->profile['dob']) if (!empty($a->profile['dob'])
&& $a->profile['dob'] > '0001-01-01' && $a->profile['dob'] > '0001-01-01'
&& $age = age($a->profile['dob'], $a->profile['timezone'], '') && $age = age($a->profile['dob'], $a->profile['timezone'], '')
) { ) {
$profile['age'] = array( t('Age:'), $age ); $profile['age'] = array(t('Age:'), $age);
} }
if ($a->profile['marital']) { if ($a->profile['marital']) {
$profile['marital'] = array( t('Status:'), $a->profile['marital']); $profile['marital'] = array(t('Status:'), $a->profile['marital']);
} }
/// @TODO Maybe use x() here, plus below? /// @TODO Maybe use x() here, plus below?
@ -726,95 +718,92 @@ function advanced_profile(App $a)
} }
if ($a->profile['sexual']) { if ($a->profile['sexual']) {
$profile['sexual'] = array( t('Sexual Preference:'), $a->profile['sexual'] ); $profile['sexual'] = array(t('Sexual Preference:'), $a->profile['sexual']);
} }
if ($a->profile['homepage']) { if ($a->profile['homepage']) {
$profile['homepage'] = array( t('Homepage:'), linkify($a->profile['homepage']) ); $profile['homepage'] = array(t('Homepage:'), linkify($a->profile['homepage']));
} }
if ($a->profile['hometown']) { if ($a->profile['hometown']) {
$profile['hometown'] = array( t('Hometown:'), linkify($a->profile['hometown']) ); $profile['hometown'] = array(t('Hometown:'), linkify($a->profile['hometown']));
} }
if ($a->profile['pub_keywords']) { if ($a->profile['pub_keywords']) {
$profile['pub_keywords'] = array( t('Tags:'), $a->profile['pub_keywords']); $profile['pub_keywords'] = array(t('Tags:'), $a->profile['pub_keywords']);
} }
if ($a->profile['politic']) { if ($a->profile['politic']) {
$profile['politic'] = array( t('Political Views:'), $a->profile['politic']); $profile['politic'] = array(t('Political Views:'), $a->profile['politic']);
} }
if ($a->profile['religion']) { if ($a->profile['religion']) {
$profile['religion'] = array( t('Religion:'), $a->profile['religion']); $profile['religion'] = array(t('Religion:'), $a->profile['religion']);
} }
if ($txt = prepare_text($a->profile['about'])) { if ($txt = prepare_text($a->profile['about'])) {
$profile['about'] = array( t('About:'), $txt ); $profile['about'] = array(t('About:'), $txt);
} }
if ($txt = prepare_text($a->profile['interest'])) { if ($txt = prepare_text($a->profile['interest'])) {
$profile['interest'] = array( t('Hobbies/Interests:'), $txt); $profile['interest'] = array(t('Hobbies/Interests:'), $txt);
} }
if ($txt = prepare_text($a->profile['likes'])) { if ($txt = prepare_text($a->profile['likes'])) {
$profile['likes'] = array( t('Likes:'), $txt); $profile['likes'] = array(t('Likes:'), $txt);
} }
if ($txt = prepare_text($a->profile['dislikes'])) { if ($txt = prepare_text($a->profile['dislikes'])) {
$profile['dislikes'] = array( t('Dislikes:'), $txt); $profile['dislikes'] = array(t('Dislikes:'), $txt);
} }
if ($txt = prepare_text($a->profile['contact'])) { if ($txt = prepare_text($a->profile['contact'])) {
$profile['contact'] = array( t('Contact information and Social Networks:'), $txt); $profile['contact'] = array(t('Contact information and Social Networks:'), $txt);
} }
if ($txt = prepare_text($a->profile['music'])) { if ($txt = prepare_text($a->profile['music'])) {
$profile['music'] = array( t('Musical interests:'), $txt); $profile['music'] = array(t('Musical interests:'), $txt);
} }
if ($txt = prepare_text($a->profile['book'])) { if ($txt = prepare_text($a->profile['book'])) {
$profile['book'] = array( t('Books, literature:'), $txt); $profile['book'] = array(t('Books, literature:'), $txt);
} }
if ($txt = prepare_text($a->profile['tv'])) { if ($txt = prepare_text($a->profile['tv'])) {
$profile['tv'] = array( t('Television:'), $txt); $profile['tv'] = array(t('Television:'), $txt);
} }
if ($txt = prepare_text($a->profile['film'])) { if ($txt = prepare_text($a->profile['film'])) {
$profile['film'] = array( t('Film/dance/culture/entertainment:'), $txt); $profile['film'] = array(t('Film/dance/culture/entertainment:'), $txt);
} }
if ($txt = prepare_text($a->profile['romance'])) { if ($txt = prepare_text($a->profile['romance'])) {
$profile['romance'] = array( t('Love/Romance:'), $txt); $profile['romance'] = array(t('Love/Romance:'), $txt);
} }
if ($txt = prepare_text($a->profile['work'])) { if ($txt = prepare_text($a->profile['work'])) {
$profile['work'] = array( t('Work/employment:'), $txt); $profile['work'] = array(t('Work/employment:'), $txt);
} }
if ($txt = prepare_text($a->profile['education'])) { if ($txt = prepare_text($a->profile['education'])) {
$profile['education'] = array( t('School/education:'), $txt ); $profile['education'] = array(t('School/education:'), $txt);
} }
//show subcribed forum if it is enabled in the usersettings //show subcribed forum if it is enabled in the usersettings
if (Feature::isEnabled($uid, 'forumlist_profile')) { if (Feature::isEnabled($uid, 'forumlist_profile')) {
$profile['forumlist'] = array( t('Forums:'), ForumManager::profileAdvanced($uid)); $profile['forumlist'] = array(t('Forums:'), ForumManager::profileAdvanced($uid));
} }
if ($a->profile['uid'] == local_user()) { if ($a->profile['uid'] == local_user()) {
$profile['edit'] = array(System::baseUrl(). '/profiles/'.$a->profile['id'], t('Edit profile'),"", t('Edit profile')); $profile['edit'] = array(System::baseUrl() . '/profiles/' . $a->profile['id'], t('Edit profile'), '', t('Edit profile'));
} }
return replace_macros( return replace_macros($tpl, array(
$tpl,
array(
'$title' => t('Profile'), '$title' => t('Profile'),
'$basic' => t('Basic'), '$basic' => t('Basic'),
'$advanced' => t('Advanced'), '$advanced' => t('Advanced'),
'$profile' => $profile '$profile' => $profile
) ));
);
} }
return ''; return '';
@ -822,12 +811,11 @@ function advanced_profile(App $a)
function profile_tabs($a, $is_owner = false, $nickname = null) function profile_tabs($a, $is_owner = false, $nickname = null)
{ {
//echo "<pre>"; var_dump($a->user); killme();
if (is_null($nickname)) { if (is_null($nickname)) {
$nickname = $a->user['nickname']; $nickname = $a->user['nickname'];
} }
$tab = false;
if (x($_GET, 'tab')) { if (x($_GET, 'tab')) {
$tab = notags(trim($_GET['tab'])); $tab = notags(trim($_GET['tab']));
} }
@ -836,85 +824,85 @@ function profile_tabs($a, $is_owner = false, $nickname = null)
$tabs = array( $tabs = array(
array( array(
'label'=>t('Status'), 'label' => t('Status'),
'url' => $url, 'url' => $url,
'sel' => ((!isset($tab) && $a->argv[0]=='profile') ? 'active' : ''), 'sel' => !$tab && $a->argv[0] == 'profile' ? 'active' : '',
'title' => t('Status Messages and Posts'), 'title' => t('Status Messages and Posts'),
'id' => 'status-tab', 'id' => 'status-tab',
'accesskey' => 'm', 'accesskey' => 'm',
), ),
array( array(
'label' => t('Profile'), 'label' => t('Profile'),
'url' => $url.'/?tab=profile', 'url' => $url . '/?tab=profile',
'sel' => ((isset($tab) && $tab=='profile') ? 'active' : ''), 'sel' => $tab == 'profile' ? 'active' : '',
'title' => t('Profile Details'), 'title' => t('Profile Details'),
'id' => 'profile-tab', 'id' => 'profile-tab',
'accesskey' => 'r', 'accesskey' => 'r',
), ),
array( array(
'label' => t('Photos'), 'label' => t('Photos'),
'url' => System::baseUrl() . '/photos/' . $nickname, 'url' => System::baseUrl() . '/photos/' . $nickname,
'sel' => ((!isset($tab) && $a->argv[0]=='photos') ? 'active' : ''), 'sel' => !$tab && $a->argv[0] == 'photos' ? 'active' : '',
'title' => t('Photo Albums'), 'title' => t('Photo Albums'),
'id' => 'photo-tab', 'id' => 'photo-tab',
'accesskey' => 'h', 'accesskey' => 'h',
), ),
array( array(
'label' => t('Videos'), 'label' => t('Videos'),
'url' => System::baseUrl() . '/videos/' . $nickname, 'url' => System::baseUrl() . '/videos/' . $nickname,
'sel' => ((!isset($tab) && $a->argv[0]=='videos') ? 'active' : ''), 'sel' => !$tab && $a->argv[0] == 'videos' ? 'active' : '',
'title' => t('Videos'), 'title' => t('Videos'),
'id' => 'video-tab', 'id' => 'video-tab',
'accesskey' => 'v', 'accesskey' => 'v',
), ),
); );
// the calendar link for the full featured events calendar // the calendar link for the full featured events calendar
if ($is_owner && $a->theme_events_in_profile) { if ($is_owner && $a->theme_events_in_profile) {
$tabs[] = array( $tabs[] = array(
'label' => t('Events'), 'label' => t('Events'),
'url' => System::baseUrl() . '/events', 'url' => System::baseUrl() . '/events',
'sel' =>((!isset($tab) && $a->argv[0]=='events') ? 'active' : ''), 'sel' => !$tab && $a->argv[0] == 'events' ? 'active' : '',
'title' => t('Events and Calendar'), 'title' => t('Events and Calendar'),
'id' => 'events-tab', 'id' => 'events-tab',
'accesskey' => 'e', 'accesskey' => 'e',
); );
// if the user is not the owner of the calendar we only show a calendar // if the user is not the owner of the calendar we only show a calendar
// with the public events of the calendar owner // with the public events of the calendar owner
} elseif (! $is_owner) { } elseif (!$is_owner) {
$tabs[] = array( $tabs[] = array(
'label' => t('Events'), 'label' => t('Events'),
'url' => System::baseUrl() . '/cal/' . $nickname, 'url' => System::baseUrl() . '/cal/' . $nickname,
'sel' =>((!isset($tab) && $a->argv[0]=='cal') ? 'active' : ''), 'sel' => !$tab && $a->argv[0] == 'cal' ? 'active' : '',
'title' => t('Events and Calendar'), 'title' => t('Events and Calendar'),
'id' => 'events-tab', 'id' => 'events-tab',
'accesskey' => 'e', 'accesskey' => 'e',
); );
} }
if ($is_owner) { if ($is_owner) {
$tabs[] = array( $tabs[] = array(
'label' => t('Personal Notes'), 'label' => t('Personal Notes'),
'url' => System::baseUrl() . '/notes', 'url' => System::baseUrl() . '/notes',
'sel' =>((!isset($tab) && $a->argv[0]=='notes') ? 'active' : ''), 'sel' => !$tab && $a->argv[0] == 'notes' ? 'active' : '',
'title' => t('Only You Can See This'), 'title' => t('Only You Can See This'),
'id' => 'notes-tab', 'id' => 'notes-tab',
'accesskey' => 't', 'accesskey' => 't',
); );
} }
if ((! $is_owner) && ((count($a->profile)) || (! $a->profile['hide-friends']))) { if ((!$is_owner) && ((count($a->profile)) || (!$a->profile['hide-friends']))) {
$tabs[] = array( $tabs[] = array(
'label' => t('Contacts'), 'label' => t('Contacts'),
'url' => System::baseUrl() . '/viewcontacts/' . $nickname, 'url' => System::baseUrl() . '/viewcontacts/' . $nickname,
'sel' => ((!isset($tab) && $a->argv[0]=='viewcontacts') ? 'active' : ''), 'sel' => !$tab && $a->argv[0] == 'viewcontacts' ? 'active' : '',
'title' => t('Contacts'), 'title' => t('Contacts'),
'id' => 'viewcontacts-tab', 'id' => 'viewcontacts-tab',
'accesskey' => 'k', 'accesskey' => 'k',
); );
} }
$arr = array('is_owner' => $is_owner, 'nickname' => $nickname, 'tab' => (($tab) ? $tab : false), 'tabs' => $tabs); $arr = array('is_owner' => $is_owner, 'nickname' => $nickname, 'tab' => $tab, 'tabs' => $tabs);
call_hooks('profile_tabs', $arr); call_hooks('profile_tabs', $arr);
$tpl = get_markup_template('common_tabs.tpl'); $tpl = get_markup_template('common_tabs.tpl');
@ -938,9 +926,9 @@ function zrl_init(App $a)
// The check fetches the cached value from gprobe to reduce the load for this system // The check fetches the cached value from gprobe to reduce the load for this system
$urlparts = parse_url($tmp_str); $urlparts = parse_url($tmp_str);
$result = Cache::get("gprobe:" . $urlparts["host"]); $result = Cache::get('gprobe:' . $urlparts['host']);
if ((!is_null($result)) && (in_array($result["network"], array(NETWORK_FEED, NETWORK_PHANTOM)))) { if ((!is_null($result)) && (in_array($result['network'], array(NETWORK_FEED, NETWORK_PHANTOM)))) {
logger("DDoS attempt detected for " . $urlparts["host"] . " by " . $_SERVER["REMOTE_ADDR"] . ". server data: " . print_r($_SERVER, true), LOGGER_DEBUG); logger('DDoS attempt detected for ' . $urlparts['host'] . ' by ' . $_SERVER['REMOTE_ADDR'] . '. server data: ' . print_r($_SERVER, true), LOGGER_DEBUG);
return; return;
} }
@ -952,10 +940,10 @@ function zrl_init(App $a)
function zrl($s, $force = false) function zrl($s, $force = false)
{ {
if (! strlen($s)) { if (!strlen($s)) {
return $s; return $s;
} }
if ((! strpos($s, '/profile/')) && (! $force)) { if ((!strpos($s, '/profile/')) && (!$force)) {
return $s; return $s;
} }
if ($force && substr($s, -1, 1) !== '/') { if ($force && substr($s, -1, 1) !== '/') {
@ -963,7 +951,7 @@ function zrl($s, $force = false)
} }
$achar = strpos($s, '?') ? '&' : '?'; $achar = strpos($s, '?') ? '&' : '?';
$mine = get_my_url(); $mine = get_my_url();
if ($mine && ! link_compare($mine, $s)) { if ($mine && !link_compare($mine, $s)) {
return $s . $achar . 'zrl=' . urlencode($mine); return $s . $achar . 'zrl=' . urlencode($mine);
} }
return $s; return $s;
@ -986,7 +974,7 @@ function zrl($s, $force = false)
function get_theme_uid() function get_theme_uid()
{ {
$uid = ((!empty($_REQUEST['puid'])) ? intval($_REQUEST['puid']) : 0); $uid = ((!empty($_REQUEST['puid'])) ? intval($_REQUEST['puid']) : 0);
if ((local_user()) && ((PConfig::get(local_user(), 'system', 'always_my_theme')) || (! $uid))) { if ((local_user()) && ((PConfig::get(local_user(), 'system', 'always_my_theme')) || (!$uid))) {
return local_user(); return local_user();
} }

View File

@ -421,7 +421,7 @@ function uri_to_guid($uri, $host = "") {
* @return array Item array with removed conversation data * @return array Item array with removed conversation data
*/ */
function store_conversation($arr) { function store_conversation($arr) {
if (in_array($arr['network'], array(NETWORK_DFRN, NETWORK_DIASPORA, NETWORK_OSTATUS)) && !empty($arr['uri'])) { if (in_array(defaults($arr, 'network', NETWORK_PHANTOM), array(NETWORK_DFRN, NETWORK_DIASPORA, NETWORK_OSTATUS)) && !empty($arr['uri'])) {
$conversation = array('item-uri' => $arr['uri'], 'received' => DBM::date()); $conversation = array('item-uri' => $arr['uri'], 'received' => DBM::date());
if (isset($arr['parent-uri']) && ($arr['parent-uri'] != $arr['uri'])) { if (isset($arr['parent-uri']) && ($arr['parent-uri'] != $arr['uri'])) {
@ -479,8 +479,8 @@ function store_conversation($arr) {
} }
/// @TODO add type-hint array /// @TODO add type-hint array
function item_store($arr, $force_parent = false, $notify = false, $dontcache = false) { function item_store($arr, $force_parent = false, $notify = false, $dontcache = false)
{
$a = get_app(); $a = get_app();
// If it is a posting where users should get notifications, then define it as wall posting // If it is a posting where users should get notifications, then define it as wall posting
@ -502,6 +502,8 @@ function item_store($arr, $force_parent = false, $notify = false, $dontcache = f
$arr['guid'] = uri_to_guid($arr['uri'], $a->get_hostname()); $arr['guid'] = uri_to_guid($arr['uri'], $a->get_hostname());
} }
} }
} else {
$arr['network'] = trim(defaults($arr, 'network', NETWORK_PHANTOM));
} }
if ($notify) { if ($notify) {
@ -581,7 +583,7 @@ function item_store($arr, $force_parent = false, $notify = false, $dontcache = f
* We have to check several networks since Friendica posts could be repeated * We have to check several networks since Friendica posts could be repeated
* via OStatus (maybe Diasporsa as well) * via OStatus (maybe Diasporsa as well)
*/ */
if (in_array(trim($arr['network']), array(NETWORK_DIASPORA, NETWORK_DFRN, NETWORK_OSTATUS, ""))) { if (in_array($arr['network'], array(NETWORK_DIASPORA, NETWORK_DFRN, NETWORK_OSTATUS, ""))) {
$r = q("SELECT `id`, `network` FROM `item` WHERE `uri` = '%s' AND `uid` = %d AND `network` IN ('%s', '%s', '%s') LIMIT 1", $r = q("SELECT `id`, `network` FROM `item` WHERE `uri` = '%s' AND `uid` = %d AND `network` IN ('%s', '%s', '%s') LIMIT 1",
dbesc(trim($arr['uri'])), dbesc(trim($arr['uri'])),
intval($uid), intval($uid),
@ -644,7 +646,6 @@ function item_store($arr, $force_parent = false, $notify = false, $dontcache = f
$arr['attach'] = ((x($arr, 'attach')) ? notags(trim($arr['attach'])) : ''); $arr['attach'] = ((x($arr, 'attach')) ? notags(trim($arr['attach'])) : '');
$arr['app'] = ((x($arr, 'app')) ? notags(trim($arr['app'])) : ''); $arr['app'] = ((x($arr, 'app')) ? notags(trim($arr['app'])) : '');
$arr['origin'] = ((x($arr, 'origin')) ? intval($arr['origin']) : 0 ); $arr['origin'] = ((x($arr, 'origin')) ? intval($arr['origin']) : 0 );
$arr['network'] = ((x($arr, 'network')) ? trim($arr['network']) : '');
$arr['postopts'] = ((x($arr, 'postopts')) ? trim($arr['postopts']) : ''); $arr['postopts'] = ((x($arr, 'postopts')) ? trim($arr['postopts']) : '');
$arr['resource-id'] = ((x($arr, 'resource-id')) ? trim($arr['resource-id']) : ''); $arr['resource-id'] = ((x($arr, 'resource-id')) ? trim($arr['resource-id']) : '');
$arr['event-id'] = ((x($arr, 'event-id')) ? intval($arr['event-id']) : 0 ); $arr['event-id'] = ((x($arr, 'event-id')) ? intval($arr['event-id']) : 0 );
@ -674,18 +675,19 @@ function item_store($arr, $force_parent = false, $notify = false, $dontcache = f
$arr['plink'] = System::baseUrl() . '/display/' . urlencode($arr['guid']); $arr['plink'] = System::baseUrl() . '/display/' . urlencode($arr['guid']);
} }
if ($arr['network'] == "") { if ($arr['network'] == NETWORK_PHANTOM) {
$r = q("SELECT `network` FROM `contact` WHERE `network` IN ('%s', '%s', '%s') AND `nurl` = '%s' AND `uid` = %d LIMIT 1", $r = q("SELECT `network` FROM `contact` WHERE `network` IN ('%s', '%s', '%s') AND `nurl` = '%s' AND `uid` = %d LIMIT 1",
dbesc(NETWORK_DFRN), dbesc(NETWORK_DIASPORA), dbesc(NETWORK_OSTATUS), dbesc(NETWORK_DFRN), dbesc(NETWORK_DIASPORA), dbesc(NETWORK_OSTATUS),
dbesc(normalise_link($arr['author-link'])), dbesc(normalise_link($arr['author-link'])),
intval($arr['uid']) intval($arr['uid'])
); );
if (!DBM::is_result($r)) if (!DBM::is_result($r)) {
$r = q("SELECT `network` FROM `gcontact` WHERE `network` IN ('%s', '%s', '%s') AND `nurl` = '%s' LIMIT 1", $r = q("SELECT `network` FROM `gcontact` WHERE `network` IN ('%s', '%s', '%s') AND `nurl` = '%s' LIMIT 1",
dbesc(NETWORK_DFRN), dbesc(NETWORK_DIASPORA), dbesc(NETWORK_OSTATUS), dbesc(NETWORK_DFRN), dbesc(NETWORK_DIASPORA), dbesc(NETWORK_OSTATUS),
dbesc(normalise_link($arr['author-link'])) dbesc(normalise_link($arr['author-link']))
); );
}
if (!DBM::is_result($r)) { if (!DBM::is_result($r)) {
$r = q("SELECT `network` FROM `contact` WHERE `id` = %d AND `uid` = %d LIMIT 1", $r = q("SELECT `network` FROM `contact` WHERE `id` = %d AND `uid` = %d LIMIT 1",
@ -733,7 +735,7 @@ function item_store($arr, $force_parent = false, $notify = false, $dontcache = f
logger("Contact-id was missing for post ".$arr["guid"]." from user id ".$uid." - now set to ".$arr["contact-id"], LOGGER_DEBUG); logger("Contact-id was missing for post ".$arr["guid"]." from user id ".$uid." - now set to ".$arr["contact-id"], LOGGER_DEBUG);
} }
if ($arr["gcontact-id"] == 0) { if (!x($arr, "gcontact-id")) {
/* /*
* The gcontact should mostly behave like the contact. But is is supposed to be global for the system. * The gcontact should mostly behave like the contact. But is is supposed to be global for the system.
* This means that wall posts, repeated posts, etc. should have the gcontact id of the owner. * This means that wall posts, repeated posts, etc. should have the gcontact id of the owner.

View File

@ -1,4 +1,5 @@
<?php <?php
/** /**
* @file include/tags.php * @file include/tags.php
*/ */
@ -8,11 +9,13 @@ use Friendica\Core\System;
use Friendica\Database\DBM; use Friendica\Database\DBM;
use Friendica\Model\Contact; use Friendica\Model\Contact;
function create_tags_from_item($itemid) { function create_tags_from_item($itemid)
{
$profile_base = System::baseUrl(); $profile_base = System::baseUrl();
$profile_data = parse_url($profile_base); $profile_data = parse_url($profile_base);
$profile_base_friendica = $profile_data['host'].$profile_data['path']."/profile/"; $profile_path = defaults($profile_data, 'path', '');
$profile_base_diaspora = $profile_data['host'].$profile_data['path']."/u/"; $profile_base_friendica = $profile_data['host'] . $profile_path . '/profile/';
$profile_base_diaspora = $profile_data['host'] . $profile_path . '/u/';
$messages = q("SELECT `guid`, `uid`, `id`, `edited`, `deleted`, `created`, `received`, `title`, `body`, `tag`, `parent` FROM `item` WHERE `id` = %d LIMIT 1", intval($itemid)); $messages = q("SELECT `guid`, `uid`, `id`, `edited`, `deleted`, `created`, `received`, `title`, `body`, `tag`, `parent` FROM `item` WHERE `id` = %d LIMIT 1", intval($itemid));
@ -28,48 +31,53 @@ function create_tags_from_item($itemid) {
intval(TERM_HASHTAG), intval(TERM_HASHTAG),
intval(TERM_MENTION)); intval(TERM_MENTION));
if ($message["deleted"]) if ($message['deleted']) {
return; return;
}
$taglist = explode(",", $message["tag"]); $taglist = explode(',', $message['tag']);
$tags = ""; $tags = '';
foreach ($taglist as $tag) foreach ($taglist as $tag) {
if ((substr(trim($tag), 0, 1) == "#") || (substr(trim($tag), 0, 1) == "@")) if ((substr(trim($tag), 0, 1) == '#') || (substr(trim($tag), 0, 1) == '@')) {
$tags .= " ".trim($tag); $tags .= ' ' . trim($tag);
else } else {
$tags .= " #".trim($tag); $tags .= ' #' . trim($tag);
}
}
$data = " ".$message["title"]." ".$message["body"]." ".$tags." "; $data = ' ' . $message['title'] . ' ' . $message['body'] . ' ' . $tags . ' ';
// ignore anything in a code block // ignore anything in a code block
$data = preg_replace('/\[code\](.*?)\[\/code\]/sm','',$data); $data = preg_replace('/\[code\](.*?)\[\/code\]/sm', '', $data);
$tags = array(); $tags = array();
$pattern = "/\W\#([^\[].*?)[\s'\".,:;\?!\[\]\/]/ism"; $pattern = '/\W\#([^\[].*?)[\s\'".,:;\?!\[\]\/]/ism';
if (preg_match_all($pattern, $data, $matches)) if (preg_match_all($pattern, $data, $matches)) {
foreach ($matches[1] as $match) foreach ($matches[1] as $match) {
$tags["#".strtolower($match)] = ""; $tags['#' . strtolower($match)] = '';
}
$pattern = "/\W([\#@])\[url\=(.*?)\](.*?)\[\/url\]/ism";
if (preg_match_all($pattern, $data, $matches, PREG_SET_ORDER)) {
foreach ($matches as $match)
$tags[$match[1].strtolower(trim($match[3], ',.:;[]/\"?!'))] = $match[2];
} }
foreach ($tags as $tag=>$link) { $pattern = '/\W([\#@])\[url\=(.*?)\](.*?)\[\/url\]/ism';
if (preg_match_all($pattern, $data, $matches, PREG_SET_ORDER)) {
foreach ($matches as $match) {
$tags[$match[1] . strtolower(trim($match[3], ',.:;[]/\"?!'))] = $match[2];
}
}
if (substr(trim($tag), 0, 1) == "#") { foreach ($tags as $tag => $link) {
if (substr(trim($tag), 0, 1) == '#') {
// try to ignore #039 or #1 or anything like that // try to ignore #039 or #1 or anything like that
if (ctype_digit(substr(trim($tag),1))) if (ctype_digit(substr(trim($tag), 1)))
continue; continue;
// try to ignore html hex escapes, e.g. #x2317 // try to ignore html hex escapes, e.g. #x2317
if ((substr(trim($tag),1,1) == 'x' || substr(trim($tag),1,1) == 'X') && ctype_digit(substr(trim($tag),2))) if ((substr(trim($tag), 1, 1) == 'x' || substr(trim($tag), 1, 1) == 'X') && ctype_digit(substr(trim($tag), 2)))
continue; continue;
$type = TERM_HASHTAG; $type = TERM_HASHTAG;
$term = substr($tag, 1); $term = substr($tag, 1);
} elseif (substr(trim($tag), 0, 1) == "@") { } elseif (substr(trim($tag), 0, 1) == '@') {
$type = TERM_MENTION; $type = TERM_MENTION;
$term = substr($tag, 1); $term = substr($tag, 1);
} else { // This shouldn't happen } else { // This shouldn't happen
@ -77,78 +85,78 @@ function create_tags_from_item($itemid) {
$term = $tag; $term = $tag;
} }
if ($message["uid"] == 0) { if ($message['uid'] == 0) {
$global = true; $global = true;
q("UPDATE `term` SET `global` = 1 WHERE `otype` = %d AND `guid` = '%s'", q("UPDATE `term` SET `global` = 1 WHERE `otype` = %d AND `guid` = '%s'",
intval(TERM_OBJ_POST), dbesc($message["guid"])); intval(TERM_OBJ_POST), dbesc($message['guid']));
} else { } else {
$isglobal = q("SELECT `global` FROM `term` WHERE `uid` = 0 AND `otype` = %d AND `guid` = '%s'", $isglobal = q("SELECT `global` FROM `term` WHERE `uid` = 0 AND `otype` = %d AND `guid` = '%s'",
intval(TERM_OBJ_POST), dbesc($message["guid"])); intval(TERM_OBJ_POST), dbesc($message['guid']));
$global = (count($isglobal) > 0); $global = (count($isglobal) > 0);
} }
$r = q("INSERT INTO `term` (`uid`, `oid`, `otype`, `type`, `term`, `url`, `guid`, `created`, `received`, `global`) $r = q("INSERT INTO `term` (`uid`, `oid`, `otype`, `type`, `term`, `url`, `guid`, `created`, `received`, `global`)
VALUES (%d, %d, %d, %d, '%s', '%s', '%s', '%s', '%s', %d)", VALUES (%d, %d, %d, %d, '%s', '%s', '%s', '%s', '%s', %d)",
intval($message["uid"]), intval($itemid), intval(TERM_OBJ_POST), intval($type), dbesc($term), intval($message['uid']), intval($itemid), intval(TERM_OBJ_POST), intval($type), dbesc($term),
dbesc($link), dbesc($message["guid"]), dbesc($message["created"]), dbesc($message["received"]), intval($global)); dbesc($link), dbesc($message['guid']), dbesc($message['created']), dbesc($message['received']), intval($global));
// Search for mentions // Search for mentions
if ((substr($tag, 0, 1) == '@') && (strpos($link, $profile_base_friendica) || strpos($link, $profile_base_diaspora))) { if ((substr($tag, 0, 1) == '@') && (strpos($link, $profile_base_friendica) || strpos($link, $profile_base_diaspora))) {
$users = q("SELECT `uid` FROM `contact` WHERE self AND (`url` = '%s' OR `nurl` = '%s')", $link, $link); $users = q("SELECT `uid` FROM `contact` WHERE self AND (`url` = '%s' OR `nurl` = '%s')", $link, $link);
foreach ($users AS $user) { foreach ($users AS $user) {
if ($user["uid"] == $message["uid"]) { if ($user['uid'] == $message['uid']) {
q("UPDATE `item` SET `mention` = 1 WHERE `id` = %d", intval($itemid)); q("UPDATE `item` SET `mention` = 1 WHERE `id` = %d", intval($itemid));
q("UPDATE `thread` SET `mention` = 1 WHERE `iid` = %d", intval($message["parent"])); q("UPDATE `thread` SET `mention` = 1 WHERE `iid` = %d", intval($message['parent']));
} }
} }
} }
} }
} }
function create_tags_from_itemuri($itemuri, $uid) { function create_tags_from_itemuri($itemuri, $uid)
{
$messages = q("SELECT `id` FROM `item` WHERE uri ='%s' AND uid=%d", dbesc($itemuri), intval($uid)); $messages = q("SELECT `id` FROM `item` WHERE uri ='%s' AND uid=%d", dbesc($itemuri), intval($uid));
if (count($messages)) { if (count($messages)) {
foreach ($messages as $message) { foreach ($messages as $message) {
create_tags_from_item($message["id"]); create_tags_from_item($message['id']);
} }
} }
} }
function update_items() { function update_items()
{
$messages = dba::p("SELECT `oid`,`item`.`guid`, `item`.`created`, `item`.`received` FROM `term` INNER JOIN `item` ON `item`.`id`=`term`.`oid` WHERE `term`.`otype` = 1 AND `term`.`guid` = ''"); $messages = dba::p("SELECT `oid`,`item`.`guid`, `item`.`created`, `item`.`received` FROM `term` INNER JOIN `item` ON `item`.`id`=`term`.`oid` WHERE `term`.`otype` = 1 AND `term`.`guid` = ''");
logger("fetched messages: ".dba::num_rows($messages)); logger('fetched messages: ' . dba::num_rows($messages));
while ($message = dba::fetch($messages)) { while ($message = dba::fetch($messages)) {
if ($message['uid'] == 0) {
if ($message["uid"] == 0) {
$global = true; $global = true;
q("UPDATE `term` SET `global` = 1 WHERE `otype` = %d AND `guid` = '%s'", q("UPDATE `term` SET `global` = 1 WHERE `otype` = %d AND `guid` = '%s'",
intval(TERM_OBJ_POST), dbesc($message["guid"])); intval(TERM_OBJ_POST), dbesc($message['guid']));
} else { } else {
$isglobal = q("SELECT `global` FROM `term` WHERE `uid` = 0 AND `otype` = %d AND `guid` = '%s'", $isglobal = q("SELECT `global` FROM `term` WHERE `uid` = 0 AND `otype` = %d AND `guid` = '%s'",
intval(TERM_OBJ_POST), dbesc($message["guid"])); intval(TERM_OBJ_POST), dbesc($message['guid']));
$global = (count($isglobal) > 0); $global = (count($isglobal) > 0);
} }
q("UPDATE `term` SET `guid` = '%s', `created` = '%s', `received` = '%s', `global` = %d WHERE `otype` = %d AND `oid` = %d", q("UPDATE `term` SET `guid` = '%s', `created` = '%s', `received` = '%s', `global` = %d WHERE `otype` = %d AND `oid` = %d",
dbesc($message["guid"]), dbesc($message["created"]), dbesc($message["received"]), dbesc($message['guid']), dbesc($message['created']), dbesc($message['received']),
intval($global), intval(TERM_OBJ_POST), intval($message["oid"])); intval($global), intval(TERM_OBJ_POST), intval($message['oid']));
} }
dba::close($messages); dba::close($messages);
$messages = dba::p("SELECT `guid` FROM `item` WHERE `uid` = 0"); $messages = dba::p("SELECT `guid` FROM `item` WHERE `uid` = 0");
logger("fetched messages: ".dba::num_rows($messages)); logger('fetched messages: ' . dba::num_rows($messages));
while ($message = dba::fetch(messages)) { while ($message = dba::fetch(messages)) {
q("UPDATE `item` SET `global` = 1 WHERE `guid` = '%s'", dbesc($message["guid"])); q("UPDATE `item` SET `global` = 1 WHERE `guid` = '%s'", dbesc($message['guid']));
} }
dba::close($messages); dba::close($messages);
@ -166,21 +174,22 @@ function update_items() {
* *
* @return arr Alphabetical sorted array of used tags of an user. * @return arr Alphabetical sorted array of used tags of an user.
*/ */
function tagadelic($uid, $count = 0, $owner_id = 0, $flags = '', $type = TERM_HASHTAG) { function tagadelic($uid, $count = 0, $owner_id = 0, $flags = '', $type = TERM_HASHTAG)
require_once('include/security.php'); {
require_once 'include/security.php';
$item_condition = item_condition(); $item_condition = item_condition();
$sql_options = item_permissions_sql($uid); $sql_options = item_permissions_sql($uid);
$limit = $count ? sprintf("LIMIT %d", intval($count)) : ""; $limit = $count ? sprintf('LIMIT %d', intval($count)) : '';
if ($flags) { if ($flags) {
if ($flags === 'wall') { if ($flags === 'wall') {
$sql_options .= " AND `item`.`wall` "; $sql_options .= ' AND `item`.`wall` ';
} }
} }
if ($owner_id) { if ($owner_id) {
$sql_options .= " AND `item`.`owner-id` = ".intval($owner_id)." "; $sql_options .= ' AND `item`.`owner-id` = ' . intval($owner_id) . ' ';
} }
// Fetch tags // Fetch tags
@ -194,7 +203,7 @@ function tagadelic($uid, $count = 0, $owner_id = 0, $flags = '', $type = TERM_HA
$type, $type,
TERM_OBJ_POST TERM_OBJ_POST
); );
if(!DBM::is_result($r)) { if (!DBM::is_result($r)) {
return array(); return array();
} }
@ -212,32 +221,32 @@ function tagadelic($uid, $count = 0, $owner_id = 0, $flags = '', $type = TERM_HA
* *
* @return string HTML formatted output. * @return string HTML formatted output.
*/ */
function wtagblock($uid, $count = 0,$owner_id = 0, $flags = '', $type = TERM_HASHTAG) { function wtagblock($uid, $count = 0, $owner_id = 0, $flags = '', $type = TERM_HASHTAG)
{
$o = ''; $o = '';
$r = tagadelic($uid, $count, $owner_id, $flags, $type); $r = tagadelic($uid, $count, $owner_id, $flags, $type);
if (count($r)) { if (count($r)) {
$contact = dba::select( $contact = dba::select(
"contact", 'contact',
array("url"), array('url'),
array("id" => $uid), array('id' => $uid),
array("limit" => 1) array('limit' => 1)
); );
$url = System::removedBaseUrl($contact['url']); $url = System::removedBaseUrl($contact['url']);
foreach ($r as $rr) { foreach ($r as $rr) {
$tag['level'] = $rr[2]; $tag['level'] = $rr[2];
$tag['url'] = $url."?tag=".urlencode($rr[0]); $tag['url'] = $url . '?tag=' . urlencode($rr[0]);
$tag['name'] = $rr[0]; $tag['name'] = $rr[0];
$tags[] = $tag; $tags[] = $tag;
} }
$tpl = get_markup_template("tagblock_widget.tpl"); $tpl = get_markup_template('tagblock_widget.tpl');
$o = replace_macros($tpl, array( $o = replace_macros($tpl, array(
'$title' => t('Tags'), '$title' => t('Tags'),
'$tags' => $tags '$tags' => $tags
)); ));
} }
return $o; return $o;
} }
@ -248,7 +257,8 @@ function wtagblock($uid, $count = 0,$owner_id = 0, $flags = '', $type = TERM_HAS
* @param array $arr Array of tags/terms with tag/term name and total count of use. * @param array $arr Array of tags/terms with tag/term name and total count of use.
* @return array Alphabetical sorted array of used tags/terms of an user. * @return array Alphabetical sorted array of used tags/terms of an user.
*/ */
function tag_calc($arr) { function tag_calc($arr)
{
$tags = array(); $tags = array();
$min = 1e9; $min = 1e9;
$max = -1e9; $max = -1e9;
@ -285,7 +295,8 @@ function tag_calc($arr) {
* *
* @return int * @return int
*/ */
function tags_sort($a, $b) { function tags_sort($a, $b)
{
if (strtolower($a[0]) == strtolower($b[0])) { if (strtolower($a[0]) == strtolower($b[0])) {
return 0; return 0;
} }
@ -298,21 +309,22 @@ function tags_sort($a, $b) {
* @param int $limit Max number of displayed tags. * @param int $limit Max number of displayed tags.
* @return string HTML formattat output. * @return string HTML formattat output.
*/ */
function tagcloud_wall_widget($limit = 50) { function tagcloud_wall_widget($limit = 50)
{
$a = get_app(); $a = get_app();
if(!$a->profile['profile_uid'] || !$a->profile['url']) { if (!$a->profile['profile_uid'] || !$a->profile['url']) {
return ""; return '';
} }
if(Feature::isEnabled($a->profile['profile_uid'], 'tagadelic')) { if (Feature::isEnabled($a->profile['profile_uid'], 'tagadelic')) {
$owner_id = Contact::getIdForURL($a->profile['url']); $owner_id = Contact::getIdForURL($a->profile['url']);
if(!$owner_id) { if (!$owner_id) {
return ""; return '';
} }
return wtagblock($a->profile['profile_uid'], $limit, $owner_id, 'wall'); return wtagblock($a->profile['profile_uid'], $limit, $owner_id, 'wall');
} }
return ""; return '';
} }

View File

@ -994,7 +994,7 @@ function contact_block() {
function micropro($contact, $redirect = false, $class = '', $textmode = false) { function micropro($contact, $redirect = false, $class = '', $textmode = false) {
// Use the contact URL if no address is available // Use the contact URL if no address is available
if ($contact["addr"] == "") { if (!x($contact, "addr")) {
$contact["addr"] = $contact["url"]; $contact["addr"] = $contact["url"];
} }
@ -1020,7 +1020,7 @@ function micropro($contact, $redirect = false, $class = '', $textmode = false) {
} }
return replace_macros(get_markup_template(($textmode)?'micropro_txt.tpl':'micropro_img.tpl'),array( return replace_macros(get_markup_template(($textmode)?'micropro_txt.tpl':'micropro_img.tpl'),array(
'$click' => (($contact['click']) ? $contact['click'] : ''), '$click' => defaults($contact, 'click', ''),
'$class' => $class, '$class' => $class,
'$url' => $url, '$url' => $url,
'$photo' => proxy_url($contact['thumb'], false, PROXY_SIZE_THUMB), '$photo' => proxy_url($contact['thumb'], false, PROXY_SIZE_THUMB),
@ -1202,11 +1202,15 @@ function redir_private_images($a, &$item)
} }
} }
function put_item_in_cache(&$item, $update = false) { function put_item_in_cache(&$item, $update = false)
{
if (($item["rendered-hash"] != hash("md5", $item["body"])) || ($item["rendered-hash"] == "") || $rendered_hash = defaults($item, 'rendered-hash', '');
($item["rendered-html"] == "") || Config::get("system", "ignore_cache")) {
if ($rendered_hash == ''
|| $item["rendered-html"] == ""
|| $rendered_hash != hash("md5", $item["body"])
|| Config::get("system", "ignore_cache")
) {
// The function "redir_private_images" changes the body. // The function "redir_private_images" changes the body.
// I'm not sure if we should store it permanently, so we save the old value. // I'm not sure if we should store it permanently, so we save the old value.
$body = $item["body"]; $body = $item["body"];
@ -2026,7 +2030,7 @@ function deindent($text, $chr = "[\t ]", $count = NULL) {
} }
function formatBytes($bytes, $precision = 2) { function formatBytes($bytes, $precision = 2) {
$units = array('B', 'KB', 'MB', 'GB', 'TB'); $units = array('B', 'KB', 'MB', 'GB', 'TB');
$bytes = max($bytes, 0); $bytes = max($bytes, 0);
$pow = floor(($bytes ? log($bytes) : 0) / log(1024)); $pow = floor(($bytes ? log($bytes) : 0) / log(1024));

View File

@ -97,6 +97,7 @@ if (!$a->is_backend()) {
session_start(); session_start();
$a->save_timestamp($stamp1, "parser"); $a->save_timestamp($stamp1, "parser");
} else { } else {
$_SESSION = [];
Worker::executeIfIdle(); Worker::executeIfIdle();
} }
@ -148,7 +149,7 @@ if ((x($_GET, 'zrl')) && (!$install && !$maintenance)) {
// header('Link: <' . System::baseUrl() . '/amcd>; rel="acct-mgmt";'); // header('Link: <' . System::baseUrl() . '/amcd>; rel="acct-mgmt";');
if (x($_COOKIE["Friendica"]) || (x($_SESSION, 'authenticated')) || (x($_POST, 'auth-params')) || ($a->module === 'login')) { if (x($_COOKIE, "Friendica") || (x($_SESSION, 'authenticated')) || (x($_POST, 'auth-params')) || ($a->module === 'login')) {
require "include/auth.php"; require "include/auth.php";
} }

View File

@ -35,8 +35,9 @@ function contacts_init(App $a) {
require_once 'include/contact_widgets.php'; require_once 'include/contact_widgets.php';
if ($_GET['nets'] == "all") { $nets = defaults($_GET, 'nets', '');
$_GET['nets'] = ""; if ($nets == "all") {
$nets = "";
} }
if (! x($a->page,'aside')) { if (! x($a->page,'aside')) {
@ -63,22 +64,22 @@ function contacts_init(App $a) {
'$account_type' => Contact::getAccountType($a->data['contact']) '$account_type' => Contact::getAccountType($a->data['contact'])
)); ));
$finpeople_widget = ''; $findpeople_widget = '';
$follow_widget = ''; $follow_widget = '';
$networks_widget = ''; $networks_widget = '';
} else { } else {
$vcard_widget = ''; $vcard_widget = '';
$networks_widget .= networks_widget('contacts',$_GET['nets']); $networks_widget = networks_widget('contacts', $nets);
if (isset($_GET['add'])) { if (isset($_GET['add'])) {
$follow_widget = follow_widget($_GET['add']); $follow_widget = follow_widget($_GET['add']);
} else { } else {
$follow_widget = follow_widget(); $follow_widget = follow_widget();
} }
$findpeople_widget .= findpeople_widget(); $findpeople_widget = findpeople_widget();
} }
$groups_widget .= Group::sidebarWidget('contacts','group','full',0,$contact_id); $groups_widget = Group::sidebarWidget('contacts','group','full',0,$contact_id);
$a->page['aside'] .= replace_macros(get_markup_template("contacts-widget-sidebar.tpl"),array( $a->page['aside'] .= replace_macros(get_markup_template("contacts-widget-sidebar.tpl"),array(
'$vcard_widget' => $vcard_widget, '$vcard_widget' => $vcard_widget,
@ -515,8 +516,6 @@ function contacts_content(App $a) {
require_once 'include/contact_selectors.php'; require_once 'include/contact_selectors.php';
$tpl = get_markup_template("contact_edit.tpl");
switch($contact['rel']) { switch($contact['rel']) {
case CONTACT_IS_FRIEND: case CONTACT_IS_FRIEND:
$dir_icon = 'images/lrarrow.gif'; $dir_icon = 'images/lrarrow.gif';
@ -577,6 +576,7 @@ function contacts_content(App $a) {
$lost_contact = (($contact['archive'] && $contact['term-date'] > NULL_DATE && $contact['term-date'] < datetime_convert('','','now')) ? t('Communications lost with this contact!') : ''); $lost_contact = (($contact['archive'] && $contact['term-date'] > NULL_DATE && $contact['term-date'] < datetime_convert('','','now')) ? t('Communications lost with this contact!') : '');
$fetch_further_information = null;
if ($contact['network'] == NETWORK_FEED) { if ($contact['network'] == NETWORK_FEED) {
$fetch_further_information = array('fetch_further_information', $fetch_further_information = array('fetch_further_information',
t('Fetch further information for feeds'), t('Fetch further information for feeds'),
@ -587,12 +587,19 @@ function contacts_content(App $a) {
'3' => t('Fetch keywords'), '3' => t('Fetch keywords'),
'2' => t('Fetch information and keywords'))); '2' => t('Fetch information and keywords')));
} }
if (in_array($contact['network'], array(NETWORK_FEED, NETWORK_MAIL)))
$poll_interval = null;
if (in_array($contact['network'], array(NETWORK_FEED, NETWORK_MAIL))) {
$poll_interval = contact_poll_interval($contact['priority'],(! $poll_enabled)); $poll_interval = contact_poll_interval($contact['priority'],(! $poll_enabled));
}
if ($contact['network'] == NETWORK_DFRN) $profile_select = null;
if ($contact['network'] == NETWORK_DFRN) {
$profile_select = contact_profile_assign($contact['profile-id'],(($contact['network'] !== NETWORK_DFRN) ? true : false)); $profile_select = contact_profile_assign($contact['profile-id'],(($contact['network'] !== NETWORK_DFRN) ? true : false));
}
$follow = '';
$follow_text = '';
if (in_array($contact['network'], array(NETWORK_DIASPORA, NETWORK_OSTATUS))) { if (in_array($contact['network'], array(NETWORK_DIASPORA, NETWORK_OSTATUS))) {
if ($contact['rel'] == CONTACT_IS_FOLLOWER) { if ($contact['rel'] == CONTACT_IS_FOLLOWER) {
$follow = System::baseUrl(true)."/follow?url=".urlencode($contact["url"]); $follow = System::baseUrl(true)."/follow?url=".urlencode($contact["url"]);
@ -606,7 +613,7 @@ function contacts_content(App $a) {
// Load contactact related actions like hide, suggest, delete and others // Load contactact related actions like hide, suggest, delete and others
$contact_actions = contact_actions($contact); $contact_actions = contact_actions($contact);
$tpl = get_markup_template("contact_edit.tpl");
$o .= replace_macros($tpl, array( $o .= replace_macros($tpl, array(
//'$header' => t('Contact Editor'), //'$header' => t('Contact Editor'),
'$header' => t("Contact"), '$header' => t("Contact"),
@ -618,9 +625,7 @@ function contacts_content(App $a) {
'$lbl_info2' => t('Their personal note'), '$lbl_info2' => t('Their personal note'),
'$reason' => trim(notags($contact['reason'])), '$reason' => trim(notags($contact['reason'])),
'$infedit' => t('Edit contact notes'), '$infedit' => t('Edit contact notes'),
'$common_text' => $common_text,
'$common_link' => 'common/loc/' . local_user() . '/' . $contact['id'], '$common_link' => 'common/loc/' . local_user() . '/' . $contact['id'],
'$all_friends' => $all_friends,
'$relation_text' => $relation_text, '$relation_text' => $relation_text,
'$visit' => sprintf( t('Visit %s\'s profile [%s]'),$contact['name'],$contact['url']), '$visit' => sprintf( t('Visit %s\'s profile [%s]'),$contact['name'],$contact['url']),
'$blockunblock' => t('Block/Unblock contact'), '$blockunblock' => t('Block/Unblock contact'),
@ -658,7 +663,6 @@ function contacts_content(App $a) {
'$photo' => $contact['photo'], '$photo' => $contact['photo'],
'$name' => htmlentities($contact['name']), '$name' => htmlentities($contact['name']),
'$dir_icon' => $dir_icon, '$dir_icon' => $dir_icon,
'$alt_text' => $alt_text,
'$sparkle' => $sparkle, '$sparkle' => $sparkle,
'$url' => $url, '$url' => $url,
'$profileurllabel' => t('Profile URL'), '$profileurllabel' => t('Profile URL'),
@ -688,36 +692,33 @@ function contacts_content(App $a) {
} }
$blocked = false; $blocked = false;
$hidden = false; $hidden = false;
$ignored = false; $ignored = false;
$all = false; $archived = false;
$all = false;
if(($a->argc == 2) && ($a->argv[1] === 'all')) { if(($a->argc == 2) && ($a->argv[1] === 'all')) {
$sql_extra = ''; $sql_extra = '';
$all = true; $all = true;
} } elseif(($a->argc == 2) && ($a->argv[1] === 'blocked')) {
elseif(($a->argc == 2) && ($a->argv[1] === 'blocked')) {
$sql_extra = " AND `blocked` = 1 "; $sql_extra = " AND `blocked` = 1 ";
$blocked = true; $blocked = true;
} } elseif(($a->argc == 2) && ($a->argv[1] === 'hidden')) {
elseif(($a->argc == 2) && ($a->argv[1] === 'hidden')) {
$sql_extra = " AND `hidden` = 1 "; $sql_extra = " AND `hidden` = 1 ";
$hidden = true; $hidden = true;
} } elseif(($a->argc == 2) && ($a->argv[1] === 'ignored')) {
elseif(($a->argc == 2) && ($a->argv[1] === 'ignored')) {
$sql_extra = " AND `readonly` = 1 "; $sql_extra = " AND `readonly` = 1 ";
$ignored = true; $ignored = true;
} } elseif(($a->argc == 2) && ($a->argv[1] === 'archived')) {
elseif(($a->argc == 2) && ($a->argv[1] === 'archived')) {
$sql_extra = " AND `archive` = 1 "; $sql_extra = " AND `archive` = 1 ";
$archived = true; $archived = true;
} } else {
else
$sql_extra = " AND `blocked` = 0 "; $sql_extra = " AND `blocked` = 0 ";
}
$search = ((x($_GET,'search')) ? notags(trim($_GET['search'])) : ''); $search = x($_GET, 'search') ? notags(trim($_GET['search'])) : '';
$nets = ((x($_GET,'nets')) ? notags(trim($_GET['nets'])) : ''); $nets = x($_GET, 'nets') ? notags(trim($_GET['nets'])) : '';
$tabs = array( $tabs = array(
array( array(
@ -786,25 +787,25 @@ function contacts_content(App $a) {
$tab_tpl = get_markup_template('common_tabs.tpl'); $tab_tpl = get_markup_template('common_tabs.tpl');
$t = replace_macros($tab_tpl, array('$tabs'=>$tabs)); $t = replace_macros($tab_tpl, array('$tabs'=>$tabs));
$searching = false; $searching = false;
if($search) { $search_hdr = null;
if ($search) {
$search_hdr = $search; $search_hdr = $search;
$search_txt = dbesc(protect_sprintf(preg_quote($search))); $search_txt = dbesc(protect_sprintf(preg_quote($search)));
$searching = true; $searching = true;
} }
$sql_extra .= (($searching) ? " AND (name REGEXP '$search_txt' OR url REGEXP '$search_txt' OR nick REGEXP '$search_txt') " : ""); $sql_extra .= (($searching) ? " AND (name REGEXP '$search_txt' OR url REGEXP '$search_txt' OR nick REGEXP '$search_txt') " : "");
if($nets) if ($nets) {
$sql_extra .= sprintf(" AND network = '%s' ", dbesc($nets)); $sql_extra .= sprintf(" AND network = '%s' ", dbesc($nets));
}
$sql_extra2 = ((($sort_type > 0) && ($sort_type <= CONTACT_IS_FRIEND)) ? sprintf(" AND `rel` = %d ",intval($sort_type)) : ''); $sql_extra2 = ((($sort_type > 0) && ($sort_type <= CONTACT_IS_FRIEND)) ? sprintf(" AND `rel` = %d ",intval($sort_type)) : '');
$r = q("SELECT COUNT(*) AS `total` FROM `contact` $r = q("SELECT COUNT(*) AS `total` FROM `contact`
WHERE `uid` = %d AND `self` = 0 AND `pending` = 0 $sql_extra $sql_extra2 ", WHERE `uid` = %d AND `self` = 0 AND `pending` = 0 $sql_extra $sql_extra2 ",
intval($_SESSION['uid'])); intval($_SESSION['uid'])
);
if (DBM::is_result($r)) { if (DBM::is_result($r)) {
$a->set_pager_total($r[0]['total']); $a->set_pager_total($r[0]['total']);
$total = $r[0]['total']; $total = $r[0]['total'];
@ -834,7 +835,7 @@ function contacts_content(App $a) {
'$total' => $total, '$total' => $total,
'$search' => $search_hdr, '$search' => $search_hdr,
'$desc' => t('Search your contacts'), '$desc' => t('Search your contacts'),
'$finding' => (($searching) ? sprintf(t('Results for: %s'),$search) : ""), '$finding' => $searching ? t('Results for: %s', $search) : "",
'$submit' => t('Find'), '$submit' => t('Find'),
'$cmd' => $a->cmd, '$cmd' => $a->cmd,
'$contacts' => $contacts, '$contacts' => $contacts,
@ -849,7 +850,6 @@ function contacts_content(App $a) {
), ),
'$h_batch_actions' => t('Batch Actions'), '$h_batch_actions' => t('Batch Actions'),
'$paginate' => paginate($a), '$paginate' => paginate($a),
)); ));
return $o; return $o;
@ -927,12 +927,11 @@ function contact_posts($a, $contact_id) {
$contact = $r[0]; $contact = $r[0];
$a->page['aside'] = ""; $a->page['aside'] = "";
profile_load($a, "", 0, Contact::getDetailsByURL($contact["url"])); profile_load($a, "", 0, Contact::getDetailsByURL($contact["url"]));
} else }
$profile = "";
$tab_str = contacts_tab($a, $contact_id, 1); $tab_str = contacts_tab($a, $contact_id, 1);
$o .= $tab_str; $o = $tab_str;
$o .= Contact::getPostsFromUrl($contact["url"]); $o .= Contact::getPostsFromUrl($contact["url"]);

View File

@ -1,4 +1,5 @@
<?php <?php
/** /**
* @file mod/crepair.php * @file mod/crepair.php
*/ */
@ -10,65 +11,68 @@ use Friendica\Model\Contact;
require_once 'include/contact_selectors.php'; require_once 'include/contact_selectors.php';
require_once 'mod/contacts.php'; require_once 'mod/contacts.php';
function crepair_init(App $a) { function crepair_init(App $a)
if (! local_user()) { {
if (!local_user()) {
return; return;
} }
$contact_id = 0; $contact_id = 0;
if(($a->argc == 2) && intval($a->argv[1])) { if (($a->argc == 2) && intval($a->argv[1])) {
$contact_id = intval($a->argv[1]); $contact_id = intval($a->argv[1]);
$r = q("SELECT * FROM `contact` WHERE `uid` = %d and `id` = %d LIMIT 1", $r = q("SELECT * FROM `contact` WHERE `uid` = %d and `id` = %d LIMIT 1",
intval(local_user()), intval(local_user()),
intval($contact_id) intval($contact_id)
); );
if (! DBM::is_result($r)) { if (!DBM::is_result($r)) {
$contact_id = 0; $contact_id = 0;
} }
} }
if(! x($a->page,'aside')) if (!x($a->page, 'aside')) {
$a->page['aside'] = ''; $a->page['aside'] = '';
}
if($contact_id) { if ($contact_id) {
$a->data['contact'] = $r[0]; $a->data['contact'] = $r[0];
$contact = $r[0]; $contact = $r[0];
profile_load($a, "", 0, Contact::getDetailsByURL($contact["url"])); profile_load($a, "", 0, Contact::getDetailsByURL($contact["url"]));
} }
} }
function crepair_post(App $a) { function crepair_post(App $a)
if (! local_user()) { {
if (!local_user()) {
return; return;
} }
$cid = (($a->argc > 1) ? intval($a->argv[1]) : 0); $cid = (($a->argc > 1) ? intval($a->argv[1]) : 0);
if($cid) { if ($cid) {
$r = q("SELECT * FROM `contact` WHERE `id` = %d AND `uid` = %d LIMIT 1", $r = q("SELECT * FROM `contact` WHERE `id` = %d AND `uid` = %d LIMIT 1",
intval($cid), intval($cid),
intval(local_user()) intval(local_user())
); );
} }
if (! DBM::is_result($r)) { if (!DBM::is_result($r)) {
return; return;
} }
$contact = $r[0]; $contact = $r[0];
$name = ((x($_POST,'name')) ? $_POST['name'] : $contact['name']); $name = defaults($_POST, 'name' , $contact['name']);
$nick = ((x($_POST,'nick')) ? $_POST['nick'] : ''); $nick = defaults($_POST, 'nick' , '');
$url = ((x($_POST,'url')) ? $_POST['url'] : ''); $url = defaults($_POST, 'url' , '');
$request = ((x($_POST,'request')) ? $_POST['request'] : ''); $request = defaults($_POST, 'request' , '');
$confirm = ((x($_POST,'confirm')) ? $_POST['confirm'] : ''); $confirm = defaults($_POST, 'confirm' , '');
$notify = ((x($_POST,'notify')) ? $_POST['notify'] : ''); $notify = defaults($_POST, 'notify' , '');
$poll = ((x($_POST,'poll')) ? $_POST['poll'] : ''); $poll = defaults($_POST, 'poll' , '');
$attag = ((x($_POST,'attag')) ? $_POST['attag'] : ''); $attag = defaults($_POST, 'attag' , '');
$photo = ((x($_POST,'photo')) ? $_POST['photo'] : ''); $photo = defaults($_POST, 'photo' , '');
$remote_self = ((x($_POST,'remote_self')) ? $_POST['remote_self'] : false); $remote_self = defaults($_POST, 'remote_self', false);
$nurl = normalise_link($url); $nurl = normalise_link($url);
$r = q("UPDATE `contact` SET `name` = '%s', `nick` = '%s', `url` = '%s', `nurl` = '%s', `request` = '%s', `confirm` = '%s', `notify` = '%s', `poll` = '%s', `attag` = '%s' , `remote_self` = %d $r = q("UPDATE `contact` SET `name` = '%s', `nick` = '%s', `url` = '%s', `nurl` = '%s', `request` = '%s', `confirm` = '%s', `notify` = '%s', `poll` = '%s', `attag` = '%s' , `remote_self` = %d
WHERE `id` = %d AND `uid` = %d", WHERE `id` = %d AND `uid` = %d",
@ -101,26 +105,24 @@ function crepair_post(App $a) {
return; return;
} }
function crepair_content(App $a)
{
function crepair_content(App $a) { if (!local_user()) {
notice(t('Permission denied.') . EOL);
if (! local_user()) {
notice( t('Permission denied.') . EOL);
return; return;
} }
$cid = (($a->argc > 1) ? intval($a->argv[1]) : 0); $cid = (($a->argc > 1) ? intval($a->argv[1]) : 0);
if($cid) { if ($cid) {
$r = q("SELECT * FROM `contact` WHERE `id` = %d AND `uid` = %d LIMIT 1", $r = q("SELECT * FROM `contact` WHERE `id` = %d AND `uid` = %d LIMIT 1",
intval($cid), intval($cid),
intval(local_user()) intval(local_user())
); );
} }
if (! DBM::is_result($r)) { if (!DBM::is_result($r)) {
notice( t('Contact not found.') . EOL); notice(t('Contact not found.') . EOL);
return; return;
} }
@ -131,45 +133,44 @@ function crepair_content(App $a) {
$returnaddr = "contacts/$cid"; $returnaddr = "contacts/$cid";
$allow_remote_self = Config::get('system','allow_users_remote_self'); $allow_remote_self = Config::get('system', 'allow_users_remote_self');
// Disable remote self for everything except feeds. // Disable remote self for everything except feeds.
// There is an issue when you repeat an item from maybe twitter and you got comments from friendica and twitter // There is an issue when you repeat an item from maybe twitter and you got comments from friendica and twitter
// Problem is, you couldn't reply to both networks. // Problem is, you couldn't reply to both networks.
if (!in_array($contact['network'], array(NETWORK_FEED, NETWORK_DFRN, NETWORK_DIASPORA))) if (!in_array($contact['network'], array(NETWORK_FEED, NETWORK_DFRN, NETWORK_DIASPORA))) {
$allow_remote_self = false; $allow_remote_self = false;
}
if ($contact['network'] == NETWORK_FEED) if ($contact['network'] == NETWORK_FEED) {
$remote_self_options = array('0'=>t('No mirroring'), '1'=>t('Mirror as forwarded posting'), '2'=>t('Mirror as my own posting')); $remote_self_options = array('0' => t('No mirroring'), '1' => t('Mirror as forwarded posting'), '2' => t('Mirror as my own posting'));
else } else {
$remote_self_options = array('0'=>t('No mirroring'), '2'=>t('Mirror as my own posting')); $remote_self_options = array('0' => t('No mirroring'), '2' => t('Mirror as my own posting'));
}
$update_profile = in_array($contact['network'], array(NETWORK_DFRN, NETWORK_DSPR, NETWORK_OSTATUS)); $update_profile = in_array($contact['network'], array(NETWORK_DFRN, NETWORK_DIASPORA, NETWORK_OSTATUS));
$tab_str = contacts_tab($a, $contact['id'], 5); $tab_str = contacts_tab($a, $contact['id'], 5);
$tpl = get_markup_template('crepair.tpl'); $tpl = get_markup_template('crepair.tpl');
$o .= replace_macros($tpl, array( $o = replace_macros($tpl, array(
//'$title' => t('Repair Contact Settings'), '$tab_str' => $tab_str,
'$tab_str' => $tab_str, '$warning' => $warning,
'$warning' => $warning, '$info' => $info,
'$info' => $info, '$returnaddr' => $returnaddr,
'$returnaddr' => $returnaddr, '$return' => t('Return to contact editor'),
'$return' => t('Return to contact editor'), '$update_profile' => $update_profile,
'$update_profile' => update_profile, '$udprofilenow' => t('Refetch contact data'),
'$udprofilenow' => t('Refetch contact data'), '$contact_id' => $contact['id'],
'$contact_id' => $contact['id'], '$lbl_submit' => t('Submit'),
'$lbl_submit' => t('Submit'),
'$label_remote_self' => t('Remote Self'), '$label_remote_self' => t('Remote Self'),
'$allow_remote_self' => $allow_remote_self, '$allow_remote_self' => $allow_remote_self,
'$remote_self' => array('remote_self', '$remote_self' => array('remote_self',
t('Mirror postings from this contact'), t('Mirror postings from this contact'),
$contact['remote_self'], $contact['remote_self'],
t('Mark this contact as remote_self, this will cause friendica to repost new entries from this contact.'), t('Mark this contact as remote_self, this will cause friendica to repost new entries from this contact.'),
$remote_self_options $remote_self_options
), ),
'$name' => array('name', t('Name') , htmlentities($contact['name'])), '$name' => array('name', t('Name') , htmlentities($contact['name'])),
'$nick' => array('nick', t('Account Nickname'), htmlentities($contact['nick'])), '$nick' => array('nick', t('Account Nickname'), htmlentities($contact['nick'])),
@ -183,5 +184,4 @@ function crepair_content(App $a) {
)); ));
return $o; return $o;
} }

View File

@ -201,8 +201,9 @@ function display_content(App $a, $update = false, $update_uid = 0) {
if ($update) { if ($update) {
$item_id = $_REQUEST['item_id']; $item_id = $_REQUEST['item_id'];
$item = dba::select('item', ['uid'], ['id' => $item_id], ['limit' => 1]); $item = dba::select('item', ['uid', 'parent'], ['id' => $item_id], ['limit' => 1]);
$a->profile = array('uid' => intval($item['uid']), 'profile_uid' => intval($item['uid'])); $a->profile = array('uid' => intval($item['uid']), 'profile_uid' => intval($item['uid']));
$item_parent = $item['parent'];
} else { } else {
$item_id = (($a->argc > 2) ? $a->argv[2] : 0); $item_id = (($a->argc > 2) ? $a->argv[2] : 0);
@ -260,7 +261,7 @@ function display_content(App $a, $update = false, $update_uid = 0) {
$contact_id = 0; $contact_id = 0;
if (is_array($_SESSION['remote'])) { if (x($_SESSION, 'remote') && is_array($_SESSION['remote'])) {
foreach ($_SESSION['remote'] as $v) { foreach ($_SESSION['remote'] as $v) {
if ($v['uid'] == $a->profile['uid']) { if ($v['uid'] == $a->profile['uid']) {
$contact_id = $v['cid']; $contact_id = $v['cid'];
@ -294,7 +295,7 @@ function display_content(App $a, $update = false, $update_uid = 0) {
} }
$is_owner = (local_user() && (in_array($a->profile['profile_uid'], [local_user(), 0])) ? true : false); $is_owner = (local_user() && (in_array($a->profile['profile_uid'], [local_user(), 0])) ? true : false);
if ($a->profile['hidewall'] && !$is_owner && !$remote_contact) { if (x($a->profile, 'hidewall') && !$is_owner && !$remote_contact) {
notice(t('Access to this profile has been restricted.') . EOL); notice(t('Access to this profile has been restricted.') . EOL);
return; return;
} }

View File

@ -20,7 +20,7 @@ function events_init(App $a) {
return; return;
} }
if ($a->argc == 1) { if ($a->argc > 1) {
// If it's a json request abort here because we don't // If it's a json request abort here because we don't
// need the widget data // need the widget data
if ($a->argv[1] === 'json') { if ($a->argv[1] === 'json') {
@ -234,6 +234,7 @@ function events_content(App $a) {
)); ));
$o = ''; $o = '';
$tabs = '';
// tabs // tabs
if ($a->theme_events_in_profile) { if ($a->theme_events_in_profile) {
$tabs = profile_tabs($a, true); $tabs = profile_tabs($a, true);
@ -309,10 +310,13 @@ function events_content(App $a) {
$start = sprintf('%d-%d-%d %d:%d:%d', $y, $m, 1, 0, 0, 0); $start = sprintf('%d-%d-%d %d:%d:%d', $y, $m, 1, 0, 0, 0);
$finish = sprintf('%d-%d-%d %d:%d:%d', $y, $m, $dim, 23, 59, 59); $finish = sprintf('%d-%d-%d %d:%d:%d', $y, $m, $dim, 23, 59, 59);
if ($a->argc > 1 && $a->argv[1] === 'json') {
if ($a->argv[1] === 'json') { if (x($_GET, 'start')) {
if (x($_GET, 'start')) {$start = $_GET['start'];} $start = $_GET['start'];
if (x($_GET, 'end')) {$finish = $_GET['end'];} }
if (x($_GET, 'end')) {
$finish = $_GET['end'];
}
} }
$start = datetime_convert('UTC', 'UTC', $start); $start = datetime_convert('UTC', 'UTC', $start);
@ -358,7 +362,7 @@ function events_content(App $a) {
$events = process_events($r); $events = process_events($r);
} }
if ($a->argv[1] === 'json'){ if ($a->argc > 1 && $a->argv[1] === 'json'){
echo json_encode($events); echo json_encode($events);
killme(); killme();
} }

View File

@ -7,90 +7,87 @@
* Author: Rabuzarus <https://github.com/rabuzarus> * Author: Rabuzarus <https://github.com/rabuzarus>
* License: GNU AFFERO GENERAL PUBLIC LICENSE (Version 3) * License: GNU AFFERO GENERAL PUBLIC LICENSE (Version 3)
*/ */
use Friendica\App; use Friendica\App;
use Friendica\Core\Config; use Friendica\Core\Config;
use Friendica\Model\Contact; use Friendica\Model\Contact;
use Friendica\Model\GContact; use Friendica\Model\GContact;
function hovercard_init(App $a) { function hovercard_init(App $a)
{
// Just for testing purposes // Just for testing purposes
$_GET["mode"] = "minimal"; $_GET['mode'] = 'minimal';
} }
function hovercard_content() { function hovercard_content()
$profileurl = (x($_REQUEST,'profileurl') ? $_REQUEST['profileurl'] : ""); {
$datatype = (x($_REQUEST,'datatype') ?$_REQUEST['datatype'] : "json"); $profileurl = defaults($_REQUEST, 'profileurl', '');
$datatype = defaults($_REQUEST, 'datatype' , 'json');
// Get out if the system doesn't have public access allowed // Get out if the system doesn't have public access allowed
if(intval(Config::get('system','block_public'))) if (intval(Config::get('system', 'block_public'))) {
http_status_exit(401); http_status_exit(401);
}
// Return the raw content of the template. We use this to make templates usable for js functions. // Return the raw content of the template. We use this to make templates usable for js functions.
// Look at hovercard.js (function getHoverCardTemplate()). // Look at hovercard.js (function getHoverCardTemplate()).
// This part should be moved in it's own module. Maybe we could make more templates accessabel. // This part should be moved in its own module. Maybe we could make more templates accessible.
// (We need to discuss possible security lacks before doing this) // (We need to discuss possible security leaks before doing this)
if ($datatype == "tpl") { if ($datatype == 'tpl') {
$templatecontent = get_template_content("hovercard.tpl"); $templatecontent = get_template_content('hovercard.tpl');
echo $templatecontent; echo $templatecontent;
killme(); killme();
} }
// If a contact is connected the url is internally changed to "redir/CID". We need the pure url to search for // If a contact is connected the url is internally changed to 'redir/CID'. We need the pure url to search for
// the contact. So we strip out the contact id from the internal url and look in the contact table for // the contact. So we strip out the contact id from the internal url and look in the contact table for
// the real url (nurl) // the real url (nurl)
if (local_user() && strpos($profileurl, "redir/") === 0) { $cid = 0;
if (local_user() && strpos($profileurl, 'redir/') === 0) {
$cid = intval(substr($profileurl, 6)); $cid = intval(substr($profileurl, 6));
$r = dba::select('contact', array('nurl', 'self'), array('id' => $cid), array('limit' => 1)); $r = dba::select('contact', array('nurl'), array('id' => $cid), array('limit' => 1));
$profileurl = ($r["nurl"] ? $r["nurl"] : ""); $profileurl = defaults($r, 'nurl', '');
$self = ($r["self"] ? $r["self"] : "");
} }
$contact = [];
// if it's the url containing https it should be converted to http // if it's the url containing https it should be converted to http
$nurl = normalise_link(GContact::cleanContactUrl($profileurl)); $nurl = normalise_link(GContact::cleanContactUrl($profileurl));
if($nurl) { if ($nurl) {
// Search for contact data // Search for contact data
$contact = Contact::getDetailsByURL($nurl); $contact = Contact::getDetailsByURL($nurl);
} }
if(!is_array($contact)) if (!count($contact)) {
return; return;
}
// Get the photo_menu - the menu if possible contact actions // Get the photo_menu - the menu if possible contact actions
if(local_user()) if (local_user()) {
$actions = Contact::photoMenu($contact); $actions = Contact::photoMenu($contact);
}
// Move the contact data to the profile array so we can deliver it to // Move the contact data to the profile array so we can deliver it to
//
$profile = array( $profile = array(
'name' => $contact["name"], 'name' => $contact['name'],
'nick' => $contact["nick"], 'nick' => $contact['nick'],
'addr' => (($contact["addr"] != "") ? $contact["addr"] : $contact["url"]), 'addr' => defaults($contact, 'addr', $contact['url']),
'thumb' => proxy_url($contact["thumb"], false, PROXY_SIZE_THUMB), 'thumb' => proxy_url($contact['thumb'], false, PROXY_SIZE_THUMB),
'url' => ($cid ? ("redir/".$cid) : zrl($contact["url"])), 'url' => $cid ? ('redir/' . $cid) : zrl($contact['url']),
'nurl' => $contact["nurl"], // We additionally store the nurl as identifier 'nurl' => $contact['nurl'], // We additionally store the nurl as identifier
// 'alias' => $contact["alias"], 'location' => $contact['location'],
'location' => $contact["location"], 'gender' => $contact['gender'],
'gender' => $contact["gender"], 'about' => $contact['about'],
'about' => $contact["about"], 'network' => format_network_name($contact['network'], $contact['url']),
'network' => format_network_name($contact["network"], $contact["url"]), 'tags' => $contact['keywords'],
'tags' => $contact["keywords"], 'bd' => $contact['birthday'] <= '0001-01-01' ? '' : $contact['birthday'],
// 'nsfw' => intval($contact["nsfw"]),
// 'server_url' => $contact["server_url"],
'bd' => (($contact["birthday"] <= '0001-01-01') ? "" : $contact["birthday"]),
// 'generation' => $contact["generation"],
'account_type' => Contact::getAccountType($contact), 'account_type' => Contact::getAccountType($contact),
'actions' => $actions, 'actions' => $actions,
); );
if($datatype == "html") { if ($datatype == 'html') {
$t = get_markup_template("hovercard.tpl"); $tpl = get_markup_template('hovercard.tpl');
$o = replace_macros($tpl, array(
$o = replace_macros($t, array(
'$profile' => $profile, '$profile' => $profile,
)); ));
return $o; return $o;
} else { } else {
json_return_and_die($profile); json_return_and_die($profile);
} }
@ -104,15 +101,15 @@ function hovercard_content() {
* *
* @return string|bool Output the raw content if existent, otherwise false * @return string|bool Output the raw content if existent, otherwise false
*/ */
function get_template_content($template, $root = "") { function get_template_content($template, $root = '')
{
// We load the whole template system to get the filename. // We load the whole template system to get the filename.
// Maybe we can do it a little bit smarter if I get time. // Maybe we can do it a little bit smarter if I get time.
$t = get_markup_template($template, $root); $t = get_markup_template($template, $root);
$filename = $t->filename; $filename = $t->filename;
// Get the content of the template file // Get the content of the template file
if(file_exists($filename)) { if (file_exists($filename)) {
$content = file_get_contents($filename); $content = file_get_contents($filename);
return $content; return $content;

View File

@ -10,107 +10,104 @@ require_once 'include/acl_selectors.php';
require_once 'include/message.php'; require_once 'include/message.php';
require_once 'include/conversation.php'; require_once 'include/conversation.php';
function message_init(App $a) { function message_init(App $a)
{
$tabs = ''; $tabs = '';
if ($a->argc >1 && is_numeric($a->argv[1])) { if ($a->argc > 1 && is_numeric($a->argv[1])) {
$tabs = render_messages(get_messages(local_user(),0,5), 'mail_list.tpl'); $tabs = render_messages(get_messages(local_user(), 0, 5), 'mail_list.tpl');
} }
$new = array( $new = array(
'label' => t('New Message'), 'label' => t('New Message'),
'url' => 'message/new', 'url' => 'message/new',
'sel'=> ($a->argv[1] == 'new'), 'sel' => $a->argc > 1 && $a->argv[1] == 'new',
'accesskey' => 'm', 'accesskey' => 'm',
); );
$tpl = get_markup_template('message_side.tpl'); $tpl = get_markup_template('message_side.tpl');
$a->page['aside'] = replace_macros($tpl, array( $a->page['aside'] = replace_macros($tpl, array(
'$tabs'=>$tabs, '$tabs' => $tabs,
'$new'=>$new, '$new' => $new,
)); ));
$base = System::baseUrl(); $base = System::baseUrl();
$head_tpl = get_markup_template('message-head.tpl'); $head_tpl = get_markup_template('message-head.tpl');
$a->page['htmlhead'] .= replace_macros($head_tpl,array( $a->page['htmlhead'] .= replace_macros($head_tpl, array(
'$baseurl' => System::baseUrl(true), '$baseurl' => System::baseUrl(true),
'$base' => $base '$base' => $base
)); ));
$end_tpl = get_markup_template('message-end.tpl'); $end_tpl = get_markup_template('message-end.tpl');
$a->page['end'] .= replace_macros($end_tpl,array( $a->page['end'] .= replace_macros($end_tpl, array(
'$baseurl' => System::baseUrl(true), '$baseurl' => System::baseUrl(true),
'$base' => $base '$base' => $base
)); ));
} }
function message_post(App $a) { function message_post(App $a)
{
if (! local_user()) { if (!local_user()) {
notice( t('Permission denied.') . EOL); notice(t('Permission denied.') . EOL);
return; return;
} }
$replyto = ((x($_REQUEST,'replyto')) ? notags(trim($_REQUEST['replyto'])) : ''); $replyto = x($_REQUEST, 'replyto') ? notags(trim($_REQUEST['replyto'])) : '';
$subject = ((x($_REQUEST,'subject')) ? notags(trim($_REQUEST['subject'])) : ''); $subject = x($_REQUEST, 'subject') ? notags(trim($_REQUEST['subject'])) : '';
$body = ((x($_REQUEST,'body')) ? escape_tags(trim($_REQUEST['body'])) : ''); $body = x($_REQUEST, 'body') ? escape_tags(trim($_REQUEST['body'])) : '';
$recipient = ((x($_REQUEST,'messageto')) ? intval($_REQUEST['messageto']) : 0 ); $recipient = x($_REQUEST, 'messageto') ? intval($_REQUEST['messageto']) : 0;
$ret = send_message($recipient, $body, $subject, $replyto); $ret = send_message($recipient, $body, $subject, $replyto);
$norecip = false; $norecip = false;
switch($ret){ switch ($ret) {
case -1: case -1:
notice( t('No recipient selected.') . EOL ); notice(t('No recipient selected.') . EOL);
$norecip = true; $norecip = true;
break; break;
case -2: case -2:
notice( t('Unable to locate contact information.') . EOL ); notice(t('Unable to locate contact information.') . EOL);
break; break;
case -3: case -3:
notice( t('Message could not be sent.') . EOL ); notice(t('Message could not be sent.') . EOL);
break; break;
case -4: case -4:
notice( t('Message collection failure.') . EOL ); notice(t('Message collection failure.') . EOL);
break; break;
default: default:
info( t('Message sent.') . EOL ); info(t('Message sent.') . EOL);
} }
// fake it to go back to the input form if no recipient listed // fake it to go back to the input form if no recipient listed
if ($norecip) { if ($norecip) {
$a->argc = 2; $a->argc = 2;
$a->argv[1] = 'new'; $a->argv[1] = 'new';
} else } else {
goaway($_SESSION['return_url']); goaway($_SESSION['return_url']);
}
} }
function message_content(App $a) { function message_content(App $a)
{
$o = ''; $o = '';
nav_set_selected('messages'); nav_set_selected('messages');
if (! local_user()) { if (!local_user()) {
notice( t('Permission denied.') . EOL); notice(t('Permission denied.') . EOL);
return; return;
} }
$myprofile = System::baseUrl().'/profile/' . $a->user['nickname']; $myprofile = System::baseUrl() . '/profile/' . $a->user['nickname'];
$tpl = get_markup_template('mail_head.tpl'); $tpl = get_markup_template('mail_head.tpl');
$header = replace_macros($tpl, array( $header = replace_macros($tpl, array(
'$messages' => t('Messages'), '$messages' => t('Messages'),
'$tab_content' => $tab_content
)); ));
if (($a->argc == 3) && ($a->argv[1] === 'drop' || $a->argv[1] === 'dropconv')) { if (($a->argc == 3) && ($a->argv[1] === 'drop' || $a->argv[1] === 'dropconv')) {
if (! intval($a->argv[2])) if (!intval($a->argv[2])) {
return; return;
}
// Check if we should do HTML-based delete confirmation // Check if we should do HTML-based delete confirmation
if ($_REQUEST['confirm']) { if ($_REQUEST['confirm']) {
@ -118,7 +115,7 @@ function message_content(App $a) {
// so add any arguments as hidden inputs // so add any arguments as hidden inputs
$query = explode_querystring($a->query_string); $query = explode_querystring($a->query_string);
$inputs = array(); $inputs = array();
foreach($query['args'] as $arg) { foreach ($query['args'] as $arg) {
if (strpos($arg, 'confirm=') === false) { if (strpos($arg, 'confirm=') === false) {
$arg_parts = explode('=', $arg); $arg_parts = explode('=', $arg);
$inputs[] = array('name' => $arg_parts[0], 'value' => $arg_parts[1]); $inputs[] = array('name' => $arg_parts[0], 'value' => $arg_parts[1]);
@ -148,7 +145,7 @@ function message_content(App $a) {
intval(local_user()) intval(local_user())
); );
if ($r) { if ($r) {
info( t('Message deleted.') . EOL ); info(t('Message deleted.') . EOL);
} }
//goaway(System::baseUrl(true) . '/message' ); //goaway(System::baseUrl(true) . '/message' );
goaway($_SESSION['return_url']); goaway($_SESSION['return_url']);
@ -170,24 +167,22 @@ function message_content(App $a) {
// Actually if we do this, we can never receive another reply to that conversation, // Actually if we do this, we can never receive another reply to that conversation,
// as we will never again have the info we need to re-create it. // as we will never again have the info we need to re-create it.
// We'll just have to orphan it. // We'll just have to orphan it.
//if ($convid) { //if ($convid) {
// q("delete from conv where id = %d limit 1", // q("delete from conv where id = %d limit 1",
// intval($convid) // intval($convid)
// ); // );
//} //}
if ($r) if ($r) {
info( t('Conversation removed.') . EOL ); info(t('Conversation removed.') . EOL);
}
} }
//goaway(System::baseUrl(true) . '/message' ); //goaway(System::baseUrl(true) . '/message' );
goaway($_SESSION['return_url']); goaway($_SESSION['return_url']);
} }
} }
if (($a->argc > 1) && ($a->argv[1] === 'new')) { if (($a->argc > 1) && ($a->argv[1] === 'new')) {
$o .= $header; $o .= $header;
$tpl = get_markup_template('msg-header.tpl'); $tpl = get_markup_template('msg-header.tpl');
@ -204,8 +199,7 @@ function message_content(App $a) {
'$linkurl' => t('Please enter a link URL:') '$linkurl' => t('Please enter a link URL:')
)); ));
$preselect = (isset($a->argv[2])?array($a->argv[2]):false); $preselect = isset($a->argv[2]) ? array($a->argv[2]) : false;
$prename = $preurl = $preid = ''; $prename = $preurl = $preid = '';
@ -233,18 +227,18 @@ function message_content(App $a) {
$preurl = $r[0]['url']; $preurl = $r[0]['url'];
$preid = $r[0]['id']; $preid = $r[0]['id'];
$preselect = array($preid); $preselect = array($preid);
} else } else {
$preselect = false; $preselect = false;
}
} }
$prefill = (($preselect) ? $prename : ''); $prefill = $preselect ? $prename : '';
// the ugly select box // the ugly select box
$select = contact_select('messageto', 'message-to-select', $preselect, 4, true, false, false, 10);
$select = contact_select('messageto','message-to-select', $preselect, 4, true, false, false, 10);
$tpl = get_markup_template('prv_message.tpl'); $tpl = get_markup_template('prv_message.tpl');
$o .= replace_macros($tpl,array( $o .= replace_macros($tpl, array(
'$header' => t('Send Private Message'), '$header' => t('Send Private Message'),
'$to' => t('To:'), '$to' => t('To:'),
'$showinputs' => 'true', '$showinputs' => 'true',
@ -252,8 +246,8 @@ function message_content(App $a) {
'$autocomp' => $autocomp, '$autocomp' => $autocomp,
'$preid' => $preid, '$preid' => $preid,
'$subject' => t('Subject:'), '$subject' => t('Subject:'),
'$subjtxt' => ((x($_REQUEST,'subject')) ? strip_tags($_REQUEST['subject']) : ''), '$subjtxt' => x($_REQUEST, 'subject') ? strip_tags($_REQUEST['subject']) : '',
'$text' => ((x($_REQUEST,'body')) ? escape_tags(htmlspecialchars($_REQUEST['body'])) : ''), '$text' => x($_REQUEST, 'body') ? escape_tags(htmlspecialchars($_REQUEST['body'])) : '',
'$readonly' => '', '$readonly' => '',
'$yourmessage' => t('Your message:'), '$yourmessage' => t('Your message:'),
'$select' => $select, '$select' => $select,
@ -286,8 +280,8 @@ function message_content(App $a) {
$r = get_messages(local_user(), $a->pager['start'], $a->pager['itemspage']); $r = get_messages(local_user(), $a->pager['start'], $a->pager['itemspage']);
if (! DBM::is_result($r)) { if (!DBM::is_result($r)) {
info( t('No messages.') . EOL); info(t('No messages.') . EOL);
return $o; return $o;
} }
@ -325,8 +319,8 @@ function message_content(App $a) {
intval(local_user()) intval(local_user())
); );
} }
if (! count($messages)) { if (!count($messages)) {
notice( t('Message not available.') . EOL ); notice(t('Message not available.') . EOL);
return $o; return $o;
} }
@ -355,24 +349,24 @@ function message_content(App $a) {
$seen = 0; $seen = 0;
$unknown = false; $unknown = false;
foreach($messages as $message) { foreach ($messages as $message) {
if ($message['unknown']) if ($message['unknown'])
$unknown = true; $unknown = true;
if ($message['from-url'] == $myprofile) { if ($message['from-url'] == $myprofile) {
$from_url = $myprofile; $from_url = $myprofile;
$sparkle = ''; $sparkle = '';
} elseif ($message['contact-id'] != 0) { } elseif ($message['contact-id'] != 0) {
$from_url = 'redir/'.$message['contact-id']; $from_url = 'redir/' . $message['contact-id'];
$sparkle = ' sparkle'; $sparkle = ' sparkle';
} else { } else {
$from_url = $message['from-url']."?zrl=".urlencode($myprofile); $from_url = $message['from-url'] . "?zrl=" . urlencode($myprofile);
$sparkle = ' sparkle'; $sparkle = ' sparkle';
} }
$extracted = item_extract_images($message['body']); $extracted = item_extract_images($message['body']);
if ($extracted['images']) if ($extracted['images']) {
$message['body'] = item_redir_and_replace_images($extracted['body'], $extracted['images'], $message['contact-id']); $message['body'] = item_redir_and_replace_images($extracted['body'], $extracted['images'], $message['contact-id']);
}
$from_name_e = $message['from-name']; $from_name_e = $message['from-name'];
$subject_e = $message['title']; $subject_e = $message['title'];
@ -380,10 +374,11 @@ function message_content(App $a) {
$to_name_e = $message['name']; $to_name_e = $message['name'];
$contact = Contact::getDetailsByURL($message['from-url']); $contact = Contact::getDetailsByURL($message['from-url']);
if (isset($contact["thumb"])) if (isset($contact["thumb"])) {
$from_photo = $contact["thumb"]; $from_photo = $contact["thumb"];
else } else {
$from_photo = $message['from-photo']; $from_photo = $message['from-photo'];
}
$mails[] = array( $mails[] = array(
'id' => $message['id'], 'id' => $message['id'],
@ -396,26 +391,22 @@ function message_content(App $a) {
'body' => $body_e, 'body' => $body_e,
'delete' => t('Delete message'), 'delete' => t('Delete message'),
'to_name' => $to_name_e, 'to_name' => $to_name_e,
'date' => datetime_convert('UTC',date_default_timezone_get(),$message['created'],'D, d M Y - g:i A'), 'date' => datetime_convert('UTC', date_default_timezone_get(), $message['created'], 'D, d M Y - g:i A'),
'ago' => relative_date($message['created']), 'ago' => relative_date($message['created']),
); );
$seen = $message['seen']; $seen = $message['seen'];
} }
$select = $message['name'] . '<input type="hidden" name="messageto" value="' . $contact_id . '" />'; $select = $message['name'] . '<input type="hidden" name="messageto" value="' . $contact_id . '" />';
$parent = '<input type="hidden" name="replyto" value="' . $message['parent-uri'] . '" />'; $parent = '<input type="hidden" name="replyto" value="' . $message['parent-uri'] . '" />';
$tpl = get_markup_template('mail_display.tpl'); $tpl = get_markup_template('mail_display.tpl');
$subjtxt_e = $message['title'];
$o = replace_macros($tpl, array( $o = replace_macros($tpl, array(
'$thread_id' => $a->argv[1], '$thread_id' => $a->argv[1],
'$thread_subject' => $message['title'], '$thread_subject' => $message['title'],
'$thread_seen' => $seen, '$thread_seen' => $seen,
'$delete' => t('Delete conversation'), '$delete' => t('Delete conversation'),
'$canreply' => (($unknown) ? false : '1'), '$canreply' => (($unknown) ? false : '1'),
'$unknown_text' => t("No secure communications available. You <strong>may</strong> be able to respond from the sender's profile page."), '$unknown_text' => t("No secure communications available. You <strong>may</strong> be able to respond from the sender's profile page."),
'$mails' => $mails, '$mails' => $mails,
@ -425,7 +416,7 @@ function message_content(App $a) {
'$to' => t('To:'), '$to' => t('To:'),
'$showinputs' => '', '$showinputs' => '',
'$subject' => t('Subject:'), '$subject' => t('Subject:'),
'$subjtxt' => $subjtxt_e, '$subjtxt' => $message['title'],
'$readonly' => ' readonly="readonly" style="background: #BBBBBB;" ', '$readonly' => ' readonly="readonly" style="background: #BBBBBB;" ',
'$yourmessage' => t('Your message:'), '$yourmessage' => t('Your message:'),
'$text' => '', '$text' => '',
@ -435,14 +426,14 @@ function message_content(App $a) {
'$insert' => t('Insert web link'), '$insert' => t('Insert web link'),
'$submit' => t('Submit'), '$submit' => t('Submit'),
'$wait' => t('Please wait') '$wait' => t('Please wait')
)); ));
return $o; return $o;
} }
} }
function get_messages($user, $lstart, $lend) { function get_messages($user, $lstart, $lend)
{
//TODO: rewritte with a sub-query to get the first message of each private thread with certainty //TODO: rewritte with a sub-query to get the first message of each private thread with certainty
return q("SELECT max(`mail`.`created`) AS `mailcreated`, min(`mail`.`seen`) AS `mailseen`, return q("SELECT max(`mail`.`created`) AS `mailcreated`, min(`mail`.`seen`) AS `mailseen`,
ANY_VALUE(`mail`.`id`) AS `id`, ANY_VALUE(`mail`.`uid`) AS `uid`, ANY_VALUE(`mail`.`guid`) AS `guid`, ANY_VALUE(`mail`.`id`) AS `id`, ANY_VALUE(`mail`.`uid`) AS `uid`, ANY_VALUE(`mail`.`guid`) AS `guid`,
@ -461,33 +452,34 @@ function get_messages($user, $lstart, $lend) {
); );
} }
function render_messages(array $msg, $t) { function render_messages(array $msg, $t)
{
$a = get_app(); $a = get_app();
$tpl = get_markup_template($t); $tpl = get_markup_template($t);
$rslt = ''; $rslt = '';
$myprofile = System::baseUrl().'/profile/' . $a->user['nickname']; $myprofile = System::baseUrl() . '/profile/' . $a->user['nickname'];
foreach($msg as $rr) { foreach ($msg as $rr) {
if ($rr['unknown']) {
if ($rr['unknown']) $participants = t("Unknown sender - %s", $rr['from-name']);
$participants = sprintf( t("Unknown sender - %s"),$rr['from-name']); } elseif (link_compare($rr['from-url'], $myprofile)) {
elseif (link_compare($rr['from-url'], $myprofile)) $participants = t("You and %s", $rr['name']);
$participants = sprintf( t("You and %s"), $rr['name']); } else {
else $participants = t("%s and You", $rr['from-name']);
$participants = sprintf(t("%s and You"), $rr['from-name']); }
$subject_e = (($rr['mailseen']) ? $rr['title'] : '<strong>' . $rr['title'] . '</strong>'); $subject_e = (($rr['mailseen']) ? $rr['title'] : '<strong>' . $rr['title'] . '</strong>');
$body_e = $rr['body']; $body_e = $rr['body'];
$to_name_e = $rr['name']; $to_name_e = $rr['name'];
$contact = Contact::getDetailsByURL($rr['url']); $contact = Contact::getDetailsByURL($rr['url']);
if (isset($contact["thumb"])) if (isset($contact["thumb"])) {
$from_photo = $contact["thumb"]; $from_photo = $contact["thumb"];
else } else {
$from_photo = (($rr['thumb']) ? $rr['thumb'] : $rr['from-photo']); $from_photo = (($rr['thumb']) ? $rr['thumb'] : $rr['from-photo']);
}
$rslt .= replace_macros($tpl, array( $rslt .= replace_macros($tpl, array(
'$id' => $rr['id'], '$id' => $rr['id'],
@ -500,10 +492,10 @@ function render_messages(array $msg, $t) {
'$delete' => t('Delete conversation'), '$delete' => t('Delete conversation'),
'$body' => $body_e, '$body' => $body_e,
'$to_name' => $to_name_e, '$to_name' => $to_name_e,
'$date' => datetime_convert('UTC',date_default_timezone_get(),$rr['mailcreated'], t('D, d M Y - g:i A')), '$date' => datetime_convert('UTC', date_default_timezone_get(), $rr['mailcreated'], t('D, d M Y - g:i A')),
'$ago' => relative_date($rr['mailcreated']), '$ago' => relative_date($rr['mailcreated']),
'$seen' => $rr['mailseen'], '$seen' => $rr['mailseen'],
'$count' => sprintf( tt('%d message', '%d messages', $rr['count']), $rr['count']), '$count' => tt('%d message', '%d messages', $rr['count']),
)); ));
} }

View File

@ -365,7 +365,7 @@ function networkConversation($a, $items, $mode, $update) {
// Set this so that the conversation function can find out contact info for our wall-wall items // Set this so that the conversation function can find out contact info for our wall-wall items
$a->page_contact = $a->contact; $a->page_contact = $a->contact;
$o .= conversation($a, $items, $mode, $update); $o = conversation($a, $items, $mode, $update);
if (!$update) { if (!$update) {
if (PConfig::get(local_user(), 'system', 'infinite_scroll')) { if (PConfig::get(local_user(), 'system', 'infinite_scroll')) {
@ -568,9 +568,9 @@ function networkThreadedView(App $a, $update = 0) {
if ($group) { if ($group) {
if (($t = Contact::getOStatusCountByGroupId($group)) && !PConfig::get(local_user(), 'system', 'nowarn_insecure')) { if (($t = Contact::getOStatusCountByGroupId($group)) && !PConfig::get(local_user(), 'system', 'nowarn_insecure')) {
notice(sprintf(tt("Warning: This group contains %s member from a network that doesn't allow non public messages.", notice(tt("Warning: This group contains %s member from a network that doesn't allow non public messages.",
"Warning: This group contains %s members from a network that doesn't allow non public messages.", "Warning: This group contains %s members from a network that doesn't allow non public messages.",
$t), $t).EOL); $t) . EOL);
notice(t("Messages in this group won't be send to these receivers.").EOL); notice(t("Messages in this group won't be send to these receivers.").EOL);
} }
} }
@ -664,7 +664,7 @@ function networkThreadedView(App $a, $update = 0) {
} }
$o = replace_macros(get_markup_template("section_title.tpl"),array( $o = replace_macros(get_markup_template("section_title.tpl"),array(
'$title' => sprintf(t('Group: %s'), $r['name']) '$title' => t('Group: %s', $r['name'])
)) . $o; )) . $o;
} elseif ($cid) { } elseif ($cid) {
@ -716,13 +716,6 @@ function networkThreadedView(App $a, $update = 0) {
$sql_order = ""; $sql_order = "";
$order_mode = "received"; $order_mode = "received";
if (strlen($file)) {
$sql_post_table .= sprintf("INNER JOIN (SELECT `oid` FROM `term` WHERE `term` = '%s' AND `otype` = %d AND `type` = %d AND `uid` = %d ORDER BY `tid` DESC) AS `term` ON `item`.`id` = `term`.`oid` ",
dbesc(protect_sprintf($file)), intval(TERM_OBJ_POST), intval(TERM_FILE), intval(local_user()));
$sql_order = "`item`.`id`";
$order_mode = "id";
}
if ($conv) { if ($conv) {
$sql_extra3 .= " AND $sql_table.`mention`"; $sql_extra3 .= " AND $sql_table.`mention`";
} }
@ -744,7 +737,7 @@ function networkThreadedView(App $a, $update = 0) {
$sql_order = "$sql_table.$ordering"; $sql_order = "$sql_table.$ordering";
} }
if (($_GET["offset"] != "")) { if (x($_GET, 'offset')) {
$sql_extra3 .= sprintf(" AND $sql_order <= '%s'", dbesc($_GET["offset"])); $sql_extra3 .= sprintf(" AND $sql_order <= '%s'", dbesc($_GET["offset"]));
} }
@ -816,9 +809,10 @@ function networkThreadedView(App $a, $update = 0) {
$parents_str = ''; $parents_str = '';
$date_offset = ""; $date_offset = "";
$items = array();
if (DBM::is_result($r)) { if (DBM::is_result($r)) {
foreach ($r as $rr) { foreach ($r as $rr) {
if (!in_array($rr['item_id'],$parents_arr)) { if (!in_array($rr['item_id'], $parents_arr)) {
$parents_arr[] = $rr['item_id']; $parents_arr[] = $rr['item_id'];
} }
} }
@ -833,12 +827,10 @@ function networkThreadedView(App $a, $update = 0) {
$max_comments = 100; $max_comments = 100;
} }
$items = array();
foreach ($parents_arr AS $parents) { foreach ($parents_arr AS $parents) {
$thread_items = dba::p(item_query()." AND `item`.`uid` = ? $thread_items = dba::p(item_query() . " AND `item`.`uid` = ?
AND `item`.`parent` = ? AND `item`.`parent` = ?
ORDER BY `item`.`commented` DESC LIMIT ".intval($max_comments + 1), ORDER BY `item`.`commented` DESC LIMIT " . intval($max_comments + 1),
local_user(), local_user(),
$parents $parents
); );
@ -847,15 +839,15 @@ function networkThreadedView(App $a, $update = 0) {
$items = array_merge($items, dba::inArray($thread_items)); $items = array_merge($items, dba::inArray($thread_items));
} }
} }
$items = conv_sort($items,$ordering); $items = conv_sort($items, $ordering);
} else {
$items = array();
} }
if ($_GET["offset"] == "") { if (x($_GET, 'offset')) {
$date_offset = $_GET["offset"];
} elseif(count($items)) {
$date_offset = $items[0][$order_mode]; $date_offset = $items[0][$order_mode];
} else { } else {
$date_offset = $_GET["offset"]; $date_offset = '';
} }
$a->page_offset = $date_offset; $a->page_offset = $date_offset;

View File

@ -41,28 +41,25 @@ function nogroup_content(App $a)
$contact_details = Contact::getDetailsByURL($rr['url'], local_user(), $rr); $contact_details = Contact::getDetailsByURL($rr['url'], local_user(), $rr);
$contacts[] = array( $contacts[] = array(
'img_hover' => sprintf(t('Visit %s\'s profile [%s]'), $contact_details['name'], $rr['url']), 'img_hover' => t('Visit %s\'s profile [%s]', $contact_details['name'], $rr['url']),
'edit_hover' => t('Edit contact'), 'edit_hover' => t('Edit contact'),
'photo_menu' => Contact::photoMenu($rr), 'photo_menu' => Contact::photoMenu($rr),
'id' => $rr['id'], 'id' => $rr['id'],
'alt_text' => $alt_text,
'dir_icon' => $dir_icon,
'thumb' => proxy_url($contact_details['thumb'], false, PROXY_SIZE_THUMB), 'thumb' => proxy_url($contact_details['thumb'], false, PROXY_SIZE_THUMB),
'name' => $contact_details['name'], 'name' => $contact_details['name'],
'username' => $contact_details['name'], 'username' => $contact_details['name'],
'details' => $contact_details['location'], 'details' => $contact_details['location'],
'tags' => $contact_details['keywords'], 'tags' => $contact_details['keywords'],
'about' => $contact_details['about'], 'about' => $contact_details['about'],
'sparkle' => $sparkle,
'itemurl' => (($contact_details['addr'] != "") ? $contact_details['addr'] : $rr['url']), 'itemurl' => (($contact_details['addr'] != "") ? $contact_details['addr'] : $rr['url']),
'url' => $rr['url'], 'url' => $rr['url'],
'network' => network_to_name($rr['network'], $url), 'network' => network_to_name($rr['network'], $rr['url']),
); );
} }
} }
$tpl = get_markup_template("nogroup-template.tpl"); $tpl = get_markup_template("nogroup-template.tpl");
$o .= replace_macros( $o = replace_macros(
$tpl, $tpl,
array( array(
'$header' => t('Contacts who are not members of a group'), '$header' => t('Contacts who are not members of a group'),

View File

@ -1,4 +1,5 @@
<?php <?php
/** /**
* @file mod/photo.php * @file mod/photo.php
*/ */
@ -8,7 +9,8 @@ use Friendica\Object\Image;
require_once 'include/security.php'; require_once 'include/security.php';
function photo_init(App $a) { function photo_init(App $a)
{
global $_SERVER; global $_SERVER;
$prvcachecontrol = false; $prvcachecontrol = false;
@ -37,8 +39,8 @@ function photo_init(App $a) {
if (isset($_SERVER['HTTP_IF_MODIFIED_SINCE'])) { if (isset($_SERVER['HTTP_IF_MODIFIED_SINCE'])) {
header('HTTP/1.1 304 Not Modified'); header('HTTP/1.1 304 Not Modified');
header("Last-Modified: " . gmdate("D, d M Y H:i:s", time()) . " GMT"); header("Last-Modified: " . gmdate("D, d M Y H:i:s", time()) . " GMT");
header('Etag: '.$_SERVER['HTTP_IF_NONE_MATCH']); header('Etag: ' . $_SERVER['HTTP_IF_NONE_MATCH']);
header("Expires: " . gmdate("D, d M Y H:i:s", time() + (31536000)) . " GMT"); header("Expires: " . gmdate("D, d M Y H:i:s", time() + (31536000)) . " GMT");
header("Cache-Control: max-age=31536000"); header("Cache-Control: max-age=31536000");
if (function_exists('header_remove')) { if (function_exists('header_remove')) {
header_remove('Last-Modified'); header_remove('Last-Modified');
@ -49,15 +51,11 @@ function photo_init(App $a) {
} }
$default = 'images/person-175.jpg'; $default = 'images/person-175.jpg';
$public = true;
if (isset($type)) { if (isset($type)) {
// Profile photos
/**
* Profile photos
*/
switch ($type) { switch ($type) {
case 'profile': case 'profile':
case 'custom': case 'custom':
$resolution = 4; $resolution = 4;
@ -76,7 +74,7 @@ function photo_init(App $a) {
$uid = str_replace(array('.jpg', '.png', '.gif'), array('', '', ''), $person); $uid = str_replace(array('.jpg', '.png', '.gif'), array('', '', ''), $person);
foreach (Image::supportedTypes() AS $m => $e) { foreach (Image::supportedTypes() AS $m => $e) {
$uid = str_replace('.'.$e, '', $uid); $uid = str_replace('.' . $e, '', $uid);
} }
$r = q("SELECT * FROM `photo` WHERE `scale` = %d AND `uid` = %d AND `profile` = 1 LIMIT 1", $r = q("SELECT * FROM `photo` WHERE `scale` = %d AND `uid` = %d AND `profile` = 1 LIMIT 1",
@ -92,16 +90,12 @@ function photo_init(App $a) {
$mimetype = 'image/jpeg'; $mimetype = 'image/jpeg';
} }
} else { } else {
// Other photos
/**
* Other photos
*/
$resolution = 0; $resolution = 0;
$photo = str_replace(array('.jpg', '.png', '.gif'), array('', '', ''), $photo); $photo = str_replace(array('.jpg', '.png', '.gif'), array('', '', ''), $photo);
foreach (Image::supportedTypes() AS $m => $e) { foreach (Image::supportedTypes() AS $m => $e) {
$photo = str_replace('.'.$e, '', $photo); $photo = str_replace('.' . $e, '', $photo);
} }
if (substr($photo, -2, 1) == '-') { if (substr($photo, -2, 1) == '-') {
@ -115,22 +109,18 @@ function photo_init(App $a) {
intval($resolution) intval($resolution)
); );
if (DBM::is_result($r)) { if (DBM::is_result($r)) {
$sql_extra = permissions_sql($r[0]['uid']); $sql_extra = permissions_sql($r[0]['uid']);
// Now we'll see if we can access the photo // Now we'll see if we can access the photo
$r = q("SELECT * FROM `photo` WHERE `resource-id` = '%s' AND `scale` <= %d $sql_extra ORDER BY scale DESC LIMIT 1", $r = q("SELECT * FROM `photo` WHERE `resource-id` = '%s' AND `scale` <= %d $sql_extra ORDER BY scale DESC LIMIT 1",
dbesc($photo), dbesc($photo),
intval($resolution) intval($resolution)
); );
$public = (DBM::is_result($r)) && ($r[0]['allow_cid'] == '') && ($r[0]['allow_gid'] == '') && ($r[0]['deny_cid'] == '') && ($r[0]['deny_gid'] == '');
if (DBM::is_result($r)) { if (DBM::is_result($r)) {
$resolution = $r[0]['scale']; $resolution = $r[0]['scale'];
$data = $r[0]['data']; $data = $r[0]['data'];
$mimetype = $r[0]['type']; $mimetype = $r[0]['type'];
$public = $r[0]['allow_cid'] == '' && $r[0]['allow_gid'] == '' && $r[0]['deny_cid'] == '' && $r[0]['deny_gid'] == '';
} else { } else {
// The picure exists. We already checked with the first query. // The picure exists. We already checked with the first query.
// obviously, this is not an authorized viev! // obviously, this is not an authorized viev!
@ -145,7 +135,6 @@ function photo_init(App $a) {
if (empty($data)) { if (empty($data)) {
if (isset($resolution)) { if (isset($resolution)) {
switch ($resolution) { switch ($resolution) {
case 4: case 4:
$data = file_get_contents('images/person-175.jpg'); $data = file_get_contents('images/person-175.jpg');
$mimetype = 'image/jpeg'; $mimetype = 'image/jpeg';
@ -167,7 +156,7 @@ function photo_init(App $a) {
} }
// Resize only if its not a GIF and it is supported by the library // Resize only if its not a GIF and it is supported by the library
if (($mimetype != "image/gif") && in_array($mimetype, Image::supportedTypes())) { if ($mimetype != "image/gif" && in_array($mimetype, Image::supportedTypes())) {
$Image = new Image($data, $mimetype); $Image = new Image($data, $mimetype);
if ($Image->isValid()) { if ($Image->isValid()) {
if (isset($customres) && $customres > 0 && $customres < 500) { if (isset($customres) && $customres > 0 && $customres < 500) {
@ -183,36 +172,33 @@ function photo_init(App $a) {
header_remove('pragma'); header_remove('pragma');
} }
header("Content-type: ".$mimetype); header("Content-type: " . $mimetype);
if ($prvcachecontrol) { if ($prvcachecontrol) {
// it is a private photo that they have no permission to view. // it is a private photo that they have no permission to view.
// tell the browser not to cache it, in case they authenticate // tell the browser not to cache it, in case they authenticate
// and subsequently have permission to see it // and subsequently have permission to see it
header("Cache-Control: no-store, no-cache, must-revalidate"); header("Cache-Control: no-store, no-cache, must-revalidate");
} else { } else {
header("Last-Modified: " . gmdate("D, d M Y H:i:s", time()) . " GMT"); header("Last-Modified: " . gmdate("D, d M Y H:i:s", time()) . " GMT");
header('Etag: "'.md5($data).'"'); header('Etag: "' . md5($data) . '"');
header("Expires: " . gmdate("D, d M Y H:i:s", time() + (31536000)) . " GMT"); header("Expires: " . gmdate("D, d M Y H:i:s", time() + (31536000)) . " GMT");
header("Cache-Control: max-age=31536000"); header("Cache-Control: max-age=31536000");
} }
echo $data; echo $data;
// If the photo is public and there is an existing photo directory store the photo there // If the photo is public and there is an existing photo directory store the photo there
if ($public and ($file != "")) { if ($public and $file != '') {
// If the photo path isn't there, try to create it // If the photo path isn't there, try to create it
$basepath = $a->get_basepath(); $basepath = $a->get_basepath();
if (!is_dir($basepath."/photo")) { if (!is_dir($basepath . "/photo")) {
if (is_writable($basepath)) { if (is_writable($basepath)) {
mkdir($basepath."/photo"); mkdir($basepath . "/photo");
} }
} }
if (is_dir($basepath."/photo")) { if (is_dir($basepath . "/photo")) {
file_put_contents($basepath."/photo/".$file, $data); file_put_contents($basepath . "/photo/" . $file, $data);
} }
} }

View File

@ -54,12 +54,12 @@ function photos_init(App $a) {
$tpl = get_markup_template("vcard-widget.tpl"); $tpl = get_markup_template("vcard-widget.tpl");
$vcard_widget .= replace_macros($tpl, array( $vcard_widget = replace_macros($tpl, array(
'$name' => $profile['name'], '$name' => $profile['name'],
'$photo' => $profile['photo'], '$photo' => $profile['photo'],
'$addr' => (($profile['addr'] != "") ? $profile['addr'] : ""), '$addr' => defaults($profile, 'addr', ''),
'$account_type' => $account_type, '$account_type' => $account_type,
'$pdesc' => (($profile['pdesc'] != "") ? $profile['pdesc'] : ""), '$pdesc' => defaults($profile, 'pdesc', ''),
)); ));
$albums = photo_albums($a->data['user']['uid']); $albums = photo_albums($a->data['user']['uid']);
@ -91,18 +91,16 @@ function photos_init(App $a) {
} }
} }
$albums = $ret;
if (local_user() && $a->data['user']['uid'] == local_user()) { if (local_user() && $a->data['user']['uid'] == local_user()) {
$can_post = true; $can_post = true;
} }
if ($albums['success']) { if ($ret['success']) {
$photo_albums_widget = replace_macros(get_markup_template('photo_albums.tpl'), array( $photo_albums_widget = replace_macros(get_markup_template('photo_albums.tpl'), array(
'$nick' => $a->data['user']['nickname'], '$nick' => $a->data['user']['nickname'],
'$title' => t('Photo Albums'), '$title' => t('Photo Albums'),
'$recent' => t('Recent Photos'), '$recent' => t('Recent Photos'),
'$albums' => $albums['albums'], '$albums' => $ret['albums'],
'$baseurl' => System::baseUrl(), '$baseurl' => System::baseUrl(),
'$upload' => array(t('Upload New Photos'), 'photos/' . $a->data['user']['nickname'] . '/upload'), '$upload' => array(t('Upload New Photos'), 'photos/' . $a->data['user']['nickname'] . '/upload'),
'$can_post' => $can_post '$can_post' => $can_post
@ -116,26 +114,20 @@ function photos_init(App $a) {
$a->page['aside'] .= $vcard_widget; $a->page['aside'] .= $vcard_widget;
$a->page['aside'] .= $photo_albums_widget; $a->page['aside'] .= $photo_albums_widget;
$tpl = get_markup_template("photos_head.tpl"); $tpl = get_markup_template("photos_head.tpl");
$a->page['htmlhead'] .= replace_macros($tpl,array( $a->page['htmlhead'] .= replace_macros($tpl,array(
'$ispublic' => t('everybody') '$ispublic' => t('everybody')
)); ));
} }
return; return;
} }
function photos_post(App $a)
{
function photos_post(App $a) {
logger('mod-photos: photos_post: begin' , LOGGER_DEBUG); logger('mod-photos: photos_post: begin' , LOGGER_DEBUG);
logger('mod_photos: REQUEST ' . print_r($_REQUEST, true), LOGGER_DATA);
logger('mod_photos: FILES ' . print_r($_FILES, true), LOGGER_DATA);
logger('mod_photos: REQUEST ' . print_r($_REQUEST,true), LOGGER_DATA);
logger('mod_photos: FILES ' . print_r($_FILES,true), LOGGER_DATA);
$phototypes = Image::supportedTypes(); $phototypes = Image::supportedTypes();
@ -143,14 +135,14 @@ function photos_post(App $a) {
$visitor = 0; $visitor = 0;
$page_owner_uid = $a->data['user']['uid']; $page_owner_uid = $a->data['user']['uid'];
$community_page = (($a->data['user']['page-flags'] == PAGE_COMMUNITY) ? true : false); $community_page = $a->data['user']['page-flags'] == PAGE_COMMUNITY;
if (local_user() && (local_user() == $page_owner_uid)) { if (local_user() && (local_user() == $page_owner_uid)) {
$can_post = true; $can_post = true;
} else { } else {
if ($community_page && remote_user()) { if ($community_page && remote_user()) {
$contact_id = 0; $contact_id = 0;
if (is_array($_SESSION['remote'])) { if (x($_SESSION, 'remote') && is_array($_SESSION['remote'])) {
foreach ($_SESSION['remote'] as $v) { foreach ($_SESSION['remote'] as $v) {
if ($v['uid'] == $page_owner_uid) { if ($v['uid'] == $page_owner_uid) {
$contact_id = $v['cid']; $contact_id = $v['cid'];
@ -159,7 +151,6 @@ function photos_post(App $a) {
} }
} }
if ($contact_id) { if ($contact_id) {
$r = q("SELECT `uid` FROM `contact` WHERE `blocked` = 0 AND `pending` = 0 AND `id` = %d AND `uid` = %d LIMIT 1", $r = q("SELECT `uid` FROM `contact` WHERE `blocked` = 0 AND `pending` = 0 AND `id` = %d AND `uid` = %d LIMIT 1",
intval($contact_id), intval($contact_id),
intval($page_owner_uid) intval($page_owner_uid)
@ -190,8 +181,7 @@ function photos_post(App $a) {
$owner_record = $r[0]; $owner_record = $r[0];
if ($a->argc > 3 && $a->argv[2] === 'album') {
if (($a->argc > 3) && ($a->argv[2] === 'album')) {
$album = hex2bin($a->argv[3]); $album = hex2bin($a->argv[3]);
if ($album === t('Profile Photos') || $album === 'Contact Photos' || $album === t('Contact Photos')) { if ($album === t('Profile Photos') || $album === 'Contact Photos' || $album === t('Contact Photos')) {
@ -214,10 +204,7 @@ function photos_post(App $a) {
goaway($_SESSION['photo_return']); goaway($_SESSION['photo_return']);
} }
/* // RENAME photo album
* RENAME photo album
*/
$newalbum = notags(trim($_POST['albumname'])); $newalbum = notags(trim($_POST['albumname']));
if ($newalbum != $album) { if ($newalbum != $album) {
q("UPDATE `photo` SET `album` = '%s' WHERE `album` = '%s' AND `uid` = %d", q("UPDATE `photo` SET `album` = '%s' WHERE `album` = '%s' AND `uid` = %d",
@ -228,7 +215,7 @@ function photos_post(App $a) {
// Update the photo albums cache // Update the photo albums cache
photo_albums($page_owner_uid, true); photo_albums($page_owner_uid, true);
$newurl = str_replace(bin2hex($album),bin2hex($newalbum),$_SESSION['photo_return']); $newurl = str_replace(bin2hex($album), bin2hex($newalbum), $_SESSION['photo_return']);
goaway($newurl); goaway($newurl);
return; // NOTREACHED return; // NOTREACHED
} }
@ -238,9 +225,8 @@ function photos_post(App $a) {
*/ */
if ($_POST['dropalbum'] == t('Delete Album')) { if ($_POST['dropalbum'] == t('Delete Album')) {
// Check if we should do HTML-based delete confirmation // Check if we should do HTML-based delete confirmation
if ($_REQUEST['confirm']) { if (x($_REQUEST, 'confirm')) {
$drop_url = $a->query_string; $drop_url = $a->query_string;
$extra_inputs = array( $extra_inputs = array(
array('name' => 'albumname', 'value' => $_POST['albumname']), array('name' => 'albumname', 'value' => $_POST['albumname']),
@ -286,14 +272,12 @@ function photos_post(App $a) {
$str_res = implode(',', $res); $str_res = implode(',', $res);
// remove the associated photos // remove the associated photos
q("DELETE FROM `photo` WHERE `resource-id` IN ( $str_res ) AND `uid` = %d", q("DELETE FROM `photo` WHERE `resource-id` IN ( $str_res ) AND `uid` = %d",
intval($page_owner_uid) intval($page_owner_uid)
); );
// find and delete the corresponding item with all the comments and likes/dislikes // find and delete the corresponding item with all the comments and likes/dislikes
$r = q("SELECT `id`, `parent-uri`, `visible` FROM `item` WHERE `resource-id` IN ( $str_res ) AND `uid` = %d",
$r = q("SELECT `parent-uri` FROM `item` WHERE `resource-id` IN ( $str_res ) AND `uid` = %d",
intval($page_owner_uid) intval($page_owner_uid)
); );
if (DBM::is_result($r)) { if (DBM::is_result($r)) {
@ -309,7 +293,6 @@ function photos_post(App $a) {
$drop_id = intval($rr['id']); $drop_id = intval($rr['id']);
// send the notification upstream/downstream as the case may be // send the notification upstream/downstream as the case may be
if ($rr['visible']) { if ($rr['visible']) {
Worker::add(PRIORITY_HIGH, "Notifier", "drop", $drop_id); Worker::add(PRIORITY_HIGH, "Notifier", "drop", $drop_id);
} }
@ -326,16 +309,16 @@ function photos_post(App $a) {
// Check if the user has responded to a delete confirmation query for a single photo // Check if the user has responded to a delete confirmation query for a single photo
if (($a->argc > 2) && $_REQUEST['canceled']) { if ($a->argc > 2 && x($_REQUEST, 'canceled')) {
goaway($_SESSION['photo_return']); goaway($_SESSION['photo_return']);
} }
if (($a->argc > 2) && (x($_POST,'delete')) && ($_POST['delete'] == t('Delete Photo'))) { if ($a->argc > 2 && defaults($_POST, 'delete', '') === t('Delete Photo')) {
// same as above but remove single photo // same as above but remove single photo
// Check if we should do HTML-based delete confirmation // Check if we should do HTML-based delete confirmation
if ($_REQUEST['confirm']) { if (x($_REQUEST, 'confirm')) {
$drop_url = $a->query_string; $drop_url = $a->query_string;
$a->page['content'] = replace_macros(get_markup_template('confirm.tpl'), array( $a->page['content'] = replace_macros(get_markup_template('confirm.tpl'), array(
'$method' => 'post', '$method' => 'post',
@ -367,7 +350,7 @@ function photos_post(App $a) {
intval($page_owner_uid), intval($page_owner_uid),
dbesc($r[0]['resource-id']) dbesc($r[0]['resource-id'])
); );
$i = q("SELECT * FROM `item` WHERE `resource-id` = '%s' AND `uid` = %d LIMIT 1", $i = q("SELECT `id`, `uri`, `visible` FROM `item` WHERE `resource-id` = '%s' AND `uid` = %d LIMIT 1",
dbesc($r[0]['resource-id']), dbesc($r[0]['resource-id']),
intval($page_owner_uid) intval($page_owner_uid)
); );
@ -397,13 +380,12 @@ function photos_post(App $a) {
return; // NOTREACHED return; // NOTREACHED
} }
if (($a->argc > 2) && ((x($_POST,'desc') !== false) || (x($_POST,'newtag') !== false)) || (x($_POST,'albname') !== false)) { if ($a->argc > 2 && (x($_POST, 'desc') !== false || x($_POST, 'newtag') !== false || x($_POST, 'albname') !== false)) {
$desc = x($_POST, 'desc') ? notags(trim($_POST['desc'])) : '';
$desc = (x($_POST,'desc') ? notags(trim($_POST['desc'])) : ''); $rawtags = x($_POST, 'newtag') ? notags(trim($_POST['newtag'])) : '';
$rawtags = (x($_POST,'newtag') ? notags(trim($_POST['newtag'])) : ''); $item_id = x($_POST, 'item_id') ? intval($_POST['item_id']) : 0;
$item_id = (x($_POST,'item_id') ? intval($_POST['item_id']) : 0); $albname = x($_POST, 'albname') ? notags(trim($_POST['albname'])) : '';
$albname = (x($_POST,'albname') ? notags(trim($_POST['albname'])) : ''); $origaname = x($_POST, 'origaname') ? notags(trim($_POST['origaname'])) : '';
$origaname = (x($_POST,'origaname') ? notags(trim($_POST['origaname'])) : '');
$str_group_allow = perms2str($_POST['group_allow']); $str_group_allow = perms2str($_POST['group_allow']);
$str_contact_allow = perms2str($_POST['contact_allow']); $str_contact_allow = perms2str($_POST['contact_allow']);
$str_group_deny = perms2str($_POST['group_deny']); $str_group_deny = perms2str($_POST['group_deny']);
@ -415,9 +397,8 @@ function photos_post(App $a) {
$albname = datetime_convert('UTC',date_default_timezone_get(),'now', 'Y'); $albname = datetime_convert('UTC',date_default_timezone_get(),'now', 'Y');
} }
if (x($_POST,'rotate') !== false &&
if ((x($_POST,'rotate') !== false) && (intval($_POST['rotate']) == 1 || intval($_POST['rotate']) == 2)) {
( (intval($_POST['rotate']) == 1) || (intval($_POST['rotate']) == 2) )) {
logger('rotate'); logger('rotate');
$r = q("SELECT * FROM `photo` WHERE `resource-id` = '%s' AND `uid` = %d AND `scale` = 0 LIMIT 1", $r = q("SELECT * FROM `photo` WHERE `resource-id` = '%s' AND `uid` = %d AND `scale` = 0 LIMIT 1",
@ -503,9 +484,7 @@ function photos_post(App $a) {
} }
if (!$item_id) { if (!$item_id) {
// Create item container // Create item container
$title = ''; $title = '';
$uri = item_new_uri($a->get_hostname(),$page_owner_uid); $uri = item_new_uri($a->get_hostname(),$page_owner_uid);
@ -538,7 +517,6 @@ function photos_post(App $a) {
. '[/url]'; . '[/url]';
$item_id = item_store($arr); $item_id = item_store($arr);
} }
if ($item_id) { if ($item_id) {
@ -553,13 +531,11 @@ function photos_post(App $a) {
} }
if (strlen($rawtags)) { if (strlen($rawtags)) {
$str_tags = ''; $str_tags = '';
$inform = ''; $inform = '';
// if the new tag doesn't have a namespace specifier (@foo or #foo) give it a hashtag // if the new tag doesn't have a namespace specifier (@foo or #foo) give it a hashtag
$x = substr($rawtags, 0, 1);
$x = substr($rawtags,0,1);
if ($x !== '@' && $x !== '#') { if ($x !== '@' && $x !== '#') {
$rawtags = '#' . $rawtags; $rawtags = '#' . $rawtags;
} }
@ -569,10 +545,8 @@ function photos_post(App $a) {
if (count($tags)) { if (count($tags)) {
foreach ($tags as $tag) { foreach ($tags as $tag) {
if (isset($profile)) {
unset($profile);
}
if (strpos($tag, '@') === 0) { if (strpos($tag, '@') === 0) {
$profile = '';
$name = substr($tag,1); $name = substr($tag,1);
if ((strpos($name, '@')) || (strpos($name, 'http://'))) { if ((strpos($name, '@')) || (strpos($name, 'http://'))) {
$newname = $name; $newname = $name;
@ -690,8 +664,7 @@ function photos_post(App $a) {
if (count($taginfo)) { if (count($taginfo)) {
foreach ($taginfo as $tagged) { foreach ($taginfo as $tagged) {
$uri = item_new_uri($a->get_hostname(), $page_owner_uid);
$uri = item_new_uri($a->get_hostname(),$page_owner_uid);
$arr = array(); $arr = array();
$arr['guid'] = get_guid(32); $arr['guid'] = get_guid(32);
@ -746,18 +719,12 @@ function photos_post(App $a) {
} }
/** // default post action - upload a photo
* default post action - upload a photo
*/
call_hooks('photo_post_init', $_POST); call_hooks('photo_post_init', $_POST);
/** // Determine the album to use
* Determine the album to use $album = x($_REQUEST, 'album') ? notags(trim($_REQUEST['album'])) : '';
*/ $newalbum = x($_REQUEST, 'newalbum') ? notags(trim($_REQUEST['newalbum'])) : '';
$album = notags(trim($_REQUEST['album']));
$newalbum = notags(trim($_REQUEST['newalbum']));
logger('mod/photos.php: photos_post(): album= ' . $album . ' newalbum= ' . $newalbum , LOGGER_DEBUG); logger('mod/photos.php: photos_post(): album= ' . $album . ' newalbum= ' . $newalbum , LOGGER_DEBUG);
@ -787,51 +754,85 @@ function photos_post(App $a) {
$visible = 0; $visible = 0;
} }
if (intval($_REQUEST['not_visible']) || $_REQUEST['not_visible'] === 'true') { if (x($_REQUEST, 'not_visible') && $_REQUEST['not_visible'] !== 'false') {
$visible = 0; $visible = 0;
} }
$str_group_allow = perms2str((is_array($_REQUEST['group_allow']) ? $_REQUEST['group_allow'] : explode(',', $_REQUEST['group_allow']))); $group_allow = defaults($_REQUEST, 'group_allow' , []);
$str_contact_allow = perms2str((is_array($_REQUEST['contact_allow']) ? $_REQUEST['contact_allow'] : explode(',', $_REQUEST['contact_allow']))); $contact_allow = defaults($_REQUEST, 'contact_allow', []);
$str_group_deny = perms2str((is_array($_REQUEST['group_deny']) ? $_REQUEST['group_deny'] : explode(',', $_REQUEST['group_deny']))); $group_deny = defaults($_REQUEST, 'group_deny' , []);
$str_contact_deny = perms2str((is_array($_REQUEST['contact_deny']) ? $_REQUEST['contact_deny'] : explode(',', $_REQUEST['contact_deny']))); $contact_deny = defaults($_REQUEST, 'contact_deny' , []);
$str_group_allow = perms2str(is_array($group_allow) ? $group_allow : explode(',', $group_allow));
$str_contact_allow = perms2str(is_array($contact_allow) ? $contact_allow : explode(',', $contact_allow));
$str_group_deny = perms2str(is_array($group_deny) ? $group_deny : explode(',', $group_deny));
$str_contact_deny = perms2str(is_array($contact_deny) ? $contact_deny : explode(',', $contact_deny));
$ret = array('src' => '', 'filename' => '', 'filesize' => 0, 'type' => ''); $ret = array('src' => '', 'filename' => '', 'filesize' => 0, 'type' => '');
call_hooks('photo_post_file',$ret); call_hooks('photo_post_file', $ret);
if (x($ret,'src') && x($ret,'filesize')) { if (x($ret, 'src') && x($ret, 'filesize')) {
$src = $ret['src']; $src = $ret['src'];
$filename = $ret['filename']; $filename = $ret['filename'];
$filesize = $ret['filesize']; $filesize = $ret['filesize'];
$type = $ret['type']; $type = $ret['type'];
$error = UPLOAD_ERR_OK;
} else { } else {
$src = $_FILES['userfile']['tmp_name']; $src = $_FILES['userfile']['tmp_name'];
$filename = basename($_FILES['userfile']['name']); $filename = basename($_FILES['userfile']['name']);
$filesize = intval($_FILES['userfile']['size']); $filesize = intval($_FILES['userfile']['size']);
$type = $_FILES['userfile']['type']; $type = $_FILES['userfile']['type'];
$error = $_FILES['userfile']['error'];
} }
if ($error !== UPLOAD_ERR_OK) {
switch ($error) {
case UPLOAD_ERR_INI_SIZE:
notice(t('Image exceeds size limit of %s', ini_get('upload_max_filesize')) . EOL);
break;
case UPLOAD_ERR_FORM_SIZE:
notice(t('Image exceeds size limit of %s', formatBytes(defaults($_REQUEST, 'MAX_FILE_SIZE', 0))) . EOL);
break;
case UPLOAD_ERR_PARTIAL:
notice(t('Image upload didn\'t complete, please try again') . EOL);
break;
case UPLOAD_ERR_NO_FILE:
notice(t('Image file is missing') . EOL);
break;
case UPLOAD_ERR_NO_TMP_DIR:
case UPLOAD_ERR_CANT_WRITE:
case UPLOAD_ERR_EXTENSION:
notice(t('Server can\'t accept new file upload at this time, please contact your administrator') . EOL);
break;
}
@unlink($src);
$foo = 0;
call_hooks('photo_post_end', $foo);
return;
}
if ($type == "") { if ($type == "") {
$type = Image::guessType($filename); $type = Image::guessType($filename);
} }
logger('photos: upload: received file: ' . $filename . ' as ' . $src . ' ('. $type . ') ' . $filesize . ' bytes', LOGGER_DEBUG); logger('photos: upload: received file: ' . $filename . ' as ' . $src . ' ('. $type . ') ' . $filesize . ' bytes', LOGGER_DEBUG);
$maximagesize = Config::get('system','maximagesize'); $maximagesize = Config::get('system', 'maximagesize');
if ($maximagesize && ($filesize > $maximagesize)) { if ($maximagesize && ($filesize > $maximagesize)) {
notice( sprintf(t('Image exceeds size limit of %s'), formatBytes($maximagesize)) . EOL); notice(t('Image exceeds size limit of %s', formatBytes($maximagesize)) . EOL);
@unlink($src); @unlink($src);
$foo = 0; $foo = 0;
call_hooks('photo_post_end',$foo); call_hooks('photo_post_end', $foo);
return; return;
} }
if (!$filesize) { if (!$filesize) {
notice( t('Image file is empty.') . EOL); notice(t('Image file is empty.') . EOL);
@unlink($src); @unlink($src);
$foo = 0; $foo = 0;
call_hooks('photo_post_end',$foo); call_hooks('photo_post_end', $foo);
return; return;
} }
@ -843,7 +844,7 @@ function photos_post(App $a) {
if (!$Image->isValid()) { if (!$Image->isValid()) {
logger('mod/photos.php: photos_post(): unable to process image' , LOGGER_DEBUG); logger('mod/photos.php: photos_post(): unable to process image' , LOGGER_DEBUG);
notice( t('Unable to process image.') . EOL ); notice(t('Unable to process image.') . EOL);
@unlink($src); @unlink($src);
$foo = 0; $foo = 0;
call_hooks('photo_post_end',$foo); call_hooks('photo_post_end',$foo);
@ -872,7 +873,7 @@ function photos_post(App $a) {
if (!$r) { if (!$r) {
logger('mod/photos.php: photos_post(): image store failed' , LOGGER_DEBUG); logger('mod/photos.php: photos_post(): image store failed' , LOGGER_DEBUG);
notice( t('Image upload failed.') . EOL ); notice(t('Image upload failed.') . EOL);
killme(); killme();
} }
@ -888,23 +889,16 @@ function photos_post(App $a) {
$smallest = 2; $smallest = 2;
} }
$basename = basename($filename);
$uri = item_new_uri($a->get_hostname(), $page_owner_uid); $uri = item_new_uri($a->get_hostname(), $page_owner_uid);
// Create item container // Create item container
$lat = $lon = null; $lat = $lon = null;
if ($exif && $exif['GPS'] && Feature::isEnabled($channel_id, 'photo_location')) {
/// @TODO merge these 2 if() into one? $lat = getGps($exif['GPS']['GPSLatitude'], $exif['GPS']['GPSLatitudeRef']);
if ($exif && $exif['GPS']) { $lon = getGps($exif['GPS']['GPSLongitude'], $exif['GPS']['GPSLongitudeRef']);
if (Feature::isEnabled($channel_id,'photo_location')) {
$lat = getGps($exif['GPS']['GPSLatitude'], $exif['GPS']['GPSLatitudeRef']);
$lon = getGps($exif['GPS']['GPSLongitude'], $exif['GPS']['GPSLongitudeRef']);
}
} }
$arr = array(); $arr = array();
if ($lat && $lon) { if ($lat && $lon) {
$arr['coord'] = $lat . ' ' . $lon; $arr['coord'] = $lat . ' ' . $lon;
} }
@ -946,17 +940,15 @@ function photos_post(App $a) {
call_hooks('photo_post_end',intval($item_id)); call_hooks('photo_post_end',intval($item_id));
/* // addon uploaders should call "killme()" [e.g. exit] within the photo_post_end hook
* addon uploaders should call "killme()" [e.g. exit] within the photo_post_end hook // if they do not wish to be redirected
* if they do not wish to be redirected
*/
goaway($_SESSION['photo_return']); goaway($_SESSION['photo_return']);
// NOTREACHED // NOTREACHED
} }
function photos_content(App $a) { function photos_content(App $a)
{
// URLs: // URLs:
// photos/name // photos/name
// photos/name/upload // photos/name/upload
@ -966,7 +958,6 @@ function photos_content(App $a) {
// photos/name/image/xxxxx // photos/name/image/xxxxx
// photos/name/image/xxxxx/edit // photos/name/image/xxxxx/edit
if (Config::get('system', 'block_public') && !local_user() && !remote_user()) { if (Config::get('system', 'block_public') && !local_user() && !remote_user()) {
notice( t('Public access denied.') . EOL); notice( t('Public access denied.') . EOL);
return; return;
@ -985,10 +976,8 @@ function photos_content(App $a) {
$_SESSION['photo_return'] = $a->cmd; $_SESSION['photo_return'] = $a->cmd;
//
// Parse arguments // Parse arguments
// $datum = null;
if ($a->argc > 3) { if ($a->argc > 3) {
$datatype = $a->argv[2]; $datatype = $a->argv[2];
$datum = $a->argv[3]; $datum = $a->argv[3];
@ -1004,10 +993,7 @@ function photos_content(App $a) {
$cmd = 'view'; $cmd = 'view';
} }
//
// Setup permissions structures // Setup permissions structures
//
$can_post = false; $can_post = false;
$visitor = 0; $visitor = 0;
$contact = null; $contact = null;
@ -1046,8 +1032,9 @@ function photos_content(App $a) {
} }
} }
// perhaps they're visiting - but not a community page, so they wouldn't have write access $groups = [];
// perhaps they're visiting - but not a community page, so they wouldn't have write access
if (remote_user() && !$visitor) { if (remote_user() && !$visitor) {
$contact_id = 0; $contact_id = 0;
if (is_array($_SESSION['remote'])) { if (is_array($_SESSION['remote'])) {
@ -1071,12 +1058,9 @@ function photos_content(App $a) {
} }
} }
/// @TODO merge these 2 if() into one? if (!$remote_contact && local_user()) {
if (!$remote_contact) { $contact_id = $_SESSION['cid'];
if (local_user()) { $contact = $a->contact;
$contact_id = $_SESSION['cid'];
$contact = $a->contact;
}
} }
if ($a->data['user']['hidewall'] && (local_user() != $owner_uid) && !$remote_contact) { if ($a->data['user']['hidewall'] && (local_user() != $owner_uid) && !$remote_contact) {
@ -1084,7 +1068,7 @@ function photos_content(App $a) {
return; return;
} }
$sql_extra = permissions_sql($owner_uid,$remote_contact,$groups); $sql_extra = permissions_sql($owner_uid, $remote_contact, $groups);
$o = ""; $o = "";
@ -1092,23 +1076,17 @@ function photos_content(App $a) {
$is_owner = (local_user() && (local_user() == $owner_uid)); $is_owner = (local_user() && (local_user() == $owner_uid));
$o .= profile_tabs($a, $is_owner, $a->data['user']['nickname']); $o .= profile_tabs($a, $is_owner, $a->data['user']['nickname']);
/** // Display upload form
* Display upload form
*/
if ($datatype === 'upload') { if ($datatype === 'upload') {
if (!$can_post) { if (!$can_post) {
notice(t('Permission denied.')); notice(t('Permission denied.'));
return; return;
} }
$selname = $datum ? hex2bin($datum) : '';
$selname = ($datum ? hex2bin($datum) : '');
$albumselect = ''; $albumselect = '';
$albumselect .= '<option value="" ' . (!$selname ? ' selected="selected" ' : '') . '>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</option>'; $albumselect .= '<option value="" ' . (!$selname ? ' selected="selected" ' : '') . '>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</option>';
if (count($a->data['albums'])) { if (count($a->data['albums'])) {
foreach ($a->data['albums'] as $album) { foreach ($a->data['albums'] as $album) {
@ -1135,31 +1113,8 @@ function photos_content(App $a) {
$usage_message = ''; $usage_message = '';
// Private/public post links for the non-JS ACL form
$private_post = 1;
if ($_REQUEST['public']) {
$private_post = 0;
}
$query_str = $a->query_string;
if (strpos($query_str, 'public=1') !== false) {
$query_str = str_replace(array('?public=1', '&public=1'), array('', ''), $query_str);
}
/*
* I think $a->query_string may never have ? in it, but I could be wrong
* It looks like it's from the index.php?q=[etc] rewrite that the web
* server does, which converts any ? to &, e.g. suggest&ignore=61 for suggest?ignore=61
*/
if (strpos($query_str, '?') === false) {
$public_post_link = '?public=1';
} else {
$public_post_link = '&public=1';
}
$tpl = get_markup_template('photos_upload.tpl'); $tpl = get_markup_template('photos_upload.tpl');
$albumselect_e = $albumselect;
$aclselect_e = ($visitor ? '' : populate_acl($a->user)); $aclselect_e = ($visitor ? '' : populate_acl($a->user));
$o .= replace_macros($tpl,array( $o .= replace_macros($tpl,array(
@ -1170,7 +1125,7 @@ function photos_content(App $a) {
'$newalbum' => t('New album name: '), '$newalbum' => t('New album name: '),
'$existalbumtext' => t('or existing album name: '), '$existalbumtext' => t('or existing album name: '),
'$nosharetext' => t('Do not show a status post for this upload'), '$nosharetext' => t('Do not show a status post for this upload'),
'$albumselect' => $albumselect_e, '$albumselect' => $albumselect,
'$permissions' => t('Permissions'), '$permissions' => t('Permissions'),
'$aclselect' => $aclselect_e, '$aclselect' => $aclselect_e,
'$alt_uploader' => $ret['addon_text'], '$alt_uploader' => $ret['addon_text'],
@ -1182,23 +1137,14 @@ function photos_content(App $a) {
'$acl_data' => construct_acl_data($a, $a->user), // For non-Javascript ACL selector '$acl_data' => construct_acl_data($a, $a->user), // For non-Javascript ACL selector
'$group_perms' => t('Show to Groups'), '$group_perms' => t('Show to Groups'),
'$contact_perms' => t('Show to Contacts'), '$contact_perms' => t('Show to Contacts'),
'$private' => t('Private Photo'), '$return_path' => $a->query_string,
'$public' => t('Public Photo'),
'$is_private' => $private_post,
'$return_path' => $query_str,
'$public_link' => $public_post_link,
)); ));
return $o; return $o;
} }
/* // Display a single photo album
* Display a single photo album
*/
if ($datatype === 'album') { if ($datatype === 'album') {
$album = hex2bin($datum); $album = hex2bin($datum);
$r = q("SELECT `resource-id`, max(`scale`) AS `scale` FROM `photo` WHERE `uid` = %d AND `album` = '%s' $r = q("SELECT `resource-id`, max(`scale`) AS `scale` FROM `photo` WHERE `uid` = %d AND `album` = '%s'
@ -1212,7 +1158,8 @@ function photos_content(App $a) {
} }
/// @TODO I have seen this many times, maybe generalize it script-wide and encapsulate it? /// @TODO I have seen this many times, maybe generalize it script-wide and encapsulate it?
if ($_GET['order'] === 'posted') { $order_field = defaults($_GET, 'order', '');
if ($order_field === 'posted') {
$order = 'ASC'; $order = 'ASC';
} else { } else {
$order = 'DESC'; $order = 'DESC';
@ -1253,7 +1200,7 @@ function photos_content(App $a) {
} }
} }
if ($_GET['order'] === 'posted') { if ($order_field === 'posted') {
$order = array(t('Show Newest First'), 'photos/' . $a->data['user']['nickname'] . '/album/' . bin2hex($album)); $order = array(t('Show Newest First'), 'photos/' . $a->data['user']['nickname'] . '/album/' . bin2hex($album));
} else { } else {
$order = array(t('Show Oldest First'), 'photos/' . $a->data['user']['nickname'] . '/album/' . bin2hex($album) . '?f=&order=posted'); $order = array(t('Show Oldest First'), 'photos/' . $a->data['user']['nickname'] . '/album/' . bin2hex($album) . '?f=&order=posted');
@ -1261,7 +1208,7 @@ function photos_content(App $a) {
$photos = array(); $photos = array();
if (DBM::is_result($r)) if (DBM::is_result($r)) {
// "Twist" is only used for the duepunto theme with style "slackr" // "Twist" is only used for the duepunto theme with style "slackr"
$twist = false; $twist = false;
foreach ($r as $rr) { foreach ($r as $rr) {
@ -1276,14 +1223,15 @@ function photos_content(App $a) {
'id' => $rr['id'], 'id' => $rr['id'],
'twist' => ' ' . ($twist ? 'rotleft' : 'rotright') . rand(2,4), 'twist' => ' ' . ($twist ? 'rotleft' : 'rotright') . rand(2,4),
'link' => 'photos/' . $a->data['user']['nickname'] . '/image/' . $rr['resource-id'] 'link' => 'photos/' . $a->data['user']['nickname'] . '/image/' . $rr['resource-id']
. (($_GET['order'] === 'posted') ? '?f=&order=posted' : ''), . ($order_field === 'posted' ? '?f=&order=posted' : ''),
'title' => t('View Photo'), 'title' => t('View Photo'),
'src' => 'photo/' . $rr['resource-id'] . '-' . $rr['scale'] . '.' .$ext, 'src' => 'photo/' . $rr['resource-id'] . '-' . $rr['scale'] . '.' .$ext,
'alt' => $imgalt_e, 'alt' => $imgalt_e,
'desc'=> $desc_e, 'desc'=> $desc_e,
'ext' => $ext, 'ext' => $ext,
'hash'=> $rr['resource_id'], 'hash'=> $rr['resource-id'],
); );
}
} }
$tpl = get_markup_template('photo_album.tpl'); $tpl = get_markup_template('photo_album.tpl');
@ -1301,14 +1249,9 @@ function photos_content(App $a) {
} }
/* // Display one photo
* Display one photo
*/
if ($datatype === 'image') { if ($datatype === 'image') {
//$o = '';
// fetch image, item containing image, then comments // fetch image, item containing image, then comments
$ph = q("SELECT * FROM `photo` WHERE `uid` = %d AND `resource-id` = '%s' $ph = q("SELECT * FROM `photo` WHERE `uid` = %d AND `resource-id` = '%s'
$sql_extra ORDER BY `scale` ASC ", $sql_extra ORDER BY `scale` ASC ",
intval($owner_uid), intval($owner_uid),
@ -1336,7 +1279,8 @@ function photos_content(App $a) {
// The query leads to a really intense used index. // The query leads to a really intense used index.
// By now we hide it if someone wants to. // By now we hide it if someone wants to.
if (!Config::get('system', 'no_count', false)) { if (!Config::get('system', 'no_count', false)) {
if ($_GET['order'] === 'posted') { $order_field = defaults($_GET, 'order', '');
if ($order_field === 'posted') {
$order = 'ASC'; $order = 'ASC';
} else { } else {
$order = 'DESC'; $order = 'DESC';
@ -1363,8 +1307,8 @@ function photos_content(App $a) {
} }
} }
$edit_suffix = ((($cmd === 'edit') && $can_post) ? '/edit' : ''); $edit_suffix = ((($cmd === 'edit') && $can_post) ? '/edit' : '');
$prevlink = 'photos/' . $a->data['user']['nickname'] . '/image/' . $prvnxt[$prv]['resource-id'] . $edit_suffix . (($_GET['order'] === 'posted') ? '?f=&order=posted' : ''); $prevlink = 'photos/' . $a->data['user']['nickname'] . '/image/' . $prvnxt[$prv]['resource-id'] . $edit_suffix . ($order_field === 'posted' ? '?f=&order=posted' : '');
$nextlink = 'photos/' . $a->data['user']['nickname'] . '/image/' . $prvnxt[$nxt]['resource-id'] . $edit_suffix . (($_GET['order'] === 'posted') ? '?f=&order=posted' : ''); $nextlink = 'photos/' . $a->data['user']['nickname'] . '/image/' . $prvnxt[$nxt]['resource-id'] . $edit_suffix . ($order_field === 'posted' ? '?f=&order=posted' : '');
} }
} }
@ -1438,6 +1382,7 @@ function photos_content(App $a) {
); );
$map = null; $map = null;
$link_item = [];
if (DBM::is_result($linked_items)) { if (DBM::is_result($linked_items)) {
$link_item = $linked_items[0]; $link_item = $linked_items[0];
@ -1511,31 +1456,9 @@ function photos_content(App $a) {
$edit = Null; $edit = Null;
if (($cmd === 'edit') && $can_post) { if ($cmd === 'edit' && $can_post) {
$edit_tpl = get_markup_template('photo_edit.tpl'); $edit_tpl = get_markup_template('photo_edit.tpl');
// Private/public post links for the non-JS ACL form
$private_post = 1;
if ($_REQUEST['public']) {
$private_post = 0;
}
$query_str = $a->query_string;
if (strpos($query_str, 'public=1') !== false) {
$query_str = str_replace(array('?public=1', '&public=1'), array('', ''), $query_str);
}
/*
* I think $a->query_string may never have ? in it, but I could be wrong
* It looks like it's from the index.php?q=[etc] rewrite that the web
* server does, which converts any ? to &, e.g. suggest&ignore=61 for suggest?ignore=61
*/
if (strpos($query_str, '?') === false) {
$public_post_link = '?public=1';
} else {
$public_post_link = '&public=1';
}
$album_e = $ph[0]['album']; $album_e = $ph[0]['album'];
$caption_e = $ph[0]['desc']; $caption_e = $ph[0]['desc'];
$aclselect_e = populate_acl($ph[0]); $aclselect_e = populate_acl($ph[0]);
@ -1554,7 +1477,7 @@ function photos_content(App $a) {
'$permissions' => t('Permissions'), '$permissions' => t('Permissions'),
'$aclselect' => $aclselect_e, '$aclselect' => $aclselect_e,
'$item_id' => (count($linked_items) ? $link_item['id'] : 0), '$item_id' => defaults($link_item, 'id', 0),
'$submit' => t('Submit'), '$submit' => t('Submit'),
'$delete' => t('Delete Photo'), '$delete' => t('Delete Photo'),
@ -1562,25 +1485,24 @@ function photos_content(App $a) {
'$acl_data' => construct_acl_data($a, $ph[0]), // For non-Javascript ACL selector '$acl_data' => construct_acl_data($a, $ph[0]), // For non-Javascript ACL selector
'$group_perms' => t('Show to Groups'), '$group_perms' => t('Show to Groups'),
'$contact_perms' => t('Show to Contacts'), '$contact_perms' => t('Show to Contacts'),
'$private' => t('Private photo'), '$return_path' => $a->query_string,
'$public' => t('Public photo'),
'$is_private' => $private_post,
'$return_path' => $query_str,
'$public_link' => $public_post_link,
)); ));
} }
if (count($linked_items)) { $like = '';
$dislike = '';
$likebuttons = '';
$comments = '';
$paginate = '';
$responses = '';
if (count($linked_items)) {
$cmnt_tpl = get_markup_template('comment_item.tpl'); $cmnt_tpl = get_markup_template('comment_item.tpl');
$tpl = get_markup_template('photo_item.tpl'); $tpl = get_markup_template('photo_item.tpl');
$return_url = $a->cmd; $return_url = $a->cmd;
$like_tpl = get_markup_template('like_noshare.tpl');
$likebuttons = '';
if ($can_post || can_write_wall($a, $owner_uid)) { if ($can_post || can_write_wall($a, $owner_uid)) {
$like_tpl = get_markup_template('like_noshare.tpl');
$likebuttons = replace_macros($like_tpl, array( $likebuttons = replace_macros($like_tpl, array(
'$id' => $link_item['id'], '$id' => $link_item['id'],
'$likethis' => t("I like this \x28toggle\x29"), '$likethis' => t("I like this \x28toggle\x29"),
@ -1590,7 +1512,6 @@ function photos_content(App $a) {
)); ));
} }
$comments = '';
if (!DBM::is_result($r)) { if (!DBM::is_result($r)) {
if (($can_post || can_write_wall($a, $owner_uid)) && $link_item['last-child']) { if (($can_post || can_write_wall($a, $owner_uid)) && $link_item['last-child']) {
$comments .= replace_macros($cmnt_tpl, array( $comments .= replace_macros($cmnt_tpl, array(
@ -1613,12 +1534,6 @@ function photos_content(App $a) {
} }
} }
$alike = array();
$dlike = array();
$like = '';
$dislike = '';
$conv_responses = array( $conv_responses = array(
'like' => array('title' => t('Likes','title')),'dislike' => array('title' => t('Dislikes','title')), 'like' => array('title' => t('Likes','title')),'dislike' => array('title' => t('Dislikes','title')),
'attendyes' => array('title' => t('Attending','title')), 'attendno' => array('title' => t('Not attending','title')), 'attendmaybe' => array('title' => t('Might attend','title')) 'attendyes' => array('title' => t('Attending','title')), 'attendno' => array('title' => t('Not attending','title')), 'attendmaybe' => array('title' => t('Might attend','title'))
@ -1626,13 +1541,16 @@ function photos_content(App $a) {
// display comments // display comments
if (DBM::is_result($r)) { if (DBM::is_result($r)) {
foreach ($r as $item) { foreach ($r as $item) {
builtin_activity_puller($item, $conv_responses); builtin_activity_puller($item, $conv_responses);
} }
$like = (x($conv_responses['like'], $link_item['uri']) ? format_like($conv_responses['like'][$link_item['uri']], $conv_responses['like'][$link_item['uri'] . '-l'], 'like',$link_item['id']) : ''); if (x($conv_responses['like'], $link_item['uri'])) {
$dislike = (x($conv_responses['dislike'], $link_item['uri']) ? format_like($conv_responses['dislike'][$link_item['uri']], $conv_responses['dislike'][$link_item['uri'] . '-l'], 'dislike',$link_item['id']) : ''); $like = format_like($conv_responses['like'][$link_item['uri']], $conv_responses['like'][$link_item['uri'] . '-l'], 'like', $link_item['id']);
}
if (x($conv_responses['dislike'], $link_item['uri'])) {
$dislike = format_like($conv_responses['dislike'][$link_item['uri']], $conv_responses['dislike'][$link_item['uri'] . '-l'], 'dislike', $link_item['id']);
}
if (($can_post || can_write_wall($a, $owner_uid)) && $link_item['last-child']) { if (($can_post || can_write_wall($a, $owner_uid)) && $link_item['last-child']) {
$comments .= replace_macros($cmnt_tpl,array( $comments .= replace_macros($cmnt_tpl,array(
@ -1654,18 +1572,17 @@ function photos_content(App $a) {
)); ));
} }
foreach ($r as $item) { foreach ($r as $item) {
$comment = ''; $comment = '';
$template = $tpl; $template = $tpl;
$sparkle = ''; $sparkle = '';
if ((activity_match($item['verb'], ACTIVITY_LIKE) || activity_match($item['verb'], ACTIVITY_DISLIKE)) && ($item['id'] != $item['parent'])) if ((activity_match($item['verb'], ACTIVITY_LIKE) || activity_match($item['verb'], ACTIVITY_DISLIKE)) && ($item['id'] != $item['parent'])) {
continue; continue;
}
$redirect_url = 'redir/' . $item['cid']; $redirect_url = 'redir/' . $item['cid'];
if (local_user() && ($item['contact-uid'] == local_user()) if (local_user() && ($item['contact-uid'] == local_user())
&& ($item['network'] == NETWORK_DFRN) && !$item['self']) { && ($item['network'] == NETWORK_DFRN) && !$item['self']) {
$profile_url = $redirect_url; $profile_url = $redirect_url;
@ -1729,40 +1646,32 @@ function photos_content(App $a) {
} }
} }
} }
$response_verbs = array('like');
if (Feature::isEnabled($owner_uid, 'dislike')) {
$response_verbs[] = 'dislike';
}
$responses = get_responses($conv_responses, $response_verbs, '', $link_item);
$paginate = paginate($a); $paginate = paginate($a);
} }
$response_verbs = array('like');
if (Feature::isEnabled($owner_uid, 'dislike')) {
$response_verbs[] = 'dislike';
}
$responses = get_responses($conv_responses,$response_verbs, '', $link_item);
$photo_tpl = get_markup_template('photo_view.tpl'); $photo_tpl = get_markup_template('photo_view.tpl');
$album_e = array($album_link, $ph[0]['album']);
$tags_e = $tags;
$like_e = $like;
$dislike_e = $dislike;
$o .= replace_macros($photo_tpl, array( $o .= replace_macros($photo_tpl, array(
'$id' => $ph[0]['id'], '$id' => $ph[0]['id'],
'$album' => $album_e, '$album' => [$album_link, $ph[0]['album']],
'$tools' => $tools, '$tools' => $tools,
'$lock' => $lock, '$lock' => $lock,
'$photo' => $photo, '$photo' => $photo,
'$prevlink' => $prevlink, '$prevlink' => $prevlink,
'$nextlink' => $nextlink, '$nextlink' => $nextlink,
'$desc' => $ph[0]['desc'], '$desc' => $ph[0]['desc'],
'$tags' => $tags_e, '$tags' => $tags,
'$edit' => $edit, '$edit' => $edit,
'$map' => $map, '$map' => $map,
'$map_text' => t('Map'), '$map_text' => t('Map'),
'$likebuttons' => $likebuttons, '$likebuttons' => $likebuttons,
'$like' => $like_e, '$like' => $like,
'$dislike' => $dikslike_e, '$dislike' => $dislike,
'responses' => $responses, 'responses' => $responses,
'$comments' => $comments, '$comments' => $comments,
'$paginate' => $paginate, '$paginate' => $paginate,

View File

@ -164,8 +164,8 @@ function ping_init(App $a)
if (intval(Feature::isEnabled(local_user(), 'forumlist_widget'))) { if (intval(Feature::isEnabled(local_user(), 'forumlist_widget'))) {
$forum_counts = ForumManager::countUnseenItems(); $forum_counts = ForumManager::countUnseenItems();
if (DBM::is_result($forums_counts)) { if (DBM::is_result($forum_counts)) {
foreach ($forums_counts as $forum_count) { foreach ($forum_counts as $forum_count) {
if ($forum_count['count'] > 0) { if ($forum_count['count'] > 0) {
$forums_unseen[] = $forum_count; $forums_unseen[] = $forum_count;
} }
@ -490,8 +490,10 @@ function ping_get_notifications($uid)
$notification["href"] = System::baseUrl() . "/notify/view/" . $notification["id"]; $notification["href"] = System::baseUrl() . "/notify/view/" . $notification["id"];
if ($notification["visible"] && !$notification["spam"] if ($notification["visible"]
&& !$notification["deleted"] && !is_array($result[$notification["parent"]]) && !$notification["spam"]
&& !$notification["deleted"]
&& !(x($result, $notification["parent"]) && is_array($result[$notification["parent"]]))
) { ) {
// Should we condense the notifications or show them all? // Should we condense the notifications or show them all?
if (PConfig::get(local_user(), 'system', 'detailed_notif')) { if (PConfig::get(local_user(), 'system', 'detailed_notif')) {

View File

@ -39,8 +39,8 @@ function profile_init(App $a)
profile_load($a, $which, $profile); profile_load($a, $which, $profile);
$blocked = Config::get('system', 'block_public') && !local_user() && !remote_user(); $blocked = !local_user() && !remote_user() && Config::get('system', 'block_public');
$userblock = $a->profile['hidewall'] && !local_user() && !remote_user(); $userblock = !local_user() && !remote_user() && $a->profile['hidewall'];
if (x($a->profile, 'page-flags') && $a->profile['page-flags'] == PAGE_COMMUNITY) { if (x($a->profile, 'page-flags') && $a->profile['page-flags'] == PAGE_COMMUNITY) {
$a->page['htmlhead'] .= '<meta name="friendica.community" content="true" />'; $a->page['htmlhead'] .= '<meta name="friendica.community" content="true" />';
@ -51,13 +51,13 @@ function profile_init(App $a)
} }
if (x($a->profile, 'openid')) { if (x($a->profile, 'openid')) {
$delegate = ((strstr($a->profile['openid'], '://')) ? $a->profile['openid'] : 'https://' . $a->profile['openid']); $delegate = strstr($a->profile['openid'], '://') ? $a->profile['openid'] : 'https://' . $a->profile['openid'];
$a->page['htmlhead'] .= '<link rel="openid.delegate" href="' . $delegate . '" />' . "\r\n"; $a->page['htmlhead'] .= '<link rel="openid.delegate" href="' . $delegate . '" />' . "\r\n";
} }
// site block // site block
if (!$blocked && !$userblock) { if (!$blocked && !$userblock) {
$keywords = x($a->profile, 'pub_keywords') ? $a->profile['pub_keywords'] : ''; $keywords = str_replace(array('#', ',', ' ', ',,'), array('', ' ', ',', ','), defaults($a->profile, 'pub_keywords', ''));
$keywords = str_replace(array('#', ',', ' ', ',,'), array('', ' ', ',', ','), $keywords);
if (strlen($keywords)) { if (strlen($keywords)) {
$a->page['htmlhead'] .= '<meta name="keywords" content="' . $keywords . '" />' . "\r\n"; $a->page['htmlhead'] .= '<meta name="keywords" content="' . $keywords . '" />' . "\r\n";
} }
@ -75,8 +75,7 @@ function profile_init(App $a)
foreach ($dfrn_pages as $dfrn) { foreach ($dfrn_pages as $dfrn) {
$a->page['htmlhead'] .= "<link rel=\"dfrn-{$dfrn}\" href=\"" . System::baseUrl() . "/dfrn_{$dfrn}/{$which}\" />\r\n"; $a->page['htmlhead'] .= "<link rel=\"dfrn-{$dfrn}\" href=\"" . System::baseUrl() . "/dfrn_{$dfrn}/{$which}\" />\r\n";
} }
$a->page['htmlhead'] .= '<link rel="dfrn-poco" href="' . System::baseUrl() . "/poco/{$which}\" />\r\n";
$a->page['htmlhead'] .= "<link rel=\"dfrn-poco\" href=\"" . System::baseUrl() . "/poco/{$which}\" />\r\n";
} }
function profile_content(App $a, $update = 0) function profile_content(App $a, $update = 0)
@ -98,12 +97,12 @@ function profile_content(App $a, $update = 0)
} }
if (!x($category)) { if (!x($category)) {
$category = x($_GET, 'category') ? $_GET['category'] : ''; $category = defaults($_GET, 'category', '');
} }
$hashtags = x($_GET, 'tag') ? $_GET['tag'] : ''; $hashtags = defaults($_GET, 'tag', '');
if (Config::get('system', 'block_public') && (!local_user()) && (!remote_user())) { if (Config::get('system', 'block_public') && !local_user() && !remote_user()) {
return login(); return login();
} }
@ -130,7 +129,7 @@ function profile_content(App $a, $update = 0)
$contact_id = 0; $contact_id = 0;
if (is_array($_SESSION['remote'])) { if (x($_SESSION, 'remote') && is_array($_SESSION['remote'])) {
foreach ($_SESSION['remote'] as $v) { foreach ($_SESSION['remote'] as $v) {
if ($v['uid'] == $a->profile['profile_uid']) { if ($v['uid'] == $a->profile['profile_uid']) {
$contact_id = $v['cid']; $contact_id = $v['cid'];
@ -158,15 +157,16 @@ function profile_content(App $a, $update = 0)
} }
} }
$is_owner = local_user() && local_user() == $a->profile['profile_uid']; $is_owner = local_user() == $a->profile['profile_uid'];
$last_updated_key = "profile:" . $a->profile['profile_uid'] . ":" . local_user() . ":" . remote_user(); $last_updated_key = "profile:" . $a->profile['profile_uid'] . ":" . local_user() . ":" . remote_user();
if ($a->profile['hidewall'] && !$is_owner && !$remote_contact) { if (x($a->profile, 'hidewall') && !$is_owner && !$remote_contact) {
notice(t('Access to this profile has been restricted.') . EOL); notice(t('Access to this profile has been restricted.') . EOL);
return; return;
} }
if (!$update) { if (!$update) {
$tab = false;
if (x($_GET, 'tab')) { if (x($_GET, 'tab')) {
$tab = notags(trim($_GET['tab'])); $tab = notags(trim($_GET['tab']));
} }
@ -181,12 +181,12 @@ function profile_content(App $a, $update = 0)
$o .= common_friends_visitor_widget($a->profile['profile_uid']); $o .= common_friends_visitor_widget($a->profile['profile_uid']);
if (x($_SESSION, 'new_member') && $_SESSION['new_member'] && $is_owner) { if (x($_SESSION, 'new_member') && $is_owner) {
$o .= '<a href="newmember" id="newmember-tips" style="font-size: 1.2em;"><b>' . t('Tips for New Members') . '</b></a>' . EOL; $o .= '<a href="newmember" id="newmember-tips" style="font-size: 1.2em;"><b>' . t('Tips for New Members') . '</b></a>' . EOL;
} }
$commpage = (($a->profile['page-flags'] == PAGE_COMMUNITY) ? true : false); $commpage = $a->profile['page-flags'] == PAGE_COMMUNITY;
$commvisitor = (($commpage && $remote_contact == true) ? true : false); $commvisitor = $commpage && $remote_contact;
$a->page['aside'] .= posted_date_widget(System::baseUrl(true) . '/profile/' . $a->profile['nickname'], $a->profile['profile_uid'], true); $a->page['aside'] .= posted_date_widget(System::baseUrl(true) . '/profile/' . $a->profile['nickname'], $a->profile['profile_uid'], true);
$a->page['aside'] .= categories_widget(System::baseUrl(true) . '/profile/' . $a->profile['nickname'], (x($category) ? xmlify($category) : '')); $a->page['aside'] .= categories_widget(System::baseUrl(true) . '/profile/' . $a->profile['nickname'], (x($category) ? xmlify($category) : ''));
@ -195,8 +195,8 @@ function profile_content(App $a, $update = 0)
if (can_write_wall($a, $a->profile['profile_uid'])) { if (can_write_wall($a, $a->profile['profile_uid'])) {
$x = array( $x = array(
'is_owner' => $is_owner, 'is_owner' => $is_owner,
'allow_location' => ((($is_owner || $commvisitor) && $a->profile['allow_location']) ? true : false), 'allow_location' => ($is_owner || $commvisitor) && $a->profile['allow_location'],
'default_location' => (($is_owner) ? $a->user['default-location'] : ''), 'default_location' => $is_owner ? $a->user['default-location'] : '',
'nickname' => $a->profile['nickname'], 'nickname' => $a->profile['nickname'],
'lockstate' => is_array($a->user) 'lockstate' => is_array($a->user)
&& (strlen($a->user['allow_cid']) && (strlen($a->user['allow_cid'])
@ -215,8 +215,10 @@ function profile_content(App $a, $update = 0)
} }
} }
// Get permissions SQL - if $remote_contact is true, our remote user has been pre-verified and we already have fetched his/her groups // Get permissions SQL - if $remote_contact is true, our remote user has been pre-verified and we already have fetched his/her groups
$sql_extra = item_permissions_sql($a->profile['profile_uid'], $remote_contact, $groups); $sql_extra = item_permissions_sql($a->profile['profile_uid'], $remote_contact, $groups);
$sql_extra2 = '';
if ($update) { if ($update) {
$last_updated = (x($_SESSION['last_updated'], $last_updated_key) ? $_SESSION['last_updated'][$last_updated_key] : 0); $last_updated = (x($_SESSION['last_updated'], $last_updated_key) ? $_SESSION['last_updated'][$last_updated_key] : 0);
@ -254,7 +256,6 @@ function profile_content(App $a, $update = 0)
if (x($category)) { if (x($category)) {
$sql_post_table = sprintf("INNER JOIN (SELECT `oid` FROM `term` WHERE `term` = '%s' AND `otype` = %d AND `type` = %d AND `uid` = %d ORDER BY `tid` DESC) AS `term` ON `item`.`id` = `term`.`oid` ", $sql_post_table = sprintf("INNER JOIN (SELECT `oid` FROM `term` WHERE `term` = '%s' AND `otype` = %d AND `type` = %d AND `uid` = %d ORDER BY `tid` DESC) AS `term` ON `item`.`id` = `term`.`oid` ",
dbesc(protect_sprintf($category)), intval(TERM_OBJ_POST), intval(TERM_CATEGORY), intval($a->profile['profile_uid'])); dbesc(protect_sprintf($category)), intval(TERM_OBJ_POST), intval(TERM_CATEGORY), intval($a->profile['profile_uid']));
//$sql_extra .= protect_sprintf(file_tag_file_query('item',$category,'category'));
} }
if (x($hashtags)) { if (x($hashtags)) {
@ -274,7 +275,8 @@ function profile_content(App $a, $update = 0)
$r = q("SELECT `uid` FROM `user` WHERE `uid` = %d AND `page-flags` IN (%d, %d)", $r = q("SELECT `uid` FROM `user` WHERE `uid` = %d AND `page-flags` IN (%d, %d)",
intval($a->profile['profile_uid']), intval($a->profile['profile_uid']),
intval(PAGE_COMMUNITY), intval(PAGE_COMMUNITY),
intval(PAGE_PRVGROUP)); intval(PAGE_PRVGROUP)
);
if (!DBM::is_result($r)) { if (!DBM::is_result($r)) {
$sql_extra3 = sprintf(" AND `thread`.`contact-id` = %d ", intval(intval($a->profile['contact_id']))); $sql_extra3 = sprintf(" AND `thread`.`contact-id` = %d ", intval(intval($a->profile['contact_id'])));
@ -283,11 +285,9 @@ function profile_content(App $a, $update = 0)
// check if we serve a mobile device and get the user settings // check if we serve a mobile device and get the user settings
// accordingly // accordingly
if ($a->is_mobile) { if ($a->is_mobile) {
$itemspage_network = PConfig::get(local_user(), 'system', 'itemspage_mobile_network'); $itemspage_network = PConfig::get(local_user(), 'system', 'itemspage_mobile_network', 10);
$itemspage_network = ((intval($itemspage_network)) ? $itemspage_network : 10);
} else { } else {
$itemspage_network = PConfig::get(local_user(), 'system', 'itemspage_network'); $itemspage_network = PConfig::get(local_user(), 'system', 'itemspage_network', 20);
$itemspage_network = ((intval($itemspage_network)) ? $itemspage_network : 20);
} }
// now that we have the user settings, see if the theme forces // now that we have the user settings, see if the theme forces

View File

@ -7,11 +7,11 @@ use Friendica\Core\Worker;
use Friendica\Database\DBM; use Friendica\Database\DBM;
use Friendica\Model\Contact; use Friendica\Model\Contact;
require_once('include/items.php'); require_once 'include/items.php';
require_once('include/acl_selectors.php'); require_once 'include/acl_selectors.php';
require_once('include/bbcode.php'); require_once 'include/bbcode.php';
require_once('include/security.php'); require_once 'include/security.php';
require_once('include/redir.php'); require_once 'include/redir.php';
function videos_init(App $a) { function videos_init(App $a) {
@ -44,12 +44,12 @@ function videos_init(App $a) {
$tpl = get_markup_template("vcard-widget.tpl"); $tpl = get_markup_template("vcard-widget.tpl");
$vcard_widget .= replace_macros($tpl, array( $vcard_widget = replace_macros($tpl, array(
'$name' => $profile['name'], '$name' => $profile['name'],
'$photo' => $profile['photo'], '$photo' => $profile['photo'],
'$addr' => (($profile['addr'] != "") ? $profile['addr'] : ""), '$addr' => defaults($profile, 'addr', ''),
'$account_type' => $account_type, '$account_type' => $account_type,
'$pdesc' => (($profile['pdesc'] != "") ? $profile['pdesc'] : ""), '$pdesc' => defaults($profile, 'pdesc', ''),
)); ));
@ -280,8 +280,9 @@ function videos_content(App $a) {
} }
} }
// perhaps they're visiting - but not a community page, so they wouldn't have write access $groups = [];
// perhaps they're visiting - but not a community page, so they wouldn't have write access
if(remote_user() && (! $visitor)) { if(remote_user() && (! $visitor)) {
$contact_id = 0; $contact_id = 0;
if(is_array($_SESSION['remote'])) { if(is_array($_SESSION['remote'])) {
@ -317,7 +318,7 @@ function videos_content(App $a) {
return; return;
} }
$sql_extra = permissions_sql($owner_uid,$remote_contact,$groups); $sql_extra = permissions_sql($owner_uid, $remote_contact, $groups);
$o = ""; $o = "";

View File

@ -37,6 +37,7 @@ class App {
public $query_string; public $query_string;
public $config; public $config;
public $page; public $page;
public $page_offset;
public $profile; public $profile;
public $profile_uid; public $profile_uid;
public $user; public $user;

View File

@ -100,7 +100,7 @@ class OEmbed
$txt = trim($txt); $txt = trim($txt);
if ($txt[0] != "{") { if (!$txt || $txt[0] != "{") {
$txt = '{"type":"error"}'; $txt = '{"type":"error"}';
} else { //save in cache } else { //save in cache
$j = json_decode($txt); $j = json_decode($txt);

View File

@ -606,6 +606,7 @@ class Worker
$exponent = 3; $exponent = 3;
$slope = $maxworkers / pow($maxsysload, $exponent); $slope = $maxworkers / pow($maxsysload, $exponent);
$queues = ceil($slope * pow(max(0, $maxsysload - $load), $exponent)); $queues = ceil($slope * pow(max(0, $maxsysload - $load), $exponent));
$processlist = '';
if (Config::get('system', 'worker_debug')) { if (Config::get('system', 'worker_debug')) {
// Create a list of queue entries grouped by their priority // Create a list of queue entries grouped by their priority

View File

@ -662,7 +662,7 @@ class Contact extends BaseObject
if (!DBM::is_result($contact)) { if (!DBM::is_result($contact)) {
// The link could be provided as http although we stored it as https // The link could be provided as http although we stored it as https
$ssl_url = str_replace('http://', 'https://', $url); $ssl_url = str_replace('http://', 'https://', $url);
$r = dba::select('contact', array('id', 'avatar-date'), array('`alias` IN (?, ?, ?) AND `uid` = ?', $url, normalise_link($url), $ssl_url, $uid), array('limit' => 1)); $r = dba::select('contact', array('id', 'avatar', 'avatar-date'), array('`alias` IN (?, ?, ?) AND `uid` = ?', $url, normalise_link($url), $ssl_url, $uid), array('limit' => 1));
$contact = dba::fetch($r); $contact = dba::fetch($r);
dba::close($r); dba::close($r);
} }
@ -674,7 +674,7 @@ class Contact extends BaseObject
$update_contact = ($contact['avatar-date'] < datetime_convert('', '', 'now -7 days')); $update_contact = ($contact['avatar-date'] < datetime_convert('', '', 'now -7 days'));
// We force the update if the avatar is empty // We force the update if the avatar is empty
if ($contact['avatar'] == '') { if (!x($contact, 'avatar')) {
$update_contact = true; $update_contact = true;
} }

View File

@ -330,7 +330,7 @@ class Probe
$data["url"] = $uri; $data["url"] = $uri;
} }
if ($data["photo"] != "") { if (x($data, "photo")) {
$data["baseurl"] = matching_url(normalise_link($data["baseurl"]), normalise_link($data["photo"])); $data["baseurl"] = matching_url(normalise_link($data["baseurl"]), normalise_link($data["photo"]));
} else { } else {
$data["photo"] = System::baseUrl().'/images/person-175.jpg'; $data["photo"] = System::baseUrl().'/images/person-175.jpg';
@ -341,7 +341,7 @@ class Probe
$data["name"] = $data["nick"]; $data["name"] = $data["nick"];
} }
if ($data["name"] == "") { if (!x($data, "name")) {
$data["name"] = $data["url"]; $data["name"] = $data["url"];
} }
} }

View File

@ -1,7 +1,9 @@
<?php <?php
/** /**
* @file src/Object/Post.php * @file src/Object/Post.php
*/ */
namespace Friendica\Object; namespace Friendica\Object;
use Friendica\BaseObject; use Friendica\BaseObject;
@ -52,9 +54,9 @@ class Post extends BaseObject
$this->data = $data; $this->data = $data;
$this->setTemplate('wall'); $this->setTemplate('wall');
$this->toplevel = ($this->getId() == $this->getDataValue('parent')); $this->toplevel = $this->getId() == $this->getDataValue('parent');
if (is_array($_SESSION['remote'])) { if (x($_SESSION, 'remote') && is_array($_SESSION['remote'])) {
foreach ($_SESSION['remote'] as $visitor) { foreach ($_SESSION['remote'] as $visitor) {
if ($visitor['cid'] == $this->getDataValue('contact-id')) { if ($visitor['cid'] == $this->getDataValue('contact-id')) {
$this->visiting = true; $this->visiting = true;
@ -63,9 +65,7 @@ class Post extends BaseObject
} }
} }
$this->writable = ($this->getDataValue('writable') || $this->getDataValue('self')); $this->writable = $this->getDataValue('writable') || $this->getDataValue('self');
$ssl_state = ((local_user()) ? true : false);
$this->redirect_url = 'redir/' . $this->getDataValue('cid'); $this->redirect_url = 'redir/' . $this->getDataValue('cid');
if (!$this->isToplevel()) { if (!$this->isToplevel()) {
@ -75,12 +75,10 @@ class Post extends BaseObject
// Prepare the children // Prepare the children
if (count($data['children'])) { if (count($data['children'])) {
foreach ($data['children'] as $item) { foreach ($data['children'] as $item) {
/* // Only add will be displayed
* Only add will be displayed
*/
if ($item['network'] === NETWORK_MAIL && local_user() != $item['uid']) { if ($item['network'] === NETWORK_MAIL && local_user() != $item['uid']) {
continue; continue;
} elseif (! visible_activity($item)) { } elseif (!visible_activity($item)) {
continue; continue;
} }
@ -145,13 +143,13 @@ class Post extends BaseObject
|| strlen($item['deny_cid']) || strlen($item['deny_gid'])))) || strlen($item['deny_cid']) || strlen($item['deny_gid']))))
? t('Private Message') ? t('Private Message')
: false); : false);
$shareable = ((in_array($conv->getProfileOwner(), [0, local_user()]) && ($item['private'] != 1)) ? true : false); $shareable = in_array($conv->getProfileOwner(), [0, local_user()]) && $item['private'] != 1;
if (local_user() && link_compare($a->contact['url'], $item['author-link'])) { if (local_user() && link_compare($a->contact['url'], $item['author-link'])) {
if ($item["event-id"] != 0) { if ($item["event-id"] != 0) {
$edpost = array("events/event/".$item['event-id'], t("Edit")); $edpost = array("events/event/" . $item['event-id'], t("Edit"));
} else { } else {
$edpost = array("editpost/".$item['id'], t("Edit")); $edpost = array("editpost/" . $item['id'], t("Edit"));
} }
} else { } else {
$edpost = false; $edpost = false;
@ -170,9 +168,9 @@ class Post extends BaseObject
$filer = (($conv->getProfileOwner() == local_user()) ? t("save to folder") : false); $filer = (($conv->getProfileOwner() == local_user()) ? t("save to folder") : false);
$diff_author = ((link_compare($item['url'], $item['author-link'])) ? false : true); $diff_author = !link_compare($item['url'], $item['author-link']);
$profile_name = htmlentities(((strlen($item['author-name'])) && $diff_author) ? $item['author-name'] : $item['name']); $profile_name = htmlentities(((strlen($item['author-name'])) && $diff_author) ? $item['author-name'] : $item['name']);
if ($item['author-link'] && (! $item['author-name'])) { if ($item['author-link'] && (!$item['author-name'])) {
$profile_name = $item['author-link']; $profile_name = $item['author-link'];
} }
@ -210,39 +208,25 @@ class Post extends BaseObject
call_hooks('render_location', $locate); call_hooks('render_location', $locate);
$location = ((strlen($locate['html'])) ? $locate['html'] : render_location_dummy($locate)); $location = ((strlen($locate['html'])) ? $locate['html'] : render_location_dummy($locate));
$tags=array();
$hashtags = array();
$mentions = array();
/*foreach(explode(',',$item['tag']) as $tag){
$tag = trim($tag);
if ($tag!="") {
$t = bbcode($tag);
$tags[] = $t;
if($t[0] == '#')
$hashtags[] = $t;
elseif($t[0] == '@')
$mentions[] = $t;
}
}*/
// process action responses - e.g. like/dislike/attend/agree/whatever // process action responses - e.g. like/dislike/attend/agree/whatever
$response_verbs = array('like', 'dislike'); $response_verbs = array('like', 'dislike');
$isevent = false;
$attend = [];
if ($item['object-type'] === ACTIVITY_OBJ_EVENT) { if ($item['object-type'] === ACTIVITY_OBJ_EVENT) {
$response_verbs[] = 'attendyes'; $response_verbs[] = 'attendyes';
$response_verbs[] = 'attendno'; $response_verbs[] = 'attendno';
$response_verbs[] = 'attendmaybe'; $response_verbs[] = 'attendmaybe';
if ($conv->isWritable()) { if ($conv->isWritable()) {
$isevent = true; $isevent = true;
$attend = array( t('I will attend'), t('I will not attend'), t('I might attend')); $attend = array(t('I will attend'), t('I will not attend'), t('I might attend'));
} }
} }
$responses = get_responses($conv_responses, $response_verbs, $this, $item); $responses = get_responses($conv_responses, $response_verbs, $this, $item);
foreach ($response_verbs as $value => $verbs) { foreach ($response_verbs as $value => $verbs) {
$responses[$verbs]['output'] = ((x($conv_responses[$verbs], $item['uri'])) ? format_like($conv_responses[$verbs][$item['uri']], $conv_responses[$verbs][$item['uri'] . '-l'], $verbs, $item['uri']) : ''); $responses[$verbs]['output'] = x($conv_responses[$verbs], $item['uri']) ? format_like($conv_responses[$verbs][$item['uri']], $conv_responses[$verbs][$item['uri'] . '-l'], $verbs, $item['uri']) : '';
} }
/* /*
@ -256,6 +240,8 @@ class Post extends BaseObject
$osparkle = ' sparkle'; $osparkle = ' sparkle';
} }
$tagger = '';
if ($this->isToplevel()) { if ($this->isToplevel()) {
if ($conv->getProfileOwner() == local_user()) { if ($conv->getProfileOwner() == local_user()) {
$isstarred = (($item['starred']) ? "starred" : "unstarred"); $isstarred = (($item['starred']) ? "starred" : "unstarred");
@ -264,9 +250,9 @@ class Post extends BaseObject
'do' => t("add star"), 'do' => t("add star"),
'undo' => t("remove star"), 'undo' => t("remove star"),
'toggle' => t("toggle star status"), 'toggle' => t("toggle star status"),
'classdo' => (($item['starred']) ? "hidden" : ""), 'classdo' => $item['starred'] ? "hidden" : "",
'classundo' => (($item['starred']) ? "" : "hidden"), 'classundo' => $item['starred'] ? "" : "hidden",
'starred' => t('starred'), 'starred' => t('starred'),
); );
$r = dba::select('thread', array('ignored'), array('uid' => $item['uid'], 'iid' => $item['id']), array('limit' => 1)); $r = dba::select('thread', array('ignored'), array('uid' => $item['uid'], 'iid' => $item['id']), array('limit' => 1));
if (DBM::is_result($r)) { if (DBM::is_result($r)) {
@ -274,13 +260,12 @@ class Post extends BaseObject
'do' => t("ignore thread"), 'do' => t("ignore thread"),
'undo' => t("unignore thread"), 'undo' => t("unignore thread"),
'toggle' => t("toggle ignore status"), 'toggle' => t("toggle ignore status"),
'classdo' => (($r['ignored']) ? "hidden" : ""), 'classdo' => $r['ignored'] ? "hidden" : "",
'classundo' => (($r['ignored']) ? "" : "hidden"), 'classundo' => $r['ignored'] ? "" : "hidden",
'ignored' => t('ignored'), 'ignored' => t('ignored'),
); );
} }
$tagger = '';
if (Feature::isEnabled($conv->getProfileOwner(), 'commtag')) { if (Feature::isEnabled($conv->getProfileOwner(), 'commtag')) {
$tagger = array( $tagger = array(
'add' => t("add tag"), 'add' => t("add tag"),
@ -294,11 +279,11 @@ class Post extends BaseObject
if ($conv->isWritable()) { if ($conv->isWritable()) {
$buttons = array( $buttons = array(
'like' => array( t("I like this \x28toggle\x29"), t("like")), 'like' => array(t("I like this \x28toggle\x29"), t("like")),
'dislike' => ((Feature::isEnabled($conv->getProfileOwner(), 'dislike')) ? array( t("I don't like this \x28toggle\x29"), t("dislike")) : ''), 'dislike' => Feature::isEnabled($conv->getProfileOwner(), 'dislike') ? array(t("I don't like this \x28toggle\x29"), t("dislike")) : '',
); );
if ($shareable) { if ($shareable) {
$buttons['share'] = array( t('Share this'), t('share')); $buttons['share'] = array(t('Share this'), t('share'));
} }
} }
@ -322,10 +307,10 @@ class Post extends BaseObject
$owner_name_e = $this->getOwnerName(); $owner_name_e = $this->getOwnerName();
// Disable features that aren't available in several networks // Disable features that aren't available in several networks
/// @todo Add NETWORK_DIASPORA when it will pass this information /// @todo Add NETWORK_DIASPORA when it will pass this information
if (!in_array($item["item_network"], array(NETWORK_DFRN)) && isset($buttons["dislike"])) { if (!in_array($item["item_network"], array(NETWORK_DFRN)) && isset($buttons["dislike"])) {
unset($buttons["dislike"], $isevent); unset($buttons["dislike"]);
$isevent = false;
$tagger = ''; $tagger = '';
} }
@ -355,8 +340,8 @@ class Post extends BaseObject
'guid' => urlencode($item['guid']), 'guid' => urlencode($item['guid']),
'isevent' => $isevent, 'isevent' => $isevent,
'attend' => $attend, 'attend' => $attend,
'linktitle' => sprintf(t('View %s\'s profile @ %s'), $profile_name, ((strlen($item['author-link'])) ? $item['author-link'] : $item['url'])), 'linktitle' => t('View %s\'s profile @ %s', $profile_name, defaults($item, 'author-link', $item['url'])),
'olinktitle' => sprintf(t('View %s\'s profile @ %s'), htmlentities($this->getOwnerName()), ((strlen($item['owner-link'])) ? $item['owner-link'] : $item['url'])), 'olinktitle' => t('View %s\'s profile @ %s', htmlentities($this->getOwnerName()), defaults($item, 'owner-link', $item['url'])),
'to' => t('to'), 'to' => t('to'),
'via' => t('via'), 'via' => t('via'),
'wall' => t('Wall-to-Wall'), 'wall' => t('Wall-to-Wall'),
@ -369,7 +354,7 @@ class Post extends BaseObject
'sparkle' => $sparkle, 'sparkle' => $sparkle,
'title' => $title_e, 'title' => $title_e,
'localtime' => datetime_convert('UTC', date_default_timezone_get(), $item['created'], 'r'), 'localtime' => datetime_convert('UTC', date_default_timezone_get(), $item['created'], 'r'),
'ago' => (($item['app']) ? sprintf(t('%s from %s'), relative_date($item['created']), $item['app']) : relative_date($item['created'])), 'ago' => $item['app'] ? t('%s from %s', relative_date($item['created']), $item['app']) : relative_date($item['created']),
'app' => $item['app'], 'app' => $item['app'],
'created' => relative_date($item['created']), 'created' => relative_date($item['created']),
'lock' => $lock, 'lock' => $lock,
@ -380,12 +365,12 @@ class Post extends BaseObject
'owner_photo' => $a->remove_baseurl(proxy_url($item['owner-thumb'], false, PROXY_SIZE_THUMB)), 'owner_photo' => $a->remove_baseurl(proxy_url($item['owner-thumb'], false, PROXY_SIZE_THUMB)),
'owner_name' => htmlentities($owner_name_e), 'owner_name' => htmlentities($owner_name_e),
'plink' => get_plink($item), 'plink' => get_plink($item),
'edpost' => ((Feature::isEnabled($conv->getProfileOwner(), 'edit_posts')) ? $edpost : ''), 'edpost' => Feature::isEnabled($conv->getProfileOwner(), 'edit_posts') ? $edpost : '',
'isstarred' => $isstarred, 'isstarred' => $isstarred,
'star' => ((Feature::isEnabled($conv->getProfileOwner(), 'star_posts')) ? $star : ''), 'star' => Feature::isEnabled($conv->getProfileOwner(), 'star_posts') ? $star : '',
'ignore' => ((Feature::isEnabled($conv->getProfileOwner(), 'ignore_posts')) ? $ignore : ''), 'ignore' => Feature::isEnabled($conv->getProfileOwner(), 'ignore_posts') ? $ignore : '',
'tagger' => $tagger, 'tagger' => $tagger,
'filer' => ((Feature::isEnabled($conv->getProfileOwner(), 'filing')) ? $filer : ''), 'filer' => Feature::isEnabled($conv->getProfileOwner(), 'filing') ? $filer : '',
'drop' => $drop, 'drop' => $drop,
'vote' => $buttons, 'vote' => $buttons,
'like' => $responses['like']['output'], 'like' => $responses['like']['output'],
@ -393,7 +378,7 @@ class Post extends BaseObject
'responses' => $responses, 'responses' => $responses,
'switchcomment' => t('Comment'), 'switchcomment' => t('Comment'),
'comment' => $comment, 'comment' => $comment,
'previewing' => ($conv->isPreview() ? ' preview ' : ''), 'previewing' => $conv->isPreview() ? ' preview ' : '',
'wait' => t('Please wait'), 'wait' => t('Please wait'),
'thread_level' => $thread_level, 'thread_level' => $thread_level,
'edited' => $edited, 'edited' => $edited,
@ -419,7 +404,7 @@ class Post extends BaseObject
// Collapse // Collapse
if (($nb_children > 2) || ($thread_level > 1)) { if (($nb_children > 2) || ($thread_level > 1)) {
$result['children'][0]['comment_firstcollapsed'] = true; $result['children'][0]['comment_firstcollapsed'] = true;
$result['children'][0]['num_comments'] = sprintf(tt('%d comment', '%d comments', $total_children), $total_children); $result['children'][0]['num_comments'] = tt('%d comment', '%d comments', $total_children);
$result['children'][0]['hidden_comments_num'] = $total_children; $result['children'][0]['hidden_comments_num'] = $total_children;
$result['children'][0]['hidden_comments_text'] = tt('comment', 'comments', $total_children); $result['children'][0]['hidden_comments_text'] = tt('comment', 'comments', $total_children);
$result['children'][0]['hide_text'] = t('show more'); $result['children'][0]['hide_text'] = t('show more');
@ -480,7 +465,7 @@ class Post extends BaseObject
logger('[ERROR] Post::addChild : Item has no ID!!', LOGGER_DEBUG); logger('[ERROR] Post::addChild : Item has no ID!!', LOGGER_DEBUG);
return false; return false;
} elseif ($this->getChild($item->getId())) { } elseif ($this->getChild($item->getId())) {
logger('[WARN] Post::addChild : Item already exists ('. $item->getId() .').', LOGGER_DEBUG); logger('[WARN] Post::addChild : Item already exists (' . $item->getId() . ').', LOGGER_DEBUG);
return false; return false;
} }
/* /*
@ -574,7 +559,7 @@ class Post extends BaseObject
return true; return true;
} }
} }
logger('[WARN] Item::removeChild : Item is not a child ('. $id .').', LOGGER_DEBUG); logger('[WARN] Item::removeChild : Item is not a child (' . $id . ').', LOGGER_DEBUG);
return false; return false;
} }
@ -657,7 +642,7 @@ class Post extends BaseObject
private function setTemplate($name) private function setTemplate($name)
{ {
if (!x($this->available_templates, $name)) { if (!x($this->available_templates, $name)) {
logger('[ERROR] Item::setTemplate : Template not available ("'. $name .'").', LOGGER_DEBUG); logger('[ERROR] Item::setTemplate : Template not available ("' . $name . '").', LOGGER_DEBUG);
return false; return false;
} }
@ -696,7 +681,6 @@ class Post extends BaseObject
if ($conv) { if ($conv) {
// This will allow us to comment on wall-to-wall items owned by our friends // This will allow us to comment on wall-to-wall items owned by our friends
// and community forums even if somebody else wrote the post. // and community forums even if somebody else wrote the post.
// bug #517 - this fixes for conversation owner // bug #517 - this fixes for conversation owner
if ($conv->getMode() == 'profile' && $conv->getProfileOwner() == local_user()) { if ($conv->getMode() == 'profile' && $conv->getProfileOwner() == local_user()) {
return true; return true;
@ -750,14 +734,13 @@ class Post extends BaseObject
$comment_box = ''; $comment_box = '';
$conv = $this->getThread(); $conv = $this->getThread();
$template = get_markup_template($this->getCommentBoxTemplate());
$ww = ''; $ww = '';
if (($conv->getMode() === 'network') && $this->isWallToWall()) { if (($conv->getMode() === 'network') && $this->isWallToWall()) {
$ww = 'ww'; $ww = 'ww';
} }
if ($conv->isWritable() && $this->isWritable()) { if ($conv->isWritable() && $this->isWritable()) {
$qc = $qcomment = null; $qc = $qcomment = null;
/* /*
* Hmmm, code depending on the presence of a particular plugin? * Hmmm, code depending on the presence of a particular plugin?
@ -768,18 +751,16 @@ class Post extends BaseObject
$qcomment = (($qc) ? explode("\n", $qc) : null); $qcomment = (($qc) ? explode("\n", $qc) : null);
} }
$comment_box = replace_macros( $template = get_markup_template($this->getCommentBoxTemplate());
$template, $comment_box = replace_macros($template, array(
array(
'$return_path' => $a->query_string, '$return_path' => $a->query_string,
'$threaded' => $this->isThreaded(), '$threaded' => $this->isThreaded(),
// '$jsreload' => (($conv->getMode() === 'display') ? $_SESSION['return_url'] : ''),
'$jsreload' => '', '$jsreload' => '',
'$type' => (($conv->getMode() === 'profile') ? 'wall-comment' : 'net-comment'), '$type' => $conv->getMode() === 'profile' ? 'wall-comment' : 'net-comment',
'$id' => $this->getId(), '$id' => $this->getId(),
'$parent' => $this->getId(), '$parent' => $this->getId(),
'$qcomment' => $qcomment, '$qcomment' => $qcomment,
'$profile_uid' => $conv->getProfileOwner(), '$profile_uid' => $conv->getProfileOwner(),
'$mylink' => $a->remove_baseurl($a->contact['url']), '$mylink' => $a->remove_baseurl($a->contact['url']),
'$mytitle' => t('This is you'), '$mytitle' => t('This is you'),
'$myphoto' => $a->remove_baseurl($a->contact['thumb']), '$myphoto' => $a->remove_baseurl($a->contact['thumb']),
@ -796,9 +777,9 @@ class Post extends BaseObject
'$preview' => ((Feature::isEnabled($conv->getProfileOwner(), 'preview')) ? t('Preview') : ''), '$preview' => ((Feature::isEnabled($conv->getProfileOwner(), 'preview')) ? t('Preview') : ''),
'$indent' => $indent, '$indent' => $indent,
'$sourceapp' => t($a->sourcename), '$sourceapp' => t($a->sourcename),
'$ww' => (($conv->getMode() === 'network') ? $ww : ''), '$ww' => $conv->getMode() === 'network' ? $ww : '',
'$rand_num' => random_digits(12)) '$rand_num' => random_digits(12)
); ));
} }
return $comment_box; return $comment_box;
@ -839,14 +820,13 @@ class Post extends BaseObject
$alias_linkmatch = (($this->getDataValue('alias')) && link_compare($this->getDataValue('alias'), $this->getDataValue('author-link'))); $alias_linkmatch = (($this->getDataValue('alias')) && link_compare($this->getDataValue('alias'), $this->getDataValue('author-link')));
$owner_namematch = (($this->getDataValue('owner-name')) && $this->getDataValue('owner-name') == $this->getDataValue('author-name')); $owner_namematch = (($this->getDataValue('owner-name')) && $this->getDataValue('owner-name') == $this->getDataValue('author-name'));
if ((! $owner_linkmatch) && (! $alias_linkmatch) && (! $owner_namematch)) { if ((!$owner_linkmatch) && (!$alias_linkmatch) && (!$owner_namematch)) {
// The author url doesn't match the owner (typically the contact) // The author url doesn't match the owner (typically the contact)
// and also doesn't match the contact alias. // and also doesn't match the contact alias.
// The name match is a hack to catch several weird cases where URLs are // The name match is a hack to catch several weird cases where URLs are
// all over the park. It can be tricked, but this prevents you from // all over the park. It can be tricked, but this prevents you from
// seeing "Bob Smith to Bob Smith via Wall-to-wall" and you know darn // seeing "Bob Smith to Bob Smith via Wall-to-wall" and you know darn
// well that it's the same Bob Smith. // well that it's the same Bob Smith.
// But it could be somebody else with the same name. It just isn't highly likely. // But it could be somebody else with the same name. It just isn't highly likely.
@ -854,8 +834,8 @@ class Post extends BaseObject
$this->owner_name = $this->getDataValue('owner-name'); $this->owner_name = $this->getDataValue('owner-name');
$this->wall_to_wall = true; $this->wall_to_wall = true;
// If it is our contact, use a friendly redirect link // If it is our contact, use a friendly redirect link
if ((link_compare($this->getDataValue('owner-link'), $this->getDataValue('url'))) if ($this->getDataValue('network') === NETWORK_DFRN
&& ($this->getDataValue('network') === NETWORK_DFRN) && link_compare($this->getDataValue('owner-link'), $this->getDataValue('url'))
) { ) {
$this->owner_url = $this->getRedirectUrl(); $this->owner_url = $this->getRedirectUrl();
} else { } else {

View File

@ -5,7 +5,6 @@
<img src="{{$avatar}}" height="32" width="32"> <img src="{{$avatar}}" height="32" width="32">
</a> </a>
{{/if}} {{/if}}
{{*<span><a href="{{$profile}}" target="_blank" class="shared-wall-item-name">{{$author}}</a> wrote the following <a href="{{$link}}" target="_blank">post</a>{{$reldate}}:</span>*}}
<div><a href="{{$profile}}" target="_blank" class="shared-wall-item-name"><span class="shared-author">{{$author}}</span></a></div> <div><a href="{{$profile}}" target="_blank" class="shared-wall-item-name"><span class="shared-author">{{$author}}</span></a></div>
<div class="shared-wall-item-ago"><small><a href="{{$link}}" target="_blank"><span class="shared-time">{{$posted}}</a></a></small></div> <div class="shared-wall-item-ago"><small><a href="{{$link}}" target="_blank"><span class="shared-time">{{$posted}}</a></a></small></div>
</div> </div>

View File

@ -8,7 +8,7 @@ $schemecss = "";
$schemecssfile = false; $schemecssfile = false;
$scheme_modified = 0; $scheme_modified = 0;
if (! $a->install) { if ($a->module !== 'install') {
// Get the UID of the profile owner. // Get the UID of the profile owner.
$uid = get_theme_uid(); $uid = get_theme_uid();
if ($uid) { if ($uid) {
@ -57,7 +57,7 @@ if (! $a->install) {
// Setting $schema to '' wasn't working for some reason, so we'll check it's // Setting $schema to '' wasn't working for some reason, so we'll check it's
// not --- like the mobile theme does instead. // not --- like the mobile theme does instead.
// Allow layouts to over-ride the schema. // Allow layouts to over-ride the schema.
if ($_REQUEST['schema']) { if (x($_REQUEST, 'schema')) {
$schema = $_REQUEST['schema']; $schema = $_REQUEST['schema'];
} }
@ -103,7 +103,7 @@ $contentbg_transp = ((isset($contentbg_transp) && $contentbg_transp != "") ? $co
// Calculate some colors in dependance of existing colors. // Calculate some colors in dependance of existing colors.
// Some colors are calculated to don't have too many selection // Some colors are calculated to don't have too many selection
// fields in the theme settings. // fields in the theme settings.
if (! $menu_background_hover_color) { if (!isset($menu_background_hover_color)) {
$mbhc = new Color($nav_bg); $mbhc = new Color($nav_bg);
$mcolor = $mbhc->getHex(); $mcolor = $mbhc->getHex();
@ -115,7 +115,7 @@ if (! $menu_background_hover_color) {
$menu_background_hover_color = '#' . $mbhc->lighten(5); $menu_background_hover_color = '#' . $mbhc->lighten(5);
} }
} }
if (! $nav_icon_hover_color) { if (!isset($nav_icon_hover_color)) {
$nihc = new Color($nav_bg); $nihc = new Color($nav_bg);
if ($nihc->isLight()) { if ($nihc->isLight()) {
@ -124,7 +124,7 @@ if (! $nav_icon_hover_color) {
$nav_icon_hover_color = '#' . $nihc->lighten(10); $nav_icon_hover_color = '#' . $nihc->lighten(10);
} }
} }
if (! $link_hover_color) { if (!isset($link_hover_color)) {
$lhc = new Color($link_color); $lhc = new Color($link_color);
$lcolor = $lhc->getHex(); $lcolor = $lhc->getHex();
@ -137,6 +137,9 @@ if (! $link_hover_color) {
} }
// Convert $bg_image_options into css. // Convert $bg_image_options into css.
if (!isset($bg_image_option)) {
$bg_image_option = null;
}
switch ($bg_image_option) { switch ($bg_image_option) {
case "stretch": case "stretch":
$background_size_img = "100%"; $background_size_img = "100%";

View File

@ -1,4 +1,5 @@
<?php <?php
/* /*
* Name: frio * Name: frio
* Description: Bootstrap V3 theme. The theme is currently under construction, so it is far from finished. For further information have a look at the <a href="https://github.com/friendica/friendica/tree/develop/view/theme/frio/README.md">ReadMe</a>. * Description: Bootstrap V3 theme. The theme is currently under construction, so it is far from finished. For further information have a look at the <a href="https://github.com/friendica/friendica/tree/develop/view/theme/frio/README.md">ReadMe</a>.
@ -18,8 +19,8 @@ $frio = "view/theme/frio";
global $frio; global $frio;
function frio_init(App $a) { function frio_init(App $a)
{
// disable the events module link in the profile tab // disable the events module link in the profile tab
$a->theme_events_in_profile = false; $a->theme_events_in_profile = false;
@ -35,19 +36,21 @@ function frio_init(App $a) {
// if the device is a mobile device set js is_mobile // if the device is a mobile device set js is_mobile
// variable so the js scripts can use this information // variable so the js scripts can use this information
if($a->is_mobile || $a->is_tablet) { if ($a->is_mobile || $a->is_tablet) {
$a->page["htmlhead"] .= <<< EOT $a->page["htmlhead"] .= <<< EOT
<script type="text/javascript"> <script type="text/javascript">
var is_mobile = 1; var is_mobile = 1;
</script> </script>
EOT; EOT;
} }
if ($style == "") if ($style == "") {
$style = Config::get('frio', 'style'); $style = Config::get('frio', 'style');
}
} }
function frio_install() { function frio_install()
{
register_hook('prepare_body_final', 'view/theme/frio/theme.php', 'frio_item_photo_links'); register_hook('prepare_body_final', 'view/theme/frio/theme.php', 'frio_item_photo_links');
register_hook('item_photo_menu', 'view/theme/frio/theme.php', 'frio_item_photo_menu'); register_hook('item_photo_menu', 'view/theme/frio/theme.php', 'frio_item_photo_menu');
register_hook('contact_photo_menu', 'view/theme/frio/theme.php', 'frio_contact_photo_menu'); register_hook('contact_photo_menu', 'view/theme/frio/theme.php', 'frio_contact_photo_menu');
@ -58,7 +61,8 @@ function frio_install() {
logger("installed theme frio"); logger("installed theme frio");
} }
function frio_uninstall() { function frio_uninstall()
{
unregister_hook('prepare_body_final', 'view/theme/frio/theme.php', 'frio_item_photo_links'); unregister_hook('prepare_body_final', 'view/theme/frio/theme.php', 'frio_item_photo_links');
unregister_hook('item_photo_menu', 'view/theme/frio/theme.php', 'frio_item_photo_menu'); unregister_hook('item_photo_menu', 'view/theme/frio/theme.php', 'frio_item_photo_menu');
unregister_hook('contact_photo_menu', 'view/theme/frio/theme.php', 'frio_contact_photo_menu'); unregister_hook('contact_photo_menu', 'view/theme/frio/theme.php', 'frio_contact_photo_menu');
@ -68,6 +72,7 @@ function frio_uninstall() {
logger("uninstalled theme frio"); logger("uninstalled theme frio");
} }
/** /**
* @brief Replace friendica photo links hook * @brief Replace friendica photo links hook
* *
@ -86,19 +91,19 @@ function frio_item_photo_links(App $a, &$body_info)
$occurence = 1; $occurence = 1;
$p = bb_find_open_close($body_info['html'], "<a", ">"); $p = bb_find_open_close($body_info['html'], "<a", ">");
while($p !== false && ($occurence++ < 500)) { while ($p !== false && ($occurence++ < 500)) {
$link = substr($body_info['html'], $p['start'], $p['end'] - $p['start']); $link = substr($body_info['html'], $p['start'], $p['end'] - $p['start']);
$matches = array(); $matches = array();
preg_match("/\/photos\/[\w]+\/image\/([\w]+)/", $link, $matches); preg_match("/\/photos\/[\w]+\/image\/([\w]+)/", $link, $matches);
if($matches) { if ($matches) {
// Replace the link for the photo's page with a direct link to the photo itself // Replace the link for the photo's page with a direct link to the photo itself
$newlink = str_replace($matches[0], "/photo/{$matches[1]}", $link); $newlink = str_replace($matches[0], "/photo/{$matches[1]}", $link);
// Add a "quiet" parameter to any redir links to prevent the "XX welcomes YY" info boxes // Add a "quiet" parameter to any redir links to prevent the "XX welcomes YY" info boxes
$newlink = preg_replace("/href=\"([^\"]+)\/redir\/([^\"]+)&url=([^\"]+)\"/", 'href="$1/redir/$2&quiet=1&url=$3"', $newlink); $newlink = preg_replace("/href=\"([^\"]+)\/redir\/([^\"]+)&url=([^\"]+)\"/", 'href="$1/redir/$2&quiet=1&url=$3"', $newlink);
// Having any arguments to the link for Colorbox causes it to fetch base64 code instead of the image // Having any arguments to the link for Colorbox causes it to fetch base64 code instead of the image
$newlink = preg_replace("/\/[?&]zrl=([^&\"]+)/", '', $newlink); $newlink = preg_replace("/\/[?&]zrl=([^&\"]+)/", '', $newlink);
$body_info['html'] = str_replace($link, $newlink, $body_info['html']); $body_info['html'] = str_replace($link, $newlink, $body_info['html']);
@ -118,15 +123,14 @@ function frio_item_photo_links(App $a, &$body_info)
* @param App $a Unused but required by the hook definition * @param App $a Unused but required by the hook definition
* @param array $arr Contains item data and the original photo_menu * @param array $arr Contains item data and the original photo_menu
*/ */
function frio_item_photo_menu(App $a, &$arr) { function frio_item_photo_menu(App $a, &$arr)
{
foreach($arr["menu"] as $k =>$v) { foreach ($arr["menu"] as $k => $v) {
if(strpos($v,'poke/?f=&c=') === 0 || strpos($v,'message/new/') === 0) { if (strpos($v, 'poke/?f=&c=') === 0 || strpos($v, 'message/new/') === 0) {
$v = "javascript:addToModal('" . $v . "'); return false;"; $v = "javascript:addToModal('" . $v . "'); return false;";
$arr["menu"][$k] = $v; $arr["menu"][$k] = $v;
} }
} }
$args = array('item' => $item, 'menu' => $menu);
} }
/** /**
@ -141,12 +145,8 @@ function frio_item_photo_menu(App $a, &$arr) {
* @param App $a The app data * @param App $a The app data
* @param array $args Contains contact data and the original photo_menu * @param array $args Contains contact data and the original photo_menu
*/ */
function frio_contact_photo_menu(App $a, &$args){ function frio_contact_photo_menu(App $a, &$args)
{
$pokelink = "";
$pmlink = "";
$cid = "";
$cid = $args["contact"]["id"]; $cid = $args["contact"]["id"];
$pokelink = $args["menu"]["poke"][1]; $pokelink = $args["menu"]["poke"][1];
$pmlink = $args["menu"]["pm"][1]; $pmlink = $args["menu"]["pm"][1];
@ -160,8 +160,8 @@ function frio_contact_photo_menu(App $a, &$args){
// The value for opening in a new tab is e.g. when // The value for opening in a new tab is e.g. when
// $args["menu"]["status"][2] is true. If the value of the [2] key is true // $args["menu"]["status"][2] is true. If the value of the [2] key is true
// and if it's a friendica contact we set it to false // and if it's a friendica contact we set it to false
foreach($args["menu"] as $k =>$v) { foreach ($args["menu"] as $k => $v) {
if($k === "status" || $k === "profile" || $k === "photos") { if ($k === "status" || $k === "profile" || $k === "photos") {
$v[2] = (($args["contact"]["network"] === "dfrn") ? false : true); $v[2] = (($args["contact"]["network"] === "dfrn") ? false : true);
$args["menu"][$k][2] = $v[2]; $args["menu"][$k][2] = $v[2];
} }
@ -170,13 +170,13 @@ function frio_contact_photo_menu(App $a, &$args){
// Add to pm and poke links a new key with the value 'modal'. // Add to pm and poke links a new key with the value 'modal'.
// Later we can make conditions in the corresponing templates (e.g. // Later we can make conditions in the corresponing templates (e.g.
// contact_template.tpl) // contact_template.tpl)
if(strpos($pokelink,'poke/?f=&c='. $cid) !== false) if (strpos($pokelink, 'poke/?f=&c=' . $cid) !== false) {
$args["menu"]["poke"][3] = "modal"; $args["menu"]["poke"][3] = "modal";
}
if(strpos($pmlink,'message/new/' . $cid) !== false) if (strpos($pmlink, 'message/new/' . $cid) !== false) {
$args["menu"]["pm"][3] = "modal"; $args["menu"]["pm"][3] = "modal";
}
$args = array('contact' => $contact, 'menu' => &$menu);
} }
/** /**
@ -193,11 +193,13 @@ function frio_contact_photo_menu(App $a, &$args){
* @param App $a The App class * @param App $a The App class
* @param array $nav The original nav menu * @param array $nav The original nav menu
*/ */
function frio_remote_nav($a,&$nav) { function frio_remote_nav($a, &$nav)
{
// get the homelink from $_XSESSION // get the homelink from $_XSESSION
$homelink = get_my_url(); $homelink = get_my_url();
if(! $homelink) if (!$homelink) {
$homelink = ((x($_SESSION,'visitor_home')) ? $_SESSION['visitor_home'] : ''); $homelink = defaults($_SESSION, 'visitor_home', '');
}
// split up the url in it's parts (protocol,domain/directory, /profile/, nickname // split up the url in it's parts (protocol,domain/directory, /profile/, nickname
// I'm not familiar with regex, so someone might find a better solutionen // I'm not familiar with regex, so someone might find a better solutionen
@ -213,7 +215,7 @@ function frio_remote_nav($a,&$nav) {
// And construct a webbie (e.g. mickey@friendica.domain.com for the search in gcontact // And construct a webbie (e.g. mickey@friendica.domain.com for the search in gcontact
// We use the webbie for search in gcontact because we don't know if gcontact table stores // We use the webbie for search in gcontact because we don't know if gcontact table stores
// the right value if its http or https protocol // the right value if its http or https protocol
if(count($url_parts)) { if (count($url_parts)) {
$server_url = $url_parts[1] . $url_parts[2]; $server_url = $url_parts[1] . $url_parts[2];
$webbie = $url_parts[4] . '@' . $url_parts[2]; $webbie = $url_parts[4] . '@' . $url_parts[2];
} }
@ -228,11 +230,9 @@ function frio_remote_nav($a,&$nav) {
$r[0]['photo'] = (DBM::is_result($r) ? $a->remove_baseurl($r[0]['micro']) : "images/person-48.jpg"); $r[0]['photo'] = (DBM::is_result($r) ? $a->remove_baseurl($r[0]['micro']) : "images/person-48.jpg");
$r[0]['name'] = $a->user['username']; $r[0]['name'] = $a->user['username'];
} elseif (!local_user() && remote_user()) { } elseif (!local_user() && remote_user()) {
$r = q("SELECT `name`, `nick`, `micro` AS `photo` FROM `contact` WHERE `id` = %d", intval(remote_user())); $r = q("SELECT `name`, `nick`, `micro` AS `photo` FROM `contact` WHERE `id` = %d", intval(remote_user()));
$nav['remote'] = t("Guest"); $nav['remote'] = t("Guest");
} elseif (get_my_url()) { } elseif (get_my_url()) {
$r = q("SELECT `name`, `nick`, `photo` FROM `gcontact` $r = q("SELECT `name`, `nick`, `photo` FROM `gcontact`
WHERE `addr` = '%s' AND `network` = 'dfrn'", WHERE `addr` = '%s' AND `network` = 'dfrn'",
@ -243,18 +243,18 @@ function frio_remote_nav($a,&$nav) {
} }
if (DBM::is_result($r)) { if (DBM::is_result($r)) {
$nav['userinfo'] = array( $nav['userinfo'] = array(
'icon' => (DBM::is_result($r) ? $r[0]['photo'] : "images/person-48.jpg"), 'icon' => (DBM::is_result($r) ? $r[0]['photo'] : "images/person-48.jpg"),
'name' => $r[0]['name'], 'name' => $r[0]['name'],
); );
} }
if (!local_user() && !empty($server_url)) { if (!local_user() && !empty($server_url)) {
$nav['logout'] = Array($server_url . '/logout', t('Logout'), "", t('End this session')); $nav['logout'] = Array($server_url . '/logout', t('Logout'), "", t('End this session'));
// user menu // user menu
$nav['usermenu'][] = Array($server_url . '/profile/' . $a->user['nickname'], t('Status'), "", t('Your posts and conversations')); $nav['usermenu'][] = Array($server_url . '/profile/' . $a->user['nickname'], t('Status'), "", t('Your posts and conversations'));
$nav['usermenu'][] = Array($server_url . '/profile/' . $a->user['nickname']. '?tab=profile', t('Profile'), "", t('Your profile page')); $nav['usermenu'][] = Array($server_url . '/profile/' . $a->user['nickname'] . '?tab=profile', t('Profile'), "", t('Your profile page'));
$nav['usermenu'][] = Array($server_url . '/photos/' . $a->user['nickname'], t('Photos'), "", t('Your photos')); $nav['usermenu'][] = Array($server_url . '/photos/' . $a->user['nickname'], t('Photos'), "", t('Your photos'));
$nav['usermenu'][] = Array($server_url . '/videos/' . $a->user['nickname'], t('Videos'), "", t('Your videos')); $nav['usermenu'][] = Array($server_url . '/videos/' . $a->user['nickname'], t('Videos'), "", t('Your videos'));
$nav['usermenu'][] = Array($server_url . '/events/', t('Events'), "", t('Your events')); $nav['usermenu'][] = Array($server_url . '/events/', t('Events'), "", t('Your events'));
@ -263,11 +263,12 @@ function frio_remote_nav($a,&$nav) {
$nav['network'] = array($server_url . '/network', t('Network'), "", t('Conversations from your friends')); $nav['network'] = array($server_url . '/network', t('Network'), "", t('Conversations from your friends'));
$nav['events'] = Array($server_url . '/events', t('Events'), "", t('Events and Calendar')); $nav['events'] = Array($server_url . '/events', t('Events'), "", t('Events and Calendar'));
$nav['messages'] = array($server_url . '/message', t('Messages'), "", t('Private mail')); $nav['messages'] = array($server_url . '/message', t('Messages'), "", t('Private mail'));
$nav['settings'] = array($server_url . '/settings', t('Settings'),"", t('Account settings')); $nav['settings'] = array($server_url . '/settings', t('Settings'), "", t('Account settings'));
$nav['contacts'] = array($server_url . '/contacts', t('Contacts'),"", t('Manage/edit friends and contacts')); $nav['contacts'] = array($server_url . '/contacts', t('Contacts'), "", t('Manage/edit friends and contacts'));
$nav['sitename'] = $a->config['sitename']; $nav['sitename'] = $a->config['sitename'];
} }
} }
/** /**
* @brief: Search for contacts * @brief: Search for contacts
* *
@ -281,10 +282,11 @@ function frio_remote_nav($a,&$nav) {
* @param App $a The app data @TODO Unused * @param App $a The app data @TODO Unused
* @param array $results The array with the originals from acl_lookup() * @param array $results The array with the originals from acl_lookup()
*/ */
function frio_acl_lookup(App $a, &$results) { function frio_acl_lookup(App $a, &$results)
require_once("mod/contacts.php"); {
require_once 'mod/contacts.php';
$nets = ((x($_GET,"nets")) ? notags(trim($_GET["nets"])) : ""); $nets = x($_GET, "nets") ? notags(trim($_GET["nets"])) : "";
// we introduce a new search type, r should do the same query like it's // we introduce a new search type, r should do the same query like it's
// done in /mod/contacts for connections // done in /mod/contacts for connections
@ -295,17 +297,17 @@ function frio_acl_lookup(App $a, &$results) {
$search_txt = dbesc(protect_sprintf(preg_quote($search))); $search_txt = dbesc(protect_sprintf(preg_quote($search)));
$searching = true; $searching = true;
} }
$sql_extra .= (($searching) ? " AND (`attag` LIKE '%%".dbesc($search_txt)."%%' OR `name` LIKE '%%".dbesc($search_txt)."%%' OR `nick` LIKE '%%".dbesc($search_txt)."%%') " : ""); $sql_extra = '';
if ($searching) {
$sql_extra .= " AND (`attag` LIKE '%%" . dbesc($search_txt) . "%%' OR `name` LIKE '%%" . dbesc($search_txt) . "%%' OR `nick` LIKE '%%" . dbesc($search_txt) . "%%') ";
}
if ($nets) { if ($nets) {
$sql_extra .= sprintf(" AND network = '%s' ", dbesc($nets)); $sql_extra .= sprintf(" AND network = '%s' ", dbesc($nets));
} }
$sql_extra2 = ((($sort_type > 0) && ($sort_type <= CONTACT_IS_FRIEND)) ? sprintf(" AND `rel` = %d ",intval($sort_type)) : '');
$r = q("SELECT COUNT(*) AS `total` FROM `contact` $r = q("SELECT COUNT(*) AS `total` FROM `contact`
WHERE `uid` = %d AND NOT `self` AND NOT `pending` $sql_extra $sql_extra2 ", WHERE `uid` = %d AND NOT `self` AND NOT `pending` $sql_extra ",
intval($_SESSION['uid'])); intval($_SESSION['uid']));
if (DBM::is_result($r)) { if (DBM::is_result($r)) {
$total = $r[0]["total"]; $total = $r[0]["total"];
@ -313,7 +315,7 @@ function frio_acl_lookup(App $a, &$results) {
$sql_extra3 = unavailable_networks(); $sql_extra3 = unavailable_networks();
$r = q("SELECT * FROM `contact` WHERE `uid` = %d AND NOT `self` AND NOT `pending` $sql_extra $sql_extra2 $sql_extra3 ORDER BY `name` ASC LIMIT 100 ", $r = q("SELECT * FROM `contact` WHERE `uid` = %d AND NOT `self` AND NOT `pending` $sql_extra $sql_extra3 ORDER BY `name` ASC LIMIT 100 ",
intval($_SESSION['uid']) intval($_SESSION['uid'])
); );
@ -332,19 +334,19 @@ function frio_acl_lookup(App $a, &$results) {
/** /**
* @brief Manipulate the data of the item * @brief Manipulate the data of the item
* *
* At the moment we use this function to add some own stuff to the item menu * At the moment we use this function to add some own stuff to the item menu
* *
* @param App $a App $a The app data * @param App $a App $a The app data
* @param array $arr Array with the item and the item actions<br> * @param array $arr Array with the item and the item actions<br>
* 'item' => Array with item data<br> * 'item' => Array with item data<br>
* 'output' => Array with item actions<br> * 'output' => Array with item actions<br>
*/ */
function frio_display_item(App $a,&$arr) { function frio_display_item(App $a, &$arr)
{
// Add subthread to the item menu // Add subthread to the item menu
$subthread = array(); $subthread = array();
if ((local_user()) && local_user() == $arr['item']['uid'] && $arr['item']['parent'] == $arr['item']['id'] && (! $arr['item']['self'])) { if (local_user() == $arr['item']['uid'] && $arr['item']['parent'] == $arr['item']['id'] && !$arr['item']['self']) {
$subthread = array( $subthread = array(
'menu' => 'follow_thread', 'menu' => 'follow_thread',
'title' => t('Follow Thread'), 'title' => t('Follow Thread'),