]> git.mxchange.org Git - friendica.git/commitdiff
Item: new methods check_wall_to_wall, is_wall_to_wall, get_owner_url, get_owner_photo...
authorDomovoy <domovoy@errlock.org>
Sun, 12 Aug 2012 15:20:38 +0000 (17:20 +0200)
committerDomovoy <domovoy@errlock.org>
Sun, 12 Aug 2012 15:20:38 +0000 (17:20 +0200)
object/Item.php

index ecf7aba596d39f777450cbfebe43eb268753e3b8..57a7ec0b220589c51c9e8ade9c2910241b22701b 100644 (file)
@@ -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;
+       }
 }
 ?>