]> git.mxchange.org Git - quix0rs-gnu-social.git/blobdiff - classes/Notice.php
Merge branch 'inblob' of git@gitorious.org:~evan/statusnet/evans-mainline into inblob
[quix0rs-gnu-social.git] / classes / Notice.php
index 0bb3b861c7b46b88a9f2e4b7a39ba25b74a58082..6284b8ca518947c16c37560a9b61c982ac928614 100644 (file)
@@ -63,7 +63,7 @@ class Notice extends Memcached_DataObject
     public $created;                         // datetime  multiple_key not_null default_0000-00-00%2000%3A00%3A00
     public $modified;                        // timestamp   not_null default_CURRENT_TIMESTAMP
     public $reply_to;                        // int(4)
-    public $is_local;                        // tinyint(1)
+    public $is_local;                        // int(4)
     public $source;                          // varchar(32)
     public $conversation;                    // int(4)
     public $lat;                             // decimal(10,7)
@@ -125,8 +125,7 @@ class Notice extends Memcached_DataObject
                          'Fave',
                          'Notice_tag',
                          'Group_inbox',
-                         'Queue_item',
-                         'Notice_inbox');
+                         'Queue_item');
 
         foreach ($related as $cls) {
             $inst = new $cls();
@@ -214,7 +213,7 @@ class Notice extends Memcached_DataObject
             extract($options);
         }
 
-        if (empty($is_local)) {
+        if (!isset($is_local)) {
             $is_local = Notice::LOCAL_PUBLIC;
         }
 
@@ -289,21 +288,11 @@ class Notice extends Memcached_DataObject
         if (!empty($lat) && !empty($lon)) {
             $notice->lat = $lat;
             $notice->lon = $lon;
+        }
+
+        if (!empty($location_ns) && !empty($location_id)) {
             $notice->location_id = $location_id;
             $notice->location_ns = $location_ns;
-        } else if (!empty($location_ns) && !empty($location_id)) {
-            $location = Location::fromId($location_id, $location_ns);
-            if (!empty($location)) {
-                $notice->lat = $location->lat;
-                $notice->lon = $location->lon;
-                $notice->location_id = $location_id;
-                $notice->location_ns = $location_ns;
-            }
-        } else {
-            $notice->lat         = $profile->lat;
-            $notice->lon         = $profile->lon;
-            $notice->location_id = $profile->location_id;
-            $notice->location_ns = $profile->location_ns;
         }
 
         if (Event::handle('StartNoticeSave', array(&$notice))) {
@@ -514,17 +503,6 @@ class Notice extends Memcached_DataObject
                     unset($original);
                 }
 
-                $ni = new Notice_inbox();
-
-                $ni->notice_id = $this->id;
-
-                if ($ni->find()) {
-                    while ($ni->fetch()) {
-                        $tmk = common_cache_key('user:repeated_to_me:'.$ni->user_id);
-                        $cache->delete($tmk);
-                    }
-                }
-
                 $ni->free();
                 unset($ni);
             }
@@ -852,12 +830,8 @@ class Notice extends Memcached_DataObject
         return $ids;
     }
 
-    function addToInboxes()
+    function whoGets()
     {
-        // XXX: loads constants
-
-        $inbox = new Notice_inbox();
-
         $users = $this->getSubscribedUsers();
 
         // FIXME: kind of ignoring 'transitional'...
@@ -897,7 +871,14 @@ class Notice extends Memcached_DataObject
             }
         }
 
-        Notice_inbox::bulkInsert($this->id, $this->created, $ni);
+        return $ni;
+    }
+
+    function addToInboxes()
+    {
+        $ni = $this->whoGets();
+
+        Inbox::bulkInsert($this->id, array_keys($ni));
 
         return;
     }
@@ -1217,7 +1198,7 @@ class Notice extends Memcached_DataObject
 
         $idstr = $cache->get($idkey);
 
-        if (!empty($idstr)) {
+        if ($idstr !== false) {
             // Cache hit! Woohoo!
             $window = explode(',', $idstr);
             $ids = array_slice($window, $offset, $limit);
@@ -1226,7 +1207,7 @@ class Notice extends Memcached_DataObject
 
         $laststr = $cache->get($idkey.';last');
 
-        if (!empty($laststr)) {
+        if ($laststr !== false) {
             $window = explode(',', $laststr);
             $last_id = $window[0];
             $new_ids = call_user_func_array($fn, array_merge($args, array(0, NOTICE_CACHE_WINDOW,
@@ -1366,12 +1347,21 @@ class Notice extends Memcached_DataObject
     {
         $author = Profile::staticGet('id', $this->profile_id);
 
-        // FIXME: truncate on long repeats...?
-
         $content = sprintf(_('RT @%1$s %2$s'),
                            $author->nickname,
                            $this->content);
 
+        $maxlen = common_config('site', 'textlimit');
+        if ($maxlen > 0 && mb_strlen($content) > $maxlen) {
+            // Web interface and current Twitter API clients will
+            // pull the original notice's text, but some older
+            // clients and RSS/Atom feeds will see this trimmed text.
+            //
+            // Unfortunately this is likely to lose tags or URLs
+            // at the end of long notices.
+            $content = mb_substr($content, 0, $maxlen - 4) . ' ...';
+        }
+
         return self::saveNew($repeater_id, $content, $source,
                              array('repeat_of' => $this->id));
     }
@@ -1386,7 +1376,7 @@ class Notice extends Memcached_DataObject
             $ids = $this->_repeatStreamDirect($limit);
         } else {
             $idstr = $cache->get(common_cache_key('notice:repeats:'.$this->id));
-            if (!empty($idstr)) {
+            if ($idstr !== false) {
                 $ids = explode(',', $idstr);
             } else {
                 $ids = $this->_repeatStreamDirect(100);
@@ -1429,4 +1419,47 @@ class Notice extends Memcached_DataObject
 
         return $ids;
     }
+
+    function locationOptions($lat, $lon, $location_id, $location_ns, $profile = null)
+    {
+        $options = array();
+
+        if (!empty($location_id) && !empty($location_ns)) {
+
+            $options['location_id'] = $location_id;
+            $options['location_ns'] = $location_ns;
+
+            $location = Location::fromId($location_id, $location_ns);
+
+            if (!empty($location)) {
+                $options['lat'] = $location->lat;
+                $options['lon'] = $location->lon;
+            }
+
+        } else if (!empty($lat) && !empty($lon)) {
+
+            $options['lat'] = $lat;
+            $options['lon'] = $lon;
+
+            $location = Location::fromLatLon($lat, $lon);
+
+            if (!empty($location)) {
+                $options['location_id'] = $location->location_id;
+                $options['location_ns'] = $location->location_ns;
+            }
+        } else if (!empty($profile)) {
+
+            if (isset($profile->lat) && isset($profile->lon)) {
+                $options['lat'] = $profile->lat;
+                $options['lon'] = $profile->lon;
+            }
+
+            if (isset($profile->location_id) && isset($profile->location_ns)) {
+                $options['location_id'] = $profile->location_id;
+                $options['location_ns'] = $profile->location_ns;
+            }
+        }
+
+        return $options;
+    }
 }