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 }}