function FlickrBucketsByDate()
    {
        // in 3.1 data list is immutable, hence the chaining
        $sqlbucketidsinorder = 'select distinct FlickrBucketID from (
	  select FlickrBucketID, FlickrPhoto.TakenAt from FlickrBucket
		INNER JOIN FlickrPhoto_FlickrBuckets ON FlickrBucketID = FlickrBucket.ID
		INNER JOIN FlickrPhoto ON FlickrPhoto.ID = FlickrPhoto_FlickrBuckets.FlickrPhotoID
		WHERE (FlickrSetID = ' . $this->ID . ')
		order by FlickrPhoto.TakenAt
	  ) as OrderedBuckets';
        $buckets = FlickrBucket::get()->filter(array('FlickrSetID' => $this->ID))->innerJoin('FlickrPhoto_FlickrBuckets', 'FlickrBucketID = FlickrBucket.ID')->innerJoin('FlickrPhoto', 'FlickrPhotoID = FlickrPhoto.ID')->sort('TakenAt');
        $result = new ArrayList();
        foreach ($buckets->getIterator() as $bucket) {
            $result->push($bucket);
        }
        $result->removeDuplicates();
        return $result;
    }
 public function createBucket()
 {
     $flickrPhotoIDs = $this->request->param('OtherID');
     $flickrSetID = Convert::raw2sql($this->request->param('ID'));
     $ajax_bucket_row = Convert::raw2sql($_GET['bucket_row']);
     $sanitizedIDs = Convert::raw2sql($flickrPhotoIDs);
     $flickrPhotos = FlickrPhoto::get()->where('ID in (' . $sanitizedIDs . ')');
     $flickrSet = FlickrSet::get()->where('ID=' . $flickrSetID)->first();
     $bucket = new FlickrBucket();
     $bucket->write();
     $bucketPhotos = $bucket->FlickrPhotos();
     foreach ($flickrPhotos as $fp) {
         $bucketPhotos->add($fp);
     }
     $bucket->FlickrSetID = $flickrSet->ID;
     $bucket->write();
     $result = array('bucket_id' => $bucket->ID, 'flickr_set_id' => $flickrSet->ID, 'ajax_bucket_row' => $ajax_bucket_row);
     echo json_encode($result);
     die;
     // abort render
 }