Files
ROC/modules/blog/handler/blog_user_handler.e
Jocelyn Fiat 67f6591851 Better control on path alias.
If user has permission to edit, provide a text input, otherwise just a label if path are required.
Reviewed html generated for taxonomy field in node edit form.
Improved the blog entries list by providing (if permitted) link to blog entry creation, and link to the user entries or all entries.
2017-03-06 21:27:35 +01:00

157 lines
4.1 KiB
Plaintext

note
description: "[
Request handler related to
/blog/{user}/
or /blog/{user}?page={page}.
Displays all posts of the given user
]"
contributor: "Dario Bösch <daboesch@student.ethz.ch>"
date: "$Date$"
revision: "$Revision 96616$"
fixme: "redesign pagination... see CMS_PAGINATION_GENERATOR."
class
BLOG_USER_HANDLER
inherit
BLOG_HANDLER
redefine
do_get,
posts,
total_entries,
append_page_title_html_to,
append_user_related_html_to,
base_path
end
create
make
feature -- Global Variables
user: detachable CMS_USER
feature -- HTTP Methods
do_get (req: WSF_REQUEST; res: WSF_RESPONSE)
-- <Precursor>
local
l_error: NOT_FOUND_ERROR_CMS_RESPONSE
do
check user_void: user = Void end
if attached user_from_request (req) as l_user then
user := l_user
-- Output the results, similar as in the blog hanlder (but with other queries)
Precursor (req, res)
else
-- Throw a bad request error because the user is not valid
create l_error.make (req, res, api)
if attached user_parameter (req) as l_user_id then
l_error.set_main_content ("<h1>Error</h1>User with id " + api.html_encoded (l_user_id) + " not found!</h1>")
else
l_error.set_main_content ("<h1>Error</h1>User not found!</h1>")
end
l_error.execute
end
user := Void
end
feature -- Query
user_from_request (req: WSF_REQUEST): detachable CMS_USER
-- Eventual user with given id in the path of request `req'.
local
uid: INTEGER_64
do
if
attached user_parameter (req) as l_user_id and then
not l_user_id.is_whitespace
then
if l_user_id.is_integer_64 then
uid := l_user_id.to_integer_64
if uid > 0 then
Result := api.user_api.user_by_id (uid)
end
else
Result := api.user_api.user_by_name (l_user_id)
end
else
-- Missing or invalid user id.
end
end
user_parameter (req: WSF_REQUEST): detachable STRING_32
-- User id from path /blog/{user}.
-- Unsigned integer since negative ids are not allowed.
-- If no valid id can be read it returns -1
do
if attached {WSF_STRING} req.path_parameter ("user") as l_user_id then
Result := l_user_id.value
end
end
posts: LIST [CMS_BLOG]
-- Blog posts to display on given page.
-- Filters out the posts of the current user.
do
if attached user as l_user then
Result := blog_api.blogs_from_user_order_created_desc_limited (l_user, entries_per_page, entries_per_page * (page_number - 1))
else
create {ARRAYED_LIST [CMS_BLOG]} Result.make (0)
end
end
total_entries : NATURAL_32
-- Returns the number of total entries/posts of the current user
do
if attached user as l_user then
Result := blog_api.blogs_count_from_user (l_user).to_natural_32
else
Result := Precursor
end
end
feature -- HTML Output
append_page_title_html_to (a_page: CMS_RESPONSE; a_output: STRING)
-- Returns the title of the page as a html string. It shows the current page number and the name of the current user
local
l_title: STRING
do
create l_title.make_from_string ("Blog entries from ")
if attached user as l_user then
l_title.append (html_encoded (a_page.user_profile_name (l_user)))
else
l_title.append ("unknown user")
end
if multiple_pages_needed then
l_title.append (" (Page " + page_number.out + " of " + pages_count.out + ")")
-- Get the posts from the current page (limited by entries per page)
end
a_page.set_title (l_title)
-- a_output.append ("<h2>" + l_title + "</h2>")
end
append_user_related_html_to (a_page: CMS_RESPONSE; a_output: STRING)
do
if attached api.user as u and api.has_permission ("create blog") then
a_page.add_to_primary_tabs (a_page.local_link ("Create a new blog entry", "node/add/blog"))
end
a_page.add_to_primary_tabs (a_page.local_link ("View all blog entries", "blogs/"))
end
base_path : STRING
-- Path to page listing all blogs.
-- If user is logged in, include user id
do
if attached user as l_user then
Result := "/blog/" + l_user.id.out
else
Result := Precursor
end
end
end