Example #1
0
 /**
  * Gets droplets whose database id is above the specified minimum
  *
  * @param int $user_id Logged in user id	
  * @param int $river_id Database ID of the river
  * @param int $since_id Lower limit of the droplet id
  * @return array
  */
 public static function get_droplets_since_id($user_id, $river_id, $since_id, $filters = array(), $photos = FALSE)
 {
     // Check the cache
     $request_hash = hash('sha256', $user_id . $river_id . $since_id . var_export($filters, TRUE) . ($photos ? 1 : 0));
     $cache_key = 'river_drops_since_' . $request_hash;
     // If the cache key is available (with default value set to FALSE)
     if ($droplets = Cache::instance()->get($cache_key, FALSE)) {
         return $droplets;
     }
     $droplets = array('total' => 0, 'droplets' => array());
     $river_orm = ORM::factory('river', $river_id);
     if ($river_orm->loaded()) {
         $query = DB::select(array('droplets.id', 'id'), array('rivers_droplets.id', 'sort_id'), 'droplet_title', 'droplet_content', 'droplets.channel', 'identity_name', 'identity_avatar', array(DB::expr('DATE_FORMAT(droplets.droplet_date_pub, "%b %e, %Y %H:%i UTC")'), 'droplet_date_pub'), array('user_scores.score', 'user_score'), array('links.url', 'original_url'), 'comment_count')->from('droplets')->join('rivers_droplets', 'INNER')->on('rivers_droplets.droplet_id', '=', 'droplets.id')->join('identities', 'INNER')->on('droplets.identity_id', '=', 'identities.id')->where('droplets.processing_status', '=', Model_Droplet::PROCESSING_STATUS_COMPLETE)->where('rivers_droplets.river_id', '=', $river_id)->where('rivers_droplets.id', '>', $since_id);
         if ($photos) {
             $query->where('droplets.droplet_image', '>', 0);
         }
         // Apply the river filters
         Model_Droplet::apply_droplets_filter($query, $filters, $user_id, $river_orm);
         // Left join for user scores
         $query->join(array('droplet_scores', 'user_scores'), 'LEFT')->on('user_scores.droplet_id', '=', DB::expr('droplets.id AND user_scores.user_id = ' . $user_id))->join('links', 'LEFT')->on('links.id', '=', 'droplets.original_url');
         // Group, order and limit
         $query->order_by('rivers_droplets.id', 'ASC')->limit(self::DROPLETS_PER_PAGE)->offset(0);
         $droplets['droplets'] = $query->execute()->as_array();
         // Encode content and title as utf8 in case they arent
         foreach ($droplets['droplets'] as &$droplet) {
             Model_Droplet::utf8_encode($droplet);
         }
         // Populate the metadata
         Model_Droplet::populate_metadata($droplets['droplets'], $river_orm->account_id);
     }
     // Cache the drops
     if (!empty($droplets['droplets'])) {
         Cache::instance()->set($cache_key, $droplets);
     }
     return $droplets;
 }