Просмотр исходного кода

fixing "missing" comments when they were posted during the same second

El RIDO 10 лет назад
Родитель
Сommit
512b3d1172
3 измененных файлов с 23 добавлено и 2 удалено
  1. 20 0
      lib/zerobin/abstract.php
  2. 2 1
      lib/zerobin/data.php
  3. 1 1
      lib/zerobin/db.php

+ 20 - 0
lib/zerobin/abstract.php

@@ -122,4 +122,24 @@ abstract class zerobin_abstract
      * @return void
      */
     abstract public function existsComment($pasteid, $parentid, $commentid);
+
+    /**
+     * Get next free slot for comment from postdate.
+     *
+     * @access public
+     * @param  array $comments
+     * @param  int|string $postdate
+     * @return void
+     */
+    protected function getOpenSlot(&$comments, $postdate)
+    {
+        if (array_key_exists($postdate, $comments))
+        {
+            $parts = explode('.', $postdate, 2);
+            if (!array_key_exists(1, $parts)) $parts[1] = 0;
+            ++$parts[1];
+            return $this->addComment($comments, implode('.', $parts));
+        }
+        return $postdate;
+    }
 }

+ 2 - 1
lib/zerobin/data.php

@@ -181,7 +181,8 @@ class zerobin_data extends zerobin_abstract
                     $comment->meta->parentid = $items[2];
 
                     // Store in array
-                    $comments[$comment->meta->postdate] = $comment;
+                    $key = $this->getOpenSlot($comments, (int) $comment->meta->postdate);
+                    $comments[$key] = $comment;
                 }
             }
             $dir->close();

+ 1 - 1
lib/zerobin/db.php

@@ -378,7 +378,7 @@ class zerobin_db extends zerobin_abstract
         {
             foreach ($rows as $row)
             {
-                $i = (int) $row['postdate'];
+                $i = $this->getOpenSlot($comments, (int) $row['postdate']);
                 $comments[$i] = clone $commentTemplate;
                 $comments[$i]->data = $row['data'];
                 $comments[$i]->meta->nickname = $row['nickname'];