diff --git a/boot.php b/boot.php index 2767709b81..6e1951bffd 100644 --- a/boot.php +++ b/boot.php @@ -358,6 +358,7 @@ if(! class_exists('App')) { public $config; public $page; public $profile; + public $profile_uid; public $user; public $cid; public $contact; @@ -1446,10 +1447,33 @@ if(! function_exists('current_theme')) { $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 = ''; @@ -1466,9 +1490,12 @@ if(! function_exists('current_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 && @@ -1496,9 +1523,13 @@ if(! function_exists('current_theme')) { 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'); } } diff --git a/include/acl_selectors.php b/include/acl_selectors.php index 8b03a1312c..f628b97309 100644 --- a/include/acl_selectors.php +++ b/include/acl_selectors.php @@ -190,8 +190,14 @@ function contact_select($selname, $selclass, $preselected = false, $size = 4, $p $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 .= "\r\n"; else $o .= "\r\n"; + if ($privmail AND $preselected) + $o .= implode(", ", $receiverlist); + call_hooks($a->module . '_post_' . $selname, $o); return $o; diff --git a/include/conversation.php b/include/conversation.php index cdd3118ce0..4aae611804 100644 --- a/include/conversation.php +++ b/include/conversation.php @@ -597,7 +597,7 @@ function conversation(&$a, $items, $mode, $update, $preview = false) { $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') @@ -1229,14 +1229,10 @@ function find_thread_parent_index($arr,$x) { return false; } -function render_location_google($item) { - $location = (($item['location']) ? '' . $item['location'] . '' : ''); - $coord = (($item['coord']) ? '' . $item['coord'] . '' : ''); - if($coord) { - if($location) - $location .= '
(' . $coord . ')'; - else - $location = '' . $coord . ''; - } - return $location; +function render_location_dummy($item) { + if ($item['location'] != "") + return $item['location']; + + if ($item['coord'] != "") + return $item['coord']; } diff --git a/include/identity.php b/include/identity.php index bc930a3c6f..bf5d969274 100644 --- a/include/identity.php +++ b/include/identity.php @@ -90,14 +90,15 @@ if(! function_exists('profile_load')) { } $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']; @@ -726,3 +727,19 @@ function zrl($s,$force = false) { 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; +} diff --git a/include/items.php b/include/items.php index 475980d2dc..45d25e379f 100644 --- a/include/items.php +++ b/include/items.php @@ -4403,8 +4403,9 @@ function atom_entry($item,$type,$author,$owner,$comment = false,$cid = 0) { $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 .= '' . "\r\n"; + $o .= ''."\r\n"; } $htmlbody = $body; @@ -4412,7 +4413,6 @@ function atom_entry($item,$type,$author,$owner,$comment = false,$cid = 0) { 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 .= '' . xmlify($item['uri']) . '' . "\r\n"; @@ -4421,8 +4421,7 @@ function atom_entry($item,$type,$author,$owner,$comment = false,$cid = 0) { $o .= '' . xmlify(datetime_convert('UTC','UTC',$item['edited'] . '+00:00',ATOM_TIME)) . '' . "\r\n"; $o .= '' . base64url_encode($body, true) . '' . "\r\n"; $o .= '' . xmlify((($type === 'html') ? $htmlbody : $body)) . '' . "\r\n"; - $o .= '' . "\r\n"; - + $o .= ''."\r\n"; $o .= ''."\r\n"; diff --git a/include/ostatus.php b/include/ostatus.php index 10361e87c8..7825418474 100644 --- a/include/ostatus.php +++ b/include/ostatus.php @@ -10,6 +10,7 @@ require_once("include/Photo.php"); 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) { @@ -200,6 +201,13 @@ function ostatus_import($xml,$importer,&$contact, &$hub) { $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; @@ -468,7 +476,7 @@ function ostatus_convert_href($href) { 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')); @@ -479,9 +487,16 @@ function check_conversations($override = false) { 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); @@ -494,8 +509,16 @@ function check_conversations($override = false) { 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']); diff --git a/include/poller.php b/include/poller.php index 933624ecb5..d971d4f004 100644 --- a/include/poller.php +++ b/include/poller.php @@ -103,7 +103,11 @@ function poller_run(&$argv, &$argc){ $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`"); diff --git a/mod/content.php b/mod/content.php index e20345307d..cec23a9142 100644 --- a/mod/content.php +++ b/mod/content.php @@ -425,7 +425,7 @@ function render_content(&$a, $items, $mode, $update, $preview = false) { $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') @@ -799,7 +799,7 @@ function render_content(&$a, $items, $mode, $update, $preview = false) { $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'); diff --git a/mod/photos.php b/mod/photos.php index b16c4c0210..3d3b92a46d 100644 --- a/mod/photos.php +++ b/mod/photos.php @@ -29,71 +29,72 @@ function photos_init(&$a) { 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); + $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); + // 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; + 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; - } - } + $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; + $albums = $ret; - if(local_user() && $a->data['user']['uid'] == local_user()) - $can_post = true; + 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($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"); diff --git a/mod/videos.php b/mod/videos.php index 943a9d09f2..df47262f1d 100644 --- a/mod/videos.php +++ b/mod/videos.php @@ -27,15 +27,16 @@ function videos_init(&$a) { 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']); diff --git a/object/Item.php b/object/Item.php index aa9792b159..3211048cef 100644 --- a/object/Item.php +++ b/object/Item.php @@ -155,7 +155,7 @@ class Item extends BaseObject { $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(); diff --git a/view/theme/duepuntozero/style.php b/view/theme/duepuntozero/style.php index d5f8696a79..89f44d9c04 100644 --- a/view/theme/duepuntozero/style.php +++ b/view/theme/duepuntozero/style.php @@ -2,10 +2,28 @@ 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; + ?> diff --git a/view/theme/quattro/style.php b/view/theme/quattro/style.php index c75091eb5b..bf0b1e0428 100644 --- a/view/theme/quattro/style.php +++ b/view/theme/quattro/style.php @@ -1,12 +1,14 @@ get_baseurl(); $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'] .= ''."\n"; -else if ($style == "netcolour") - $a->page['htmlhead'] .= ''."\n"; -else if ($style == "breathe") - $a->page['htmlhead'] .= ''."\n"; -else if ($style == "plus") - $a->page['htmlhead'] .= ''."\n"; -else if ($style == "dark") - $a->page['htmlhead'] .= ''."\n"; - $a->page['htmlhead'] .= <<< EOT