public $config;
public $page;
public $profile;
+ public $profile_uid;
public $user;
public $cid;
public $contact;
$a = get_app();
+ $page_theme = null;
+
+ // Find the theme that belongs to the user whose stuff we are looking at
+
+ if($a->profile_uid && ($a->profile_uid != local_user())) {
+ $r = q("select theme from user where uid = %d limit 1",
+ intval($a->profile_uid)
+ );
+ if($r)
+ $page_theme = $r[0]['theme'];
+ }
+
+ // Allow folks to over-rule user themes and always use their own on their own site.
+ // This works only if the user is on the same server
+
+ if($page_theme && local_user() && (local_user() != $a->profile_uid)) {
+ if(get_pconfig(local_user(),'system','always_my_theme'))
+ $page_theme = null;
+ }
+
// $mobile_detect = new Mobile_Detect();
// $is_mobile = $mobile_detect->isMobile() || $mobile_detect->isTablet();
$is_mobile = $a->is_mobile || $a->is_tablet;
+ $standard_system_theme = ((isset($a->config['system']['theme'])) ? $a->config['system']['theme'] : '');
+ $standard_theme_name = ((isset($_SESSION) && x($_SESSION,'theme')) ? $_SESSION['theme'] : $standard_system_theme);
+
if($is_mobile) {
if(isset($_SESSION['show-mobile']) && !$_SESSION['show-mobile']) {
$system_theme = '';
}
}
}
- if(!$is_mobile || ($system_theme === '' && $theme_name === '')) {
- $system_theme = ((isset($a->config['system']['theme'])) ? $a->config['system']['theme'] : '');
- $theme_name = ((isset($_SESSION) && x($_SESSION,'theme')) ? $_SESSION['theme'] : $system_theme);
+ else {
+ $system_theme = $standard_system_theme;
+ $theme_name = $standard_theme_name;
+
+ if($page_theme)
+ $theme_name = $page_theme;
}
if($theme_name &&
if(! function_exists('current_theme_url')) {
function current_theme_url() {
global $a;
+
$t = current_theme();
+
+ $opts = (($a->profile_uid) ? '?f=&puid=' . $a->profile_uid : '');
if (file_exists('view/theme/' . $t . '/style.php'))
- return($a->get_baseurl() . '/view/theme/' . $t . '/style.pcss');
+ return($a->get_baseurl() . '/view/theme/' . $t . '/style.pcss' . $opts);
+
return($a->get_baseurl() . '/view/theme/' . $t . '/style.css');
}
}
$tabindex = ($tabindex > 0 ? "tabindex=\"$tabindex\"" : "");
+ if ($privmail AND $preselected) {
+ $sql_extra .= " AND `id` IN (".implode(",", $preselected).")";
+ $hidepreselected = ' style="display: none;"';
+ } else
+ $hidepreselected = "";
+
if($privmail)
- $o .= "<select name=\"$selname\" id=\"$selclass\" class=\"$selclass\" size=\"$size\" $tabindex >\r\n";
+ $o .= "<select name=\"$selname\" id=\"$selclass\" class=\"$selclass\" size=\"$size\" $tabindex $hidepreselected>\r\n";
else
$o .= "<select name=\"{$selname}[]\" id=\"$selclass\" class=\"$selclass\" multiple=\"multiple\" size=\"$size\" $tabindex >\r\n";
call_hooks($a->module . '_pre_' . $selname, $arr);
+ $receiverlist = array();
+
if(count($r)) {
foreach($r as $rr) {
if((is_array($preselected)) && in_array($rr['id'], $preselected))
else
$trimmed = mb_substr($rr['name'],0,20);
+ $receiverlist[] = $trimmed;
+
$o .= "<option value=\"{$rr['id']}\" $selected title=\"{$rr['name']}|{$rr['url']}\" >$trimmed</option>\r\n";
}
$o .= "</select>\r\n";
+ if ($privmail AND $preselected)
+ $o .= implode(", ", $receiverlist);
+
call_hooks($a->module . '_post_' . $selname, $o);
return $o;
$locate = array('location' => $item['location'], 'coord' => $item['coord'], 'html' => '');
call_hooks('render_location',$locate);
- $location = ((strlen($locate['html'])) ? $locate['html'] : render_location_google($locate));
+ $location = ((strlen($locate['html'])) ? $locate['html'] : render_location_dummy($locate));
localize_item($item);
if($mode === 'network-new')
return false;
}
-function render_location_google($item) {
- $location = (($item['location']) ? '<a target="map" title="' . $item['location'] . '" href="http://maps.google.com/?q=' . urlencode($item['location']) . '">' . $item['location'] . '</a>' : '');
- $coord = (($item['coord']) ? '<a target="map" title="' . $item['coord'] . '" href="http://maps.google.com/?q=' . urlencode($item['coord']) . '">' . $item['coord'] . '</a>' : '');
- if($coord) {
- if($location)
- $location .= '<br /><span class="smalltext">(' . $coord . ')</span>';
- else
- $location = '<span class="smalltext">' . $coord . '</span>';
- }
- return $location;
+function render_location_dummy($item) {
+ if ($item['location'] != "")
+ return $item['location'];
+
+ if ($item['coord'] != "")
+ return $item['coord'];
}
}
$a->profile = $r[0];
+ $a->profile_uid = $r[0]['profile_uid'];
$a->profile['mobile-theme'] = get_pconfig($a->profile['profile_uid'], 'system', 'mobile_theme');
$a->profile['network'] = NETWORK_DFRN;
$a->page['title'] = $a->profile['name'] . " @ " . $a->config['sitename'];
- if (!$profiledata)
- $_SESSION['theme'] = $a->profile['theme'];
+// if (!$profiledata)
+// $_SESSION['theme'] = $a->profile['theme'];
$_SESSION['mobile-theme'] = $a->profile['mobile-theme'];
return $s . $achar . 'zrl=' . urlencode($mine);
return $s;
}
+
+// Used from within PCSS themes to set theme parameters. If there's a
+// puid request variable, that is the "page owner" and normally their theme
+// settings take precedence; unless a local user sets the "always_my_theme"
+// system pconfig, which means they don't want to see anybody else's theme
+// settings except their own while on this site.
+
+function get_theme_uid() {
+ $uid = (($_REQUEST['puid']) ? intval($_REQUEST['puid']) : 0);
+ if(local_user()) {
+ if((get_pconfig(local_user(),'system','always_my_theme')) || (! $uid))
+ return local_user();
+ }
+
+ return $uid;
+}
$o .= atom_author('dfrn:owner',$item['owner-name'],$item['owner-link'],80,80,$item['owner-avatar']);
if(($item['parent'] != $item['id']) || ($item['parent-uri'] !== $item['uri']) || (($item['thr-parent'] !== '') && ($item['thr-parent'] !== $item['uri']))) {
+ $parent = q("SELECT `guid` FROM `item` WHERE `id` = %d", intval($item["parent"]));
$parent_item = (($item['thr-parent']) ? $item['thr-parent'] : $item['parent-uri']);
- $o .= '<thr:in-reply-to ref="' . xmlify($parent_item) . '" type="text/html" href="' . xmlify($a->get_baseurl() . '/display/' . $owner['nickname'] . '/' . $item['parent']) . '" />' . "\r\n";
+ $o .= '<thr:in-reply-to ref="'.xmlify($parent_item).'" type="text/html" href="'.xmlify($a->get_baseurl().'/display/'.$parent[0]['guid']).'" />'."\r\n";
}
$htmlbody = $body;
if ($item['title'] != "")
$htmlbody = "[b]".$item['title']."[/b]\n\n".$htmlbody;
- //$htmlbody = bbcode(bb_remove_share_information($htmlbody), false, false, 7);
$htmlbody = bbcode($htmlbody, false, false, 7);
$o .= '<id>' . xmlify($item['uri']) . '</id>' . "\r\n";
$o .= '<updated>' . xmlify(datetime_convert('UTC','UTC',$item['edited'] . '+00:00',ATOM_TIME)) . '</updated>' . "\r\n";
$o .= '<dfrn:env>' . base64url_encode($body, true) . '</dfrn:env>' . "\r\n";
$o .= '<content type="' . $type . '" >' . xmlify((($type === 'html') ? $htmlbody : $body)) . '</content>' . "\r\n";
- $o .= '<link rel="alternate" type="text/html" href="' . xmlify($a->get_baseurl() . '/display/' . $owner['nickname'] . '/' . $item['id']) . '" />' . "\r\n";
-
+ $o .= '<link rel="alternate" type="text/html" href="'.xmlify($a->get_baseurl().'/display/'.$item['guid']).'" />'."\r\n";
$o .= '<status_net notice_id="'.$item['id'].'"></status_net>'."\r\n";
define('OSTATUS_DEFAULT_POLL_INTERVAL', 30); // given in minutes
define('OSTATUS_DEFAULT_POLL_TIMEFRAME', 1440); // given in minutes
+define('OSTATUS_DEFAULT_POLL_TIMEFRAME_MENTIONS', 14400); // given in minutes
function ostatus_fetchauthor($xpath, $context, $importer, &$contact) {
$item["object"] = $xml;
$item["verb"] = $xpath->query('activity:verb/text()', $entry)->item(0)->nodeValue;
+ // To-Do:
+ // Delete a message
+ if ($item["verb"] == "qvitter-delete-notice") {
+ // ignore "Delete" messages (by now)
+ continue;
+ }
+
if ($item["verb"] == ACTIVITY_JOIN) {
// ignore "Join" messages
continue;
return $href;
}
-function check_conversations($override = false) {
+function check_conversations($mentions = false, $override = false) {
$last = get_config('system','ostatus_last_poll');
$poll_interval = intval(get_config('system','ostatus_poll_interval'));
if (($poll_interval < 0) AND !$override)
return;
- $poll_timeframe = intval(get_config('system','ostatus_poll_timeframe'));
- if (!$poll_timeframe)
- $poll_timeframe = OSTATUS_DEFAULT_POLL_TIMEFRAME;
+ if (!$mentions) {
+ $poll_timeframe = intval(get_config('system','ostatus_poll_timeframe'));
+ if (!$poll_timeframe)
+ $poll_timeframe = OSTATUS_DEFAULT_POLL_TIMEFRAME;
+ } else {
+ $poll_timeframe = intval(get_config('system','ostatus_poll_timeframe'));
+ if (!$poll_timeframe)
+ $poll_timeframe = OSTATUS_DEFAULT_POLL_TIMEFRAME_MENTIONS;
+ }
+
if ($last AND !$override) {
$next = $last + ($poll_interval * 60);
logger('cron_start');
$start = date("Y-m-d H:i:s", time() - ($poll_timeframe * 60));
- $conversations = q("SELECT `oid`, `url`, `uid` FROM `term` WHERE `type` = 7 AND `term` > '%s' GROUP BY `url`, `uid` ORDER BY `term` DESC",
- dbesc($start));
+
+ if ($mentions)
+ $conversations = q("SELECT `term`.`oid`, `term`.`url`, `term`.`uid` FROM `term`
+ STRAIGHT_JOIN `thread` ON `thread`.`iid` = `term`.`oid` AND `thread`.`uid` = `term`.`uid`
+ WHERE `term`.`type` = 7 AND `term`.`term` > '%s' AND `thread`.`mention`
+ GROUP BY `term`.`url`, `term`.`uid` ORDER BY `term`.`term` DESC", dbesc($start));
+ else
+ $conversations = q("SELECT `oid`, `url`, `uid` FROM `term`
+ WHERE `type` = 7 AND `term` > '%s'
+ GROUP BY `url`, `uid` ORDER BY `term` DESC", dbesc($start));
foreach ($conversations AS $conversation) {
ostatus_completion($conversation['url'], $conversation['uid']);
$abandon_days = 0;
// Check OStatus conversations
- check_conversations();
+ // Check only conversations with mentions (for a longer time)
+ check_conversations(true);
+
+ // Check every conversation
+ check_conversations(false);
// To-Do: Regenerate usage statistics
// q("ANALYZE TABLE `item`");
$locate = array('location' => $item['location'], 'coord' => $item['coord'], 'html' => '');
call_hooks('render_location',$locate);
- $location = ((strlen($locate['html'])) ? $locate['html'] : render_location_google($locate));
+ $location = ((strlen($locate['html'])) ? $locate['html'] : render_location_dummy($locate));
localize_item($item);
if($mode === 'network-new')
$locate = array('location' => $item['location'], 'coord' => $item['coord'], 'html' => '');
call_hooks('render_location',$locate);
- $location = ((strlen($locate['html'])) ? $locate['html'] : render_location_google($locate));
+ $location = ((strlen($locate['html'])) ? $locate['html'] : render_location_dummy($locate));
$indent = (($toplevelpost) ? '' : ' comment');
return;
$a->data['user'] = $r[0];
+ $a->profile_uid = $r[0]['uid'];
- $profilephoto = $a->get_cached_avatar_image($a->get_baseurl() . '/photo/profile/' . $a->data['user']['uid'] . '.jpg');
+ $profilephoto = $a->get_cached_avatar_image($a->get_baseurl() . '/photo/profile/' . $a->data['user']['uid'] . '.jpg');
- $tpl = get_markup_template("vcard-widget.tpl");
+ $tpl = get_markup_template("vcard-widget.tpl");
$vcard_widget .= replace_macros($tpl, array(
- '$name' => $a->data['user']['username'],
- '$photo' => $profilephoto
- ));
+ '$name' => $a->data['user']['username'],
+ '$photo' => $profilephoto
+ ));
$sql_extra = permissions_sql($a->data['user']['uid']);
$albums = q("SELECT count(distinct `resource-id`) AS `total`, `album` FROM `photo` WHERE `uid` = %d AND `album` != '%s' AND `album` != '%s'
- $sql_extra group by album order by created desc",
+ $sql_extra group by album order by created desc",
intval($a->data['user']['uid']),
- dbesc('Contact Photos'),
- dbesc( t('Contact Photos'))
+ dbesc('Contact Photos'),
+ dbesc( t('Contact Photos'))
);
- $albums_visible = ((intval($a->data['user']['hidewall']) && (! local_user()) && (! remote_user())) ? false : true);
-
- // add various encodings to the array so we can just loop through and pick them out in a template
- $ret = array('success' => false);
-
- if($albums) {
- $a->data['albums'] = $albums;
- if ($albums_visible)
- $ret['success'] = true;
-
- $ret['albums'] = array();
- foreach($albums as $k => $album) {
- $entry = array(
- 'text' => $album['album'],
- 'total' => $album['total'],
- 'url' => z_root() . '/photos/' . $a->data['user']['nickname'] . '/album/' . bin2hex($album['album']),
- 'urlencode' => urlencode($album['album']),
- 'bin2hex' => bin2hex($album['album'])
- );
- $ret['albums'][] = $entry;
- }
- }
-
- $albums = $ret;
-
- if(local_user() && $a->data['user']['uid'] == local_user())
- $can_post = true;
-
- if($albums['success']) {
- $photo_albums_widget = replace_macros(get_markup_template('photo_albums.tpl'),array(
- '$nick' => $a->data['user']['nickname'],
- '$title' => t('Photo Albums'),
- 'recent' => t('Recent Photos'),
- '$albums' => $albums['albums'],
- '$baseurl' => z_root(),
- '$upload' => array( t('Upload New Photos'), $a->get_baseurl() . '/photos/' . $a->data['user']['nickname'] . '/upload'),
- '$can_post' => $can_post
- ));
- }
+ $albums_visible = ((intval($a->data['user']['hidewall']) && (! local_user()) && (! remote_user())) ? false : true);
+
+ // add various encodings to the array so we can just loop through and pick them out in a template
+ $ret = array('success' => false);
+
+ if($albums) {
+ $a->data['albums'] = $albums;
+ if ($albums_visible)
+ $ret['success'] = true;
+
+ $ret['albums'] = array();
+ foreach($albums as $k => $album) {
+ $entry = array(
+ 'text' => $album['album'],
+ 'total' => $album['total'],
+ 'url' => z_root() . '/photos/' . $a->data['user']['nickname'] . '/album/' . bin2hex($album['album']),
+ 'urlencode' => urlencode($album['album']),
+ 'bin2hex' => bin2hex($album['album'])
+ );
+ $ret['albums'][] = $entry;
+ }
+ }
+
+ $albums = $ret;
+
+ if(local_user() && $a->data['user']['uid'] == local_user())
+ $can_post = true;
+
+ if($albums['success']) {
+ $photo_albums_widget = replace_macros(get_markup_template('photo_albums.tpl'),array(
+ '$nick' => $a->data['user']['nickname'],
+ '$title' => t('Photo Albums'),
+ 'recent' => t('Recent Photos'),
+ '$albums' => $albums['albums'],
+ '$baseurl' => z_root(),
+ '$upload' => array( t('Upload New Photos'), $a->get_baseurl() . '/photos/' . $a->data['user']['nickname'] . '/upload'),
+ '$can_post' => $can_post
+ ));
+ }
if(! x($a->page,'aside'))
$a->page['aside'] = '';
- $a->page['aside'] .= $vcard_widget;
- $a->page['aside'] .= $photo_albums_widget;
+ $a->page['aside'] .= $vcard_widget;
+ $a->page['aside'] .= $photo_albums_widget;
$tpl = get_markup_template("photos_head.tpl");
return;
$a->data['user'] = $r[0];
+ $a->profile_uid = $r[0]['uid'];
- $profilephoto = $a->get_cached_avatar_image($a->get_baseurl() . '/photo/profile/' . $a->data['user']['uid'] . '.jpg');
+ $profilephoto = $a->get_cached_avatar_image($a->get_baseurl() . '/photo/profile/' . $a->data['user']['uid'] . '.jpg');
- $tpl = get_markup_template("vcard-widget.tpl");
+ $tpl = get_markup_template("vcard-widget.tpl");
$vcard_widget = replace_macros($tpl, array(
- '$name' => $a->data['user']['username'],
- '$photo' => $profilephoto
- ));
+ '$name' => $a->data['user']['username'],
+ '$photo' => $profilephoto
+ ));
/*$sql_extra = permissions_sql($a->data['user']['uid']);
$locate = array('location' => $item['location'], 'coord' => $item['coord'], 'html' => '');
call_hooks('render_location',$locate);
- $location = ((strlen($locate['html'])) ? $locate['html'] : render_location_google($locate));
+ $location = ((strlen($locate['html'])) ? $locate['html'] : render_location_dummy($locate));
$searchpath = $a->get_baseurl()."/search?tag=";
$tags=array();
if (file_exists("$THEMEPATH/style.css")){
echo file_get_contents("$THEMEPATH/style.css");
}
+$uid = get_theme_uid();
+
$s_colorset = get_config('duepuntozero','colorset');
-$uid = local_user();
$colorset = get_pconfig( $uid, 'duepuntozero', 'colorset');
if (!x($colorset))
$colorset = $s_colorset;
+if ($colorset) {
+ if ($colorset == 'greenzero')
+ $setcss = file_get_contents('view/theme/duepuntozero/deriv/greenzero.css');
+ if ($colorset == 'purplezero')
+ $setcss = file_get_contents('view/theme/duepuntozero/deriv/purplezero.css');
+ if ($colorset == 'easterbunny')
+ $setcss = file_get_contents('view/theme/duepuntozero/deriv/easterbunny.css');
+ if ($colorset == 'darkzero')
+ $setcss = file_get_contents('view/theme/duepuntozero/deriv/darkzero.css');
+ if ($colorset == 'comix')
+ $setcss = file_get_contents('view/theme/duepuntozero/deriv/comix.css');
+ if ($colorset == 'slackr')
+ $setcss = file_get_contents('view/theme/duepuntozero/deriv/slackr.css');
+}
+
+echo $setcss;
+
?>
<?php
+ $uid = get_theme_uid();
+
$color=false;
$quattro_align=false;
$site_color = get_config("quattro","color");
$site_quattro_align = get_config("quattro", "align" );
- if (local_user()) {
- $color = get_pconfig(local_user(), "quattro","color");
- $quattro_align = get_pconfig(local_user(), 'quattro', 'align' );
+ if ($uid) {
+ $color = get_pconfig( $uid, "quattro","color");
+ $quattro_align = get_pconfig( $uid, 'quattro', 'align' );
}
if ($color===false) $color=$site_color;
if ($site_textarea_font_size===false) $site_textarea_font_size="20";
if ($site_post_font_size===false) $site_post_font_size="12";
- if (local_user()) {
- $textarea_font_size = get_pconfig(local_user(), "quattro","tfs");
- $post_font_size = get_pconfig(local_user(), "quattro","pfs");
+ if ($uid) {
+ $textarea_font_size = get_pconfig( $uid, "quattro","tfs");
+ $post_font_size = get_pconfig( $uid, "quattro","pfs");
}
if ($textarea_font_size===false) $textarea_font_size = $site_textarea_font_size;
--- /dev/null
+<?php
+
+if (file_exists("$THEMEPATH//style.css")){
+ echo file_get_contents("$THEMEPATH//style.css");
+}
+
+$uid = get_theme_uid();
+
+$style = get_pconfig( $uid, 'vier', 'style');
+
+if ($style == "")
+ $style = get_config('vier', 'style');
+
+if ($style == "")
+ $style = "plus";
+
+if ($style == "flat")
+ $stylecss = file_get_contents('view/theme/vier/flat.css');
+else if ($style == "netcolour")
+ $stylecss = file_get_contents('view/theme/vier/netcolour.css');
+else if ($style == "breathe")
+ $stylecss = file_get_contents('view/theme/vier/breathe.css');
+else if ($style == "plus")
+ $stylecss = file_get_contents('view/theme/vier/plus.css');
+else if ($style == "dark")
+ $stylecss = file_get_contents('view/theme/vier/dark.css');
+
+echo $stylecss;
+
+
$a->theme_info = array();
-$style = get_pconfig(local_user(), 'vier', 'style');
-
-if ($style == "")
- $style = get_config('vier', 'style');
-
-if ($style == "")
- $style = "plus";
-
-if ($style == "flat")
- $a->page['htmlhead'] .= '<link rel="stylesheet" href="view/theme/vier/flat.css" type="text/css" media="screen"/>'."\n";
-else if ($style == "netcolour")
- $a->page['htmlhead'] .= '<link rel="stylesheet" href="view/theme/vier/netcolour.css" type="text/css" media="screen"/>'."\n";
-else if ($style == "breathe")
- $a->page['htmlhead'] .= '<link rel="stylesheet" href="view/theme/vier/breathe.css" type="text/css" media="screen"/>'."\n";
-else if ($style == "plus")
- $a->page['htmlhead'] .= '<link rel="stylesheet" href="view/theme/vier/plus.css" type="text/css" media="screen"/>'."\n";
-else if ($style == "dark")
- $a->page['htmlhead'] .= '<link rel="stylesheet" href="view/theme/vier/dark.css" type="text/css" media="screen"/>'."\n";
-
$a->page['htmlhead'] .= <<< EOT
<script type="text/javascript">