diff --git a/database.go b/database.go index df300ce2..e8cac92b 100644 --- a/database.go +++ b/database.go @@ -875,7 +875,7 @@ func (db *datastore) UpdateCollection(c *SubmittedCollection, alias string) erro // WHERE values q.Where("alias = ? AND owner_id = ?", alias, c.OwnerID) - if q.Updates == "" { + if q.Updates == "" && c.Monetization == nil { return ErrPostNoUpdatableVals } @@ -932,10 +932,12 @@ func (db *datastore) UpdateCollection(c *SubmittedCollection, alias string) erro } // Update rest of the collection data - res, err = db.Exec("UPDATE collections SET "+q.Updates+" WHERE "+q.Conditions, q.Params...) - if err != nil { - log.Error("Unable to update collection: %v", err) - return err + if q.Updates != "" { + res, err = db.Exec("UPDATE collections SET "+q.Updates+" WHERE "+q.Conditions, q.Params...) + if err != nil { + log.Error("Unable to update collection: %v", err) + return err + } } rowsAffected, _ = res.RowsAffected() diff --git a/pad.go b/pad.go index b64c2825..d1503347 100644 --- a/pad.go +++ b/pad.go @@ -90,6 +90,7 @@ func handleViewPad(app *App, w http.ResponseWriter, r *http.Request) error { } appData.EditCollection, err = app.db.GetCollectionForPad(collAlias) if err != nil { + log.Error("Unable to GetCollectionForPad: %s", err) return err } appData.EditCollection.hostName = app.cfg.App.Host @@ -101,9 +102,10 @@ func handleViewPad(app *App, w http.ResponseWriter, r *http.Request) error { if appData.Post.Gone { return ErrPostUnpublished - } else if appData.Post.Found && appData.Post.Content != "" { + } else if appData.Post.Found && (appData.Post.Title != "" || appData.Post.Content != "") { // Got the post } else if appData.Post.Found { + log.Error("Found post, but other conditions failed.") return ErrPostFetchError } else { return ErrPostNotFound diff --git a/posts.go b/posts.go index 107f0c1a..f60c3af9 100644 --- a/posts.go +++ b/posts.go @@ -125,6 +125,7 @@ type ( Views int64 `json:"views"` Owner *PublicUser `json:"-"` IsOwner bool `json:"-"` + URL string `json:"url,omitempty"` Collection *CollectionObj `json:"collection,omitempty"` } @@ -396,7 +397,7 @@ func handleViewPost(app *App, w http.ResponseWriter, r *http.Request) error { } // Check if post has been unpublished - if content == "" { + if title == "" && content == "" { gone = true if isJSON { @@ -545,9 +546,14 @@ func newPost(app *App, w http.ResponseWriter, r *http.Request) error { t := "" p.Title = &t } - if strings.TrimSpace(*(p.Content)) == "" { + if strings.TrimSpace(*(p.Title)) == "" && (p.Content == nil || strings.TrimSpace(*(p.Content)) == "") { return ErrNoPublishableContent } + if p.Content == nil { + c := "" + p.Content = &c + } + } else { post := r.FormValue("body") appearance := r.FormValue("font") @@ -612,6 +618,7 @@ func newPost(app *App, w http.ResponseWriter, r *http.Request) error { newPost.extractData() newPost.OwnerName = username + newPost.URL = newPost.CanonicalURL(app.cfg.App.Host) // Write success now response := impart.WriteSuccess(w, newPost, http.StatusCreated) @@ -1124,7 +1131,7 @@ func (p *Post) processPost() PublicPost { func (p *PublicPost) CanonicalURL(hostName string) string { if p.Collection == nil || p.Collection.Alias == "" { - return hostName + "/" + p.ID + return hostName + "/" + p.ID + ".md" } return p.Collection.CanonicalURL() + p.Slug.String } @@ -1258,10 +1265,22 @@ func getRawPost(app *App, friendlyID string) *RawPost { case err == sql.ErrNoRows: return &RawPost{Content: "", Found: false, Gone: false} case err != nil: + log.Error("Unable to fetch getRawPost: %s", err) return &RawPost{Content: "", Found: true, Gone: false} } - return &RawPost{Title: title, Content: content, Font: font, Created: created, Updated: updated, IsRTL: isRTL, Language: lang, OwnerID: ownerID.Int64, Found: true, Gone: content == ""} + return &RawPost{ + Title: title, + Content: content, + Font: font, + Created: created, + Updated: updated, + IsRTL: isRTL, + Language: lang, + OwnerID: ownerID.Int64, + Found: true, + Gone: content == "" && title == "", + } } @@ -1284,6 +1303,7 @@ func getRawCollectionPost(app *App, slug, collAlias string) *RawPost { case err == sql.ErrNoRows: return &RawPost{Content: "", Found: false, Gone: false} case err != nil: + log.Error("Unable to fetch getRawCollectionPost: %s", err) return &RawPost{Content: "", Found: true, Gone: false} } @@ -1299,7 +1319,7 @@ func getRawCollectionPost(app *App, slug, collAlias string) *RawPost { Language: lang, OwnerID: ownerID.Int64, Found: true, - Gone: content == "", + Gone: content == "" && title == "", Views: views, } } diff --git a/read.go b/read.go index b11e657c..7fb700ec 100644 --- a/read.go +++ b/read.go @@ -315,7 +315,6 @@ func viewLocalTimelineFeed(app *App, w http.ResponseWriter, req *http.Request) e author = p.Collection.Title } else { author = "Anonymous" - permalink += ".md" } i := &Item{ Id: app.cfg.App.Host + "/read/a/" + p.ID, diff --git a/templates/classic.tmpl b/templates/classic.tmpl index 42a6bce3..ecc8cb9e 100644 --- a/templates/classic.tmpl +++ b/templates/classic.tmpl @@ -283,7 +283,7 @@ */ $btnPublish.on('click', function(e) { e.preventDefault(); - if (!publishing && $content.el.value) { + if (!publishing && ($title.el.value || $content.el.value)) { var title = $title.el.value; var content = $content.el.value; publish(title, content, selectedFont);