]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
implemented etag and last modified
authorCraig Andrews <candrews@integralblue.com>
Thu, 24 Sep 2009 17:48:38 +0000 (13:48 -0400)
committerCraig Andrews <candrews@integralblue.com>
Thu, 24 Sep 2009 17:48:38 +0000 (13:48 -0400)
plugins/Autocomplete/autocomplete.php

index 4379a86f28c64470d4f2b21b587e5334e56d394c..aa57b3915fd9b3e66ec81ea60170b8c4eacb34da 100644 (file)
@@ -47,10 +47,48 @@ class AutocompleteAction extends Action
 {
     private $result;
 
+    /**
+     * Last-modified date for page
+     *
+     * When was the content of this page last modified? Based on notice,
+     * profile, avatar.
+     *
+     * @return int last-modified date as unix timestamp
+     */
+    function lastModified()
+    {
+        $max=0;
+        foreach($this->users as $user){
+            $max = max($max,strtotime($user->modified),strtotime($user->profile->modified));
+        }
+        foreach($this->groups as $group){
+            $max = max($max,strtotime($group->modified));
+        }
+        return $max;
+    }
+
+    /**
+     * An entity tag for this page
+     *
+     * Shows the ETag for the page, based on the notice ID and timestamps
+     * for the notice, profile, and avatar. It's weak, since we change
+     * the date text "one hour ago", etc.
+     *
+     * @return string etag
+     */
+    function etag()
+    {
+        return '"' . implode(':', array($this->arg('action'),
+            crc32($this->arg('q')), //the actual string can have funny characters in we don't want showing up in the etag
+            $this->arg('limit'),
+            $this->lastModified())) . '"';
+    }
+
     function prepare($args)
     {
         parent::prepare($args);
-        $this->results = array();
+        $this->groups=array();
+        $this->users=array();
         $q = $this->arg('q');
         $limit = $this->arg('limit');
         if($limit > 200) $limit=200; //prevent DOS attacks
@@ -63,7 +101,8 @@ class AutocompleteAction extends Action
             $user->find();
             while($user->fetch()) {
                 $profile = Profile::staticGet($user->id);
-                $this->results[]=array('nickname' => $user->nickname, 'fullname'=> $profile->fullname, 'type'=>'user');
+                $user->profile=$profile;
+                $this->users[]=$user;
             }
         }
         if(substr($q,0,1)=='!'){
@@ -74,7 +113,7 @@ class AutocompleteAction extends Action
             $group->whereAdd('nickname like \'' . trim($group->escape($q), '\'') . '%\'');
             $group->find();
             while($group->fetch()) {
-                $this->results[]=array('nickname' => $group->nickname, 'fullname'=> $group->fullname, 'type'=>'group');
+                $this->groups[]=$group;
             }
         }
         return true;
@@ -83,7 +122,14 @@ class AutocompleteAction extends Action
     function handle($args)
     {
         parent::handle($args);
-        foreach($this->results as $result) {
+        $results = array();
+        foreach($this->users as $user){
+            $results[]=array('nickname' => $user->nickname, 'fullname'=> $user->profile->fullname, 'type'=>'user');
+        }
+        foreach($this->groups as $group){
+            $results[]=array('nickname' => $group->nickname, 'fullname'=> $group->fullname, 'type'=>'group');
+        }
+        foreach($results as $result) {
             print json_encode($result) . "\n";
         }
     }