diff --git a/object/Item.php b/object/Item.php index ecf7aba59..57a7ec0b2 100644 --- a/object/Item.php +++ b/object/Item.php @@ -23,6 +23,10 @@ class Item extends BaseObject { private $parent = null; private $conversation = null; private $redirect_url = null; + private $owner_url = ''; + private $owner_photo = ''; + private $owner_name = ''; + private $wall_to_wall = false; public function __construct($data) { $a = $this->get_app(); @@ -60,7 +64,6 @@ class Item extends BaseObject { $commentww = ''; $sparkle = ''; - $owner_url = $owner_photo = $owner_name = ''; $buttons = ''; $dropping = false; $star = false; @@ -124,53 +127,16 @@ class Item extends BaseObject { $like = ((x($alike,$item['uri'])) ? format_like($alike[$item['uri']],$alike[$item['uri'] . '-l'],'like',$item['uri']) : ''); $dislike = ((x($dlike,$item['uri'])) ? format_like($dlike[$item['uri']],$dlike[$item['uri'] . '-l'],'dislike',$item['uri']) : ''); + /* + * We should avoid doing this all the time, but it depends on the conversation mode + * And the conv mode may change when we change the conv, or it changes its mode + * Maybe we should establish a way to be notified about conversation changes + */ + $this->check_wall_to_wall(); + if($this->is_wall_to_wall() && ($this->get_owner_url() == $this->get_redirect_url())) + $osparkle = ' sparkle'; + if($this->is_toplevel()) { - if((! $item['self']) && ($conv->get_mode() !== 'profile')) { - if($item['wall']) { - - // On the network page, I am the owner. On the display page it will be the profile owner. - // This will have been stored in $a->page_contact by our calling page. - // Put this person as the wall owner of the wall-to-wall notice. - - $owner_url = zrl($a->page_contact['url']); - $owner_photo = $a->page_contact['thumb']; - $owner_name = $a->page_contact['name']; - $this->set_template('wall2wall'); - $commentww = 'ww'; - } - } - else if($item['owner-link']) { - - $owner_linkmatch = (($item['owner-link']) && link_compare($item['owner-link'],$item['author-link'])); - $alias_linkmatch = (($item['alias']) && link_compare($item['alias'],$item['author-link'])); - $owner_namematch = (($item['owner-name']) && $item['owner-name'] == $item['author-name']); - if((! $owner_linkmatch) && (! $alias_linkmatch) && (! $owner_namematch)) { - - // The author url doesn't match the owner (typically the contact) - // and also doesn't match the contact alias. - // 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 - // seeing "Bob Smith to Bob Smith via Wall-to-wall" and you know darn - // well that it's the same Bob Smith. - - // But it could be somebody else with the same name. It just isn't highly likely. - - - $owner_url = $item['owner-link']; - $owner_photo = $item['owner-avatar']; - $owner_name = $item['owner-name']; - $this->set_template('wall2wall'); - $commentww = 'ww'; - // If it is our contact, use a friendly redirect link - if((link_compare($item['owner-link'],$item['url'])) - && ($item['network'] === NETWORK_DFRN)) { - $owner_url = $this->get_redirect_url(); - $osparkle = ' sparkle'; - } - else - $owner_url = zrl($owner_url); - } - } if($conv->get_profile_owner() == local_user()) { $isstarred = (($item['starred']) ? "starred" : "unstarred"); @@ -214,7 +180,7 @@ class Item extends BaseObject { 'text' => strip_tags(template_escape($body)), 'id' => $this->get_id(), 'linktitle' => sprintf( t('View %s\'s profile @ %s'), $profile_name, ((strlen($item['author-link'])) ? $item['author-link'] : $item['url'])), - 'olinktitle' => sprintf( t('View %s\'s profile @ %s'), $owner_name, ((strlen($item['owner-link'])) ? $item['owner-link'] : $item['url'])), + 'olinktitle' => sprintf( t('View %s\'s profile @ %s'), $this->get_owner_name(), ((strlen($item['owner-link'])) ? $item['owner-link'] : $item['url'])), 'to' => t('to'), 'wall' => t('Wall-to-Wall'), 'vwall' => t('via Wall-To-Wall:'), @@ -229,9 +195,9 @@ class Item extends BaseObject { 'lock' => $lock, 'location' => template_escape($location), 'indent' => $indent, - 'owner_url' => $owner_url, - 'owner_photo' => $owner_photo, - 'owner_name' => template_escape($owner_name), + 'owner_url' => $this->get_owner_url(), + 'owner_photo' => $this->get_owner_photo(), + 'owner_name' => template_escape($this->get_owner_name()), 'plink' => get_plink($item), 'edpost' => $edpost, 'isstarred' => $isstarred, @@ -376,6 +342,8 @@ class Item extends BaseObject { * set conversation */ public function set_conversation($conv) { + $previous_mode = ($this->conversation ? $this->conversation->get_mode() : ''); + $this->conversation = $conv; // Set it on our children too @@ -483,6 +451,9 @@ class Item extends BaseObject { $comment_box = ''; $conv = $this->get_conversation(); $template = get_markup_template($this->get_comment_box_template()); + $ww = ''; + if( ($conv->get_mode() === 'network') && $this->is_wall_to_wall() ) + $ww = 'ww'; if($conv->is_writeable() && $this->is_writeable()) { $a = $this->get_app(); @@ -529,5 +500,84 @@ class Item extends BaseObject { private function get_redirect_url() { return $this->redirect_url; } + + /** + * Check if we are a wall to wall item and set the relevant properties + */ + protected function check_wall_to_wall() { + $a = $this->get_app(); + $conv = $this->get_conversation(); + $this->wall_to_wall = false; + + if($this->is_toplevel()) { + if( (! $this->get_data_value('self')) && ($conv->get_mode() !== 'profile')) { + if($this->get_data_value('wall')) { + + // On the network page, I am the owner. On the display page it will be the profile owner. + // This will have been stored in $a->page_contact by our calling page. + // Put this person as the wall owner of the wall-to-wall notice. + + $this->owner_url = zrl($a->page_contact['url']); + $this->owner_photo = $a->page_contact['thumb']; + $this->owner_name = $a->page_contact['name']; + $this->set_template('wall2wall'); + $this->wall_to_wall = true; + } + } + else if($this->get_data_value('owner-link')) { + + $owner_linkmatch = (($this->get_data_value('owner-link')) && link_compare($this->get_data_value('owner-link'),$this->get_data_value('author-link'))); + $alias_linkmatch = (($this->get_data_value('alias')) && link_compare($this->get_data_value('alias'),$this->get_data_value('author-link'))); + $owner_namematch = (($this->get_data_value('owner-name')) && $this->get_data_value('owner-name') == $this->get_data_value('author-name')); + if((! $owner_linkmatch) && (! $alias_linkmatch) && (! $owner_namematch)) { + + // The author url doesn't match the owner (typically the contact) + // and also doesn't match the contact alias. + // 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 + // seeing "Bob Smith to Bob Smith via Wall-to-wall" and you know darn + // well that it's the same Bob Smith. + + // But it could be somebody else with the same name. It just isn't highly likely. + + + $this->owner_photo = $this->get_data_value('owner-avatar'); + $this->owner_name = $this->get_data_value('owner-name'); + $this->set_template('wall2wall'); + $this->wall_to_wall = true; + // If it is our contact, use a friendly redirect link + if((link_compare($this->get_data_value('owner-link'),$this->get_data_value('url'))) + && ($this->get_data_value('network') === NETWORK_DFRN)) { + $this->owner_url = $this->get_redirect_url(); + } + else + $this->owner_url = zrl($this->get_data_value('owner-link')); + } + } + } + + if(!$this->wall_to_wall) { + $this->set_template('wall'); + $this->owner_url = ''; + $this->owner_photo = ''; + $this->owner_name = ''; + } + } + + private function is_wall_to_wall() { + return $this->wall_to_wall; + } + + private function get_owner_url() { + return $this->owner_url; + } + + private function get_owner_photo() { + return $this->owner_photo; + } + + private function get_owner_name() { + return $this->owner_name; + } } ?>