github.com/bitcubate/cryptojournal@v1.2.5-0.20171102134152-f578b3d788ab/src/stories/actions/home.go (about)

     1  package storyactions
     2  
     3  import (
     4  	"fmt"
     5  	"net/http"
     6  	"strings"
     7  
     8  	"github.com/fragmenta/mux"
     9  	"github.com/fragmenta/server"
    10  	"github.com/fragmenta/server/config"
    11  	"github.com/fragmenta/view"
    12  
    13  	"github.com/bitcubate/cryptojournal/src/lib/session"
    14  	"github.com/bitcubate/cryptojournal/src/lib/stats"
    15  	"github.com/bitcubate/cryptojournal/src/stories"
    16  )
    17  
    18  // HandleHome displays a list of stories using gravity to order them
    19  // used for the home page for gravity rank see votes.go
    20  // responds to GET /
    21  func HandleHome(w http.ResponseWriter, r *http.Request) error {
    22  	stats.RegisterHit(r)
    23  
    24  	// Build a query
    25  	q := stories.Query().Limit(listLimit)
    26  
    27  	// Select only above 0 points,  Order by rank, then points, then name
    28  	q.Where("points > 0").Order("rank desc, points desc, id desc")
    29  
    30  	// Fetch the  params
    31  	params, err := mux.Params(r)
    32  	if err != nil {
    33  		return server.InternalError(err)
    34  	}
    35  
    36  	// Set the offset in pages if we have one
    37  	page := int(params.GetInt("page"))
    38  	if page > 0 {
    39  		q.Offset(listLimit * page)
    40  	}
    41  
    42  	// Fetch the stories
    43  	results, err := stories.FindAll(q)
    44  	if err != nil {
    45  		return server.InternalError(err)
    46  	}
    47  
    48  	// Render the template
    49  	view := view.NewRenderer(w, r)
    50  	view.AddKey("page", page)
    51  	view.AddKey("stories", results)
    52  	view.Template("stories/views/index.html.got")
    53  	view.AddKey("pubdate", storiesModTime(results))
    54  	view.AddKey("meta_title", fmt.Sprintf("%s - %s", config.Get("meta_title"), config.Get("meta_desc")))
    55  	view.AddKey("meta_desc", config.Get("meta_desc"))
    56  	view.AddKey("meta_keywords", config.Get("meta_keywords"))
    57  	view.AddKey("meta_foot", config.Get("meta_desc"))
    58  	view.AddKey("meta_rss", storiesXMLPath(w, r))
    59  	view.AddKey("userCount", stats.UserCount())
    60  	view.AddKey("currentUser", session.CurrentUser(w, r))
    61  	// For rss feeds use xml templates
    62  	if strings.HasSuffix(r.URL.Path, ".xml") {
    63  		view.Layout("")
    64  		view.Template("stories/views/index.xml.got")
    65  	}
    66  
    67  	return view.Render()
    68  
    69  }