diff --git a/boot.php b/boot.php
index d5260750..60a255ad 100644
--- a/boot.php
+++ b/boot.php
@@ -11,7 +11,7 @@ require_once('include/cache.php');
require_once('library/Mobile_Detect/Mobile_Detect.php');
define ( 'FRIENDICA_PLATFORM', 'Friendica');
-define ( 'FRIENDICA_VERSION', '3.0.1486' );
+define ( 'FRIENDICA_VERSION', '3.0.1492' );
define ( 'DFRN_PROTOCOL_VERSION', '2.23' );
define ( 'DB_UPDATE_VERSION', 1156 );
diff --git a/include/Photo.php b/include/Photo.php
index 25a2b708..ec967ac7 100644
--- a/include/Photo.php
+++ b/include/Photo.php
@@ -129,11 +129,12 @@ class Photo {
$this->image->setCompressionQuality($quality);
}
- $this->width = $this->image->getImageWidth();
+ // The 'width' and 'height' properties are only used by non-Imagick routines.
+ $this->width = $this->image->getImageWidth();
$this->height = $this->image->getImageHeight();
$this->valid = true;
- return true;
+ return true;
}
$this->valid = false;
@@ -205,8 +206,8 @@ class Photo {
if(!$this->is_valid())
return FALSE;
- $width = $this->width;
- $height = $this->height;
+ $width = $this->getWidth();
+ $height = $this->getHeight();
$dest_width = $dest_height = 0;
@@ -263,24 +264,25 @@ class Photo {
if($this->is_imagick()) {
- /**
- * If it is not animated, there will be only one iteration here,
- * so don't bother checking
- */
- // Don't forget to go back to the first frame
- $this->image->setFirstIterator();
- do {
+ /**
+ * If it is not animated, there will be only one iteration here,
+ * so don't bother checking
+ */
+ // Don't forget to go back to the first frame
+ $this->image->setFirstIterator();
+ do {
// FIXME - implement horizantal bias for scaling as in followin GD functions
// to allow very tall images to be constrained only horizontally.
- $this->image->scaleImage($dest_width, $dest_height);
- } while ($this->image->nextImage());
+ $this->image->scaleImage($dest_width, $dest_height);
+ } while ($this->image->nextImage());
- // FIXME - also we need to copy the new dimensions to $this->height, $this->width as other functions
- // may rely on it.
+ // These may not be necessary any more
+ $this->width = $this->image->getImageWidth();
+ $this->height = $this->image->getImageHeight();
- return;
+ return;
}
@@ -402,8 +404,8 @@ class Photo {
return FALSE;
- $width = $this->width;
- $height = $this->height;
+ $width = $this->getWidth();
+ $height = $this->getHeight();
$dest_width = $dest_height = 0;
@@ -483,19 +485,19 @@ class Photo {
if(!$this->is_valid())
return FALSE;
- if($this->is_imagick()) {
- $this->image->setFirstIterator();
- do {
- $this->image->cropImage($w, $h, $x, $y);
- /**
- * We need to remove the canva,
- * or the image is not resized to the crop:
- * http://php.net/manual/en/imagick.cropimage.php#97232
- */
- $this->image->setImagePage(0, 0, 0, 0);
- } while ($this->image->nextImage());
- return $this->scaleImage($max);
- }
+ if($this->is_imagick()) {
+ $this->image->setFirstIterator();
+ do {
+ $this->image->cropImage($w, $h, $x, $y);
+ /**
+ * We need to remove the canva,
+ * or the image is not resized to the crop:
+ * http://php.net/manual/en/imagick.cropimage.php#97232
+ */
+ $this->image->setImagePage(0, 0, 0, 0);
+ } while ($this->image->nextImage());
+ return $this->scaleImage($max);
+ }
$dest = imagecreatetruecolor( $max, $max );
imagealphablending($dest, false);
diff --git a/include/conversation.php b/include/conversation.php
index b41f3f0b..6b7c3afb 100644
--- a/include/conversation.php
+++ b/include/conversation.php
@@ -374,33 +374,79 @@ function conversation(&$a, $items, $mode, $update, $preview = false) {
$ssl_state = ((local_user()) ? true : false);
$profile_owner = 0;
- $page_writeable = false;
+ $page_writeable = false;
+ $live_update_div = '';
$previewing = (($preview) ? ' preview ' : '');
if($mode === 'network') {
$profile_owner = local_user();
$page_writeable = true;
- }
+ if(!$update) {
+ // The special div is needed for liveUpdate to kick in for this page.
+ // We only launch liveUpdate if you aren't filtering in some incompatible
+ // way and also you aren't writing a comment (discovered in javascript).
- if($mode === 'profile') {
+ $live_update_div = '
' . "\r\n"
+ . "\r\n";
+ }
+ }
+ else if($mode === 'profile') {
$profile_owner = $a->profile['profile_uid'];
$page_writeable = can_write_wall($a,$profile_owner);
- }
- if($mode === 'notes') {
+ if(!$update) {
+ $tab = notags(trim($_GET['tab']));
+ if($tab === 'posts') {
+ // This is ugly, but we can't pass the profile_uid through the session to the ajax updater,
+ // because browser prefetching might change it on us. We have to deliver it with the page.
+
+ $live_update_div = '' . "\r\n"
+ . "\r\n";
+ }
+ }
+ }
+ else if($mode === 'notes') {
$profile_owner = local_user();
$page_writeable = true;
+ if(!$update) {
+ $live_update_div = '' . "\r\n"
+ . "\r\n";
+ }
}
-
- if($mode === 'display') {
+ else if($mode === 'display') {
$profile_owner = $a->profile['uid'];
$page_writeable = can_write_wall($a,$profile_owner);
+ $live_update_div = '' . "\r\n";
}
-
- if($mode === 'community') {
+ else if($mode === 'community') {
$profile_owner = 0;
$page_writeable = false;
+ if(!$update) {
+ $live_update_div = '' . "\r\n"
+ . "\r\n";
+ }
+ }
+ else if($mode === 'search') {
+ $live_update_div = '' . "\r\n";
}
$page_dropping = ((local_user() && local_user() == $profile_owner) ? true : false);
@@ -630,7 +676,8 @@ function conversation(&$a, $items, $mode, $update, $preview = false) {
$o = replace_macros($page_template, array(
'$baseurl' => $a->get_baseurl($ssl_state),
- '$remove' => t('remove'),
+ '$live_update' => $live_update_div,
+ '$remove' => t('remove'),
'$mode' => $mode,
'$user' => $a->user,
'$threads' => $threads,
diff --git a/include/redir.php b/include/redir.php
new file mode 100644
index 00000000..ecc07dfb
--- /dev/null
+++ b/include/redir.php
@@ -0,0 +1,60 @@
+user['nickname']),
+ dbesc(NETWORK_DFRN)
+ );
+ if(!$r || $r[0]['id'] == remote_user())
+ return;
+
+
+ $r = q("SELECT * FROM contact WHERE nick = '%s' AND network = '%s' AND uid = %d LIMIT 1",
+ dbesc($contact_nick),
+ dbesc(NETWORK_DFRN),
+ intval(local_user())
+ );
+
+ if(! $r)
+ return;
+
+ $cid = $r[0]['id'];
+
+ $dfrn_id = $orig_id = (($r[0]['issued-id']) ? $r[0]['issued-id'] : $r[0]['dfrn-id']);
+
+ if($r[0]['duplex'] && $r[0]['issued-id']) {
+ $orig_id = $r[0]['issued-id'];
+ $dfrn_id = '1:' . $orig_id;
+ }
+ if($r[0]['duplex'] && $r[0]['dfrn-id']) {
+ $orig_id = $r[0]['dfrn-id'];
+ $dfrn_id = '0:' . $orig_id;
+ }
+
+ $sec = random_string();
+
+ q("INSERT INTO `profile_check` ( `uid`, `cid`, `dfrn_id`, `sec`, `expire`)
+ VALUES( %d, %s, '%s', '%s', %d )",
+ intval(local_user()),
+ intval($cid),
+ dbesc($dfrn_id),
+ dbesc($sec),
+ intval(time() + 45)
+ );
+
+ $url = curPageURL();
+
+ logger('check_redir: ' . $r[0]['name'] . ' ' . $sec, LOGGER_DEBUG);
+ $dest = (($url) ? '&destination_url=' . $url : '');
+ goaway ($r[0]['poll'] . '?dfrn_id=' . $dfrn_id
+ . '&dfrn_version=' . DFRN_PROTOCOL_VERSION . '&type=profile&sec=' . $sec . $dest );
+ }
+
+ return;
+}
+
+
diff --git a/js/fk.autocomplete.js b/js/fk.autocomplete.js
index b1db92c4..b1bc40be 100644
--- a/js/fk.autocomplete.js
+++ b/js/fk.autocomplete.js
@@ -104,7 +104,7 @@ ACPopup.prototype._search = function(){
else {
txt = tinyMCE.activeEditor.getContent();
// alert(that.searchText + ':' + t);
- newtxt = txt.replace(that.searchText,t+' ');
+ newtxt = txt.replace('@' + that.searchText,'@' + t +' ');
tinyMCE.activeEditor.setContent(newtxt);
tinyMCE.activeEditor.focus();
that.close();
diff --git a/mod/community.php b/mod/community.php
index 4f6c3d3c..defc873b 100644
--- a/mod/community.php
+++ b/mod/community.php
@@ -32,8 +32,6 @@ function community_content(&$a, $update = 0) {
$o .= '' . t('Community') . '
';
if(! $update) {
nav_set_selected('community');
- $o .= '' . "\r\n";
- $o .= "\r\n";
}
if(x($a->data,'search'))
diff --git a/mod/display.php b/mod/display.php
index 64df4cc6..be4a0ab9 100644
--- a/mod/display.php
+++ b/mod/display.php
@@ -14,7 +14,7 @@ function display_content(&$a) {
require_once('include/acl_selectors.php');
- $o = '' . "\r\n";
+ $o = '';
$a->page['htmlhead'] .= get_markup_template('display-head.tpl');
@@ -78,7 +78,7 @@ function display_content(&$a) {
return;
}
- if ($is_owner)
+ if ($is_owner) {
$celeb = ((($a->user['page-flags'] == PAGE_SOAPBOX) || ($a->user['page-flags'] == PAGE_COMMUNITY)) ? true : false);
$x = array(
@@ -93,7 +93,7 @@ function display_content(&$a) {
'profile_uid' => local_user()
);
$o .= status_editor($a,$x,0,true);
-
+ }
$sql_extra = item_permissions_sql($a->profile['uid'],$remote_contact,$groups);
diff --git a/mod/lockview.php b/mod/lockview.php
index 0307103f..0ae54c8c 100644
--- a/mod/lockview.php
+++ b/mod/lockview.php
@@ -24,8 +24,13 @@ function lockview_content(&$a) {
if(! count($r))
killme();
$item = $r[0];
- if($item['uid'] != local_user())
+
+ call_hooks('lockview_content', $item);
+
+ if($item['uid'] != local_user()) {
+ echo t('Remote privacy information not available.') . '
';
killme();
+ }
if(($item['private'] == 1) && (! strlen($item['allow_cid'])) && (! strlen($item['allow_gid']))
diff --git a/mod/manage.php b/mod/manage.php
index 4bc7a3ba..1b8e2f1e 100644
--- a/mod/manage.php
+++ b/mod/manage.php
@@ -75,7 +75,10 @@ function manage_post(&$a) {
if($limited_id)
$_SESSION['submanage'] = $original_id;
- goaway($a->get_baseurl(true) . '/profile/' . $a->user['nickname']);
+ $ret = array();
+ call_hooks('home_init',$ret);
+
+ goaway( $a->get_baseurl() . "/profile/" . $a->user['nickname'] );
// NOTREACHED
}
diff --git a/mod/network.php b/mod/network.php
index ef1fd877..4d360384 100644
--- a/mod/network.php
+++ b/mod/network.php
@@ -584,31 +584,6 @@ function network_content(&$a, $update = 0) {
$o .= get_events();
}
- if(! $update) {
- // The special div is needed for liveUpdate to kick in for this page.
- // We only launch liveUpdate if you aren't filtering in some incompatible
- // way and also you aren't writing a comment (discovered in javascript).
-
- $o .= '' . "\r\n";
- $o .= "\r\n";
- }
-
$sql_extra3 = '';
if($datequery) {
diff --git a/mod/notes.php b/mod/notes.php
index afaa60f7..62796ed1 100644
--- a/mod/notes.php
+++ b/mod/notes.php
@@ -66,10 +66,6 @@ function notes_content(&$a,$update = false) {
$o .= status_editor($a,$x,$a->contact['id']);
- $o .= '' . "\r\n";
- $o .= "\r\n";
-
}
// Construct permissions
diff --git a/mod/notifications.php b/mod/notifications.php
index b28b1478..88c0b938 100644
--- a/mod/notifications.php
+++ b/mod/notifications.php
@@ -229,7 +229,7 @@ function notifications_content(&$a) {
`item`.`author-link`, `item`.`author-avatar`, `item`.`created`, `item`.`object` as `object`,
`pitem`.`author-name` as `pname`, `pitem`.`author-link` as `plink`
FROM `item` INNER JOIN `item` as `pitem` ON `pitem`.`id`=`item`.`parent`
- WHERE `item`.`unseen` = 1 AND `item`.`visible` = 1 AND
+ WHERE `item`.`unseen` = 1 AND `item`.`visible` = 1 AND `pitem`.`parent` != 0
`item`.`deleted` = 0 AND `item`.`uid` = %d AND `item`.`wall` = 0 ORDER BY `item`.`created` DESC" ,
intval(local_user())
);
diff --git a/mod/photos.php b/mod/photos.php
index 9a3a402a..7108e956 100644
--- a/mod/photos.php
+++ b/mod/photos.php
@@ -4,14 +4,18 @@ require_once('include/items.php');
require_once('include/acl_selectors.php');
require_once('include/bbcode.php');
require_once('include/security.php');
+require_once('include/redir.php');
function photos_init(&$a) {
+ if($a->argc > 1)
+ auto_redir($a, $a->argv[1]);
if((get_config('system','block_public')) && (! local_user()) && (! remote_user())) {
return;
}
+
$o = '';
if($a->argc > 1) {
diff --git a/mod/ping.php b/mod/ping.php
index 9704fe70..a5bf315b 100644
--- a/mod/ping.php
+++ b/mod/ping.php
@@ -63,8 +63,8 @@ function ping_init(&$a) {
`item`.`contact-id`, `item`.`author-link`, `item`.`author-avatar`, `item`.`created`, `item`.`object`,
`pitem`.`author-name` as `pname`, `pitem`.`author-link` as `plink`
FROM `item` INNER JOIN `item` as `pitem` ON `pitem`.`id`=`item`.`parent`
- WHERE `item`.`unseen` = 1 AND `item`.`visible` = 1 AND
- `item`.`deleted` = 0 AND `item`.`uid` = %d
+ WHERE `item`.`unseen` = 1 AND `item`.`visible` = 1 AND
+ `item`.`deleted` = 0 AND `item`.`uid` = %d AND `pitem`.`parent` != 0
ORDER BY `item`.`created` DESC",
intval(local_user())
);
diff --git a/mod/profile.php b/mod/profile.php
index b33b181d..6a80909e 100644
--- a/mod/profile.php
+++ b/mod/profile.php
@@ -1,6 +1,7 @@
page,'aside'))
$a->page['aside'] = '';
- $blocked = (((get_config('system','block_public')) && (! local_user()) && (! remote_user())) ? true : false);
-
if($a->argc > 1)
$which = $a->argv[1];
else {
@@ -30,9 +29,13 @@ function profile_init(&$a) {
$which = $a->user['nickname'];
$profile = $a->argv[1];
}
+ else {
+ auto_redir($a, $which);
+ }
profile_load($a,$which,$profile);
+ $blocked = (((get_config('system','block_public')) && (! local_user()) && (! remote_user())) ? true : false);
$userblock = (($a->profile['hidewall'] && (! local_user()) && (! remote_user())) ? true : false);
if((x($a->profile,'page-flags')) && ($a->profile['page-flags'] == PAGE_COMMUNITY)) {
@@ -309,16 +312,6 @@ function profile_content(&$a, $update = 0) {
$o .= get_events();
}
- if((! $update) && ($tab === 'posts')) {
-
- // This is ugly, but we can't pass the profile_uid through the session to the ajax updater,
- // because browser prefetching might change it on us. We have to deliver it with the page.
-
- $o .= '' . "\r\n";
- $o .= "\r\n";
- }
-
if($is_owner) {
$r = q("UPDATE `item` SET `unseen` = 0
diff --git a/mod/search.php b/mod/search.php
index 87c72367..ac848a0c 100644
--- a/mod/search.php
+++ b/mod/search.php
@@ -93,9 +93,7 @@ function search_content(&$a) {
require_once('include/security.php');
require_once('include/conversation.php');
- $o = '' . "\r\n";
-
- $o .= '' . t('Search') . '
';
+ $o = '' . t('Search') . '
';
if(x($a->data,'search'))
$search = notags(trim($a->data['search']));
diff --git a/util/messages.po b/util/messages.po
index f770b636..d535adce 100644
--- a/util/messages.po
+++ b/util/messages.po
@@ -6,9 +6,9 @@
#, fuzzy
msgid ""
msgstr ""
-"Project-Id-Version: 3.0.1486\n"
+"Project-Id-Version: 3.0.1492\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-10-04 10:00-0700\n"
+"POT-Creation-Date: 2012-10-10 10:00-0700\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME \n"
"Language-Team: LANGUAGE \n"
@@ -148,7 +148,7 @@ msgstr ""
#: ../../addon/randplace/randplace.php:177 ../../addon/dwpost/dwpost.php:93
#: ../../addon/drpost/drpost.php:110 ../../addon/startpage/startpage.php:92
#: ../../addon/geonames/geonames.php:187 ../../addon/oembed.old/oembed.php:41
-#: ../../addon/forumlist/forumlist.php:164
+#: ../../addon/forumlist/forumlist.php:175
#: ../../addon/impressum/impressum.php:83
#: ../../addon/notimeline/notimeline.php:64 ../../addon/blockem/blockem.php:57
#: ../../addon/qcomment/qcomment.php:61
@@ -5284,11 +5284,11 @@ msgid "%s - Click to open/close"
msgstr ""
#: ../../addon/page/page.php:62 ../../addon/page/page.php:92
-#: ../../addon/forumlist/forumlist.php:56
+#: ../../addon/forumlist/forumlist.php:60
msgid "Forums"
msgstr ""
-#: ../../addon/page/page.php:130 ../../addon/forumlist/forumlist.php:90
+#: ../../addon/page/page.php:130 ../../addon/forumlist/forumlist.php:94
msgid "Forums:"
msgstr ""
@@ -6133,30 +6133,34 @@ msgstr ""
msgid "URL to embed:"
msgstr ""
-#: ../../addon/forumlist/forumlist.php:59
+#: ../../addon/forumlist/forumlist.php:63
msgid "show/hide"
msgstr ""
-#: ../../addon/forumlist/forumlist.php:73
+#: ../../addon/forumlist/forumlist.php:77
msgid "No forum subscriptions"
msgstr ""
-#: ../../addon/forumlist/forumlist.php:126
+#: ../../addon/forumlist/forumlist.php:131
msgid "Forumlist settings updated."
msgstr ""
-#: ../../addon/forumlist/forumlist.php:151
+#: ../../addon/forumlist/forumlist.php:159
msgid "Forumlist Settings"
msgstr ""
-#: ../../addon/forumlist/forumlist.php:153
+#: ../../addon/forumlist/forumlist.php:161
msgid "Randomise forum list"
msgstr ""
-#: ../../addon/forumlist/forumlist.php:156
+#: ../../addon/forumlist/forumlist.php:164
msgid "Show forums on profile page"
msgstr ""
+#: ../../addon/forumlist/forumlist.php:167
+msgid "Show forums on network page"
+msgstr ""
+
#: ../../addon/impressum/impressum.php:37
msgid "Impressum"
msgstr ""
diff --git a/view/conversation.tpl b/view/conversation.tpl
index fccd9a8b..0e146462 100644
--- a/view/conversation.tpl
+++ b/view/conversation.tpl
@@ -1,3 +1,5 @@
+$live_update
+
{{ for $threads as $thread }}
{{ for $thread.items as $item }}
diff --git a/view/theme/dispy/conversation.tpl b/view/theme/dispy/conversation.tpl
index 4a93dacf..8eae2d6d 100644
--- a/view/theme/dispy/conversation.tpl
+++ b/view/theme/dispy/conversation.tpl
@@ -1,3 +1,5 @@
+$live_update
+
{{ for $threads as $thread }}
{{ for $thread.items as $item }}
diff --git a/view/theme/dispy/threaded_conversation.tpl b/view/theme/dispy/threaded_conversation.tpl
new file mode 100644
index 00000000..3afb02c6
--- /dev/null
+++ b/view/theme/dispy/threaded_conversation.tpl
@@ -0,0 +1,15 @@
+$live_update
+
+{{ for $threads as $item }}
+{{ inc $item.template }}{{ endinc }}
+{{ endfor }}
+
+
+
+{{ if $dropping }}
+
+
+{{ endif }}
diff --git a/view/theme/facepark/conversation.tpl b/view/theme/facepark/conversation.tpl
index fccd9a8b..0e146462 100644
--- a/view/theme/facepark/conversation.tpl
+++ b/view/theme/facepark/conversation.tpl
@@ -1,3 +1,5 @@
+$live_update
+
{{ for $threads as $thread }}
{{ for $thread.items as $item }}
diff --git a/view/theme/frost-mobile/conversation.tpl b/view/theme/frost-mobile/conversation.tpl
index 43b4d63f..54ddafbb 100644
--- a/view/theme/frost-mobile/conversation.tpl
+++ b/view/theme/frost-mobile/conversation.tpl
@@ -1,3 +1,5 @@
+$live_update
+
{{ for $threads as $thread }}
{{ for $thread.items as $item }}
diff --git a/view/theme/frost-mobile/threaded_conversation.tpl b/view/theme/frost-mobile/threaded_conversation.tpl
index 6e017ac2..26ff683f 100644
--- a/view/theme/frost-mobile/threaded_conversation.tpl
+++ b/view/theme/frost-mobile/threaded_conversation.tpl
@@ -1,3 +1,5 @@
+$live_update
+
{{ for $threads as $item }}
{{ inc $item.template }}{{ endinc }}
{{ endfor }}
diff --git a/view/theme/quattro/conversation.tpl b/view/theme/quattro/conversation.tpl
index 0d0faac3..36afc392 100644
--- a/view/theme/quattro/conversation.tpl
+++ b/view/theme/quattro/conversation.tpl
@@ -1,3 +1,5 @@
+$live_update
+
{{ for $threads as $thread }}
{{ for $thread.items as $item }}
diff --git a/view/theme/vier/threaded_conversation.tpl b/view/theme/vier/threaded_conversation.tpl
index 13c38acb..ad510185 100644
--- a/view/theme/vier/threaded_conversation.tpl
+++ b/view/theme/vier/threaded_conversation.tpl
@@ -1,3 +1,5 @@
+$live_update
+
{{ for $threads as $item }}
diff --git a/view/threaded_conversation.tpl b/view/threaded_conversation.tpl
index f60839e4..56adc8c9 100644
--- a/view/threaded_conversation.tpl
+++ b/view/threaded_conversation.tpl
@@ -1,3 +1,5 @@
+$live_update
+
{{ for $threads as $item }}
{{ inc $item.template }}{{ endinc }}
{{ endfor }}