note
description: "[
Request handler related to
/admin/taxonomy/term/{termid}
]"
date: "$Date$"
revision: "$revision$"
class
TAXONOMY_TERM_ADMIN_HANDLER
inherit
CMS_MODULE_HANDLER [CMS_TAXONOMY_API]
rename
module_api as taxonomy_api
end
WSF_URI_HANDLER
rename
execute as uri_execute,
new_mapping as new_uri_mapping
end
WSF_URI_TEMPLATE_HANDLER
rename
execute as uri_template_execute,
new_mapping as new_uri_template_mapping
select
new_uri_template_mapping
end
WSF_RESOURCE_HANDLER_HELPER
redefine
do_get,
do_post
end
REFACTORING_HELPER
CMS_API_ACCESS
create
make
feature -- execute
execute (req: WSF_REQUEST; res: WSF_RESPONSE)
-- Execute request handler for any kind of mapping.
do
execute_methods (req, res)
end
uri_execute (req: WSF_REQUEST; res: WSF_RESPONSE)
-- Execute request handler for URI mapping.
do
execute (req, res)
end
uri_template_execute (req: WSF_REQUEST; res: WSF_RESPONSE)
-- Execute request handler for URI-template mapping.
do
execute (req, res)
end
feature -- HTTP Methods
do_post (req: WSF_REQUEST; res: WSF_RESPONSE)
local
l_page: CMS_RESPONSE
tid: INTEGER_64
s: STRING
f: CMS_FORM
t: detachable CMS_TERM
l_parents: detachable CMS_VOCABULARY_COLLECTION
do
if
attached {WSF_STRING} req.path_parameter ("termid") as p_termid and then
p_termid.is_integer
then
tid := p_termid.value.to_integer_64
if tid > 0 then
t := taxonomy_api.term_by_id (tid)
end
end
-- Responding with `main_content_html (l_page)'.
create {GENERIC_VIEW_CMS_RESPONSE} l_page.make (req, res, api)
if l_page.has_permission ("admin taxonomy") then
if t = Void then
l_page.set_title ("New term ...")
create t.make ("")
else
l_page.set_title (t.text)
end
create s.make_empty
f := edit_form (t, l_page, req)
f.process (l_page)
if
attached f.last_data as fd and then
fd.is_valid
then
if attached fd.string_item ("op") as l_op and then l_op.same_string ("Save changes") then
if attached fd.string_item ("text") as l_text then
t.set_text (l_text)
l_page.set_title (t.text)
end
if attached fd.string_item ("description") as l_description then
t.set_description (l_description)
end
if attached fd.string_item ("weight") as l_weight and then l_weight.is_integer then
t.set_weight (l_weight.to_integer)
end
taxonomy_api.save_term (t, Void)
if taxonomy_api.has_error then
fd.report_error ("Term creation failed!")
else
l_page.add_success_message ("Term creation succeed.")
s.append ("
View term: ")
s.append (l_page.link (t.text, api.administration_path_location ("taxonomy/term/" + t.id.out), Void))
s.append ("
")
if
attached fd.table_item ("vocabularies") as voc_tb and then
attached taxonomy_api.vocabularies (0, 0) as l_vocabularies
then
l_parents := taxonomy_api.vocabularies_for_term (t)
across
voc_tb as vid_ic
until
taxonomy_api.has_error
loop
if attached l_vocabularies.item_by_id (vid_ic.item.string_representation.to_integer_64) as v then
if l_parents /= Void and then attached l_parents.item_by_id (v.id) as l_v then
-- Already as parent!
l_parents.remove (l_v)
else
taxonomy_api.save_term (t, v)
l_vocabularies.remove (v)
end
end
end
if l_parents /= Void then
across
l_parents as v_ic
until
taxonomy_api.has_error
loop
taxonomy_api.remove_term_from_vocabulary (t, v_ic.item)
end
end
end
-- l_page.set_redirection (l_page.location)
end
else
fd.report_error ("Invalid form data!")
end
end
f.append_to_html (l_page.wsf_theme, s)
l_page.set_main_content (s)
l_page.execute
else
send_access_denied (req, res)
end
end
do_get (req: WSF_REQUEST; res: WSF_RESPONSE)
--
local
l_page: CMS_RESPONSE
tid: INTEGER_64
s: STRING
f: CMS_FORM
t: detachable CMS_TERM
do
if
attached {WSF_STRING} req.path_parameter ("termid") as p_termid and then
p_termid.is_integer
then
tid := p_termid.value.to_integer_64
if tid > 0 then
t := taxonomy_api.term_by_id (tid)
end
end
-- Responding with `main_content_html (l_page)'.
create {GENERIC_VIEW_CMS_RESPONSE} l_page.make (req, res, api)
if l_page.has_permission ("admin taxonomy") then
if t = Void then
l_page.set_title ("Create term ...")
create t.make ("")
else
l_page.set_title (t.text)
end
create s.make_empty
f := edit_form (t, l_page, req)
f.append_to_html (l_page.wsf_theme, s)
l_page.set_main_content (s)
l_page.execute
else
send_access_denied (req, res)
end
end
edit_form (t: CMS_TERM; a_page: CMS_RESPONSE; req: WSF_REQUEST): CMS_FORM
local
f: CMS_FORM
voc: detachable CMS_VOCABULARY
w_tf: WSF_FORM_TEXT_INPUT
w_txt: WSF_FORM_TEXTAREA
w_set: WSF_FORM_FIELD_SET
w_cb: WSF_FORM_CHECKBOX_INPUT
l_parents: detachable CMS_VOCABULARY_COLLECTION
do
create f.make (req.percent_encoded_path_info, "taxonomy")
if t.has_id then
f.extend_html_text (a_page.link ("View associated entities", "taxonomy/term/" + t.id.out, Void))
end
create w_tf.make_with_text ("text", t.text)
w_tf.set_is_required (True)
w_tf.set_label ("Text")
f.extend (w_tf)
create w_txt.make ("description")
w_txt.set_label ("Description")
w_txt.set_rows (3)
w_txt.set_cols (60)
if attached t.description as l_desc then
w_txt.set_text_value (api.html_encoded (l_desc))
end
w_txt.set_description ("Description of the terms; can be used by modules or administration.")
f.extend (w_txt)
create w_tf.make_with_text ("weight", t.weight.out)
w_tf.set_label ("Weight")
w_tf.set_description ("Terms are sorted in ascending order by weight.")
f.extend (w_tf)
if attached taxonomy_api.vocabularies (0, 0) as vocs then
if t.has_id then
l_parents := taxonomy_api.vocabularies_for_term (t)
end
create w_set.make
w_set.set_legend ("Associated vocabularies")
across
vocs as ic
loop
voc := ic.item
create w_cb.make_with_value ("vocabularies[]", ic.item.id.out)
w_cb.set_title (voc.name)
if
l_parents /= Void and then
across l_parents as p_ic some p_ic.item.id = ic.item.id end
then
w_cb.set_checked (True)
end
w_set.extend (w_cb)
end
if w_set.count > 0 then
f.extend (w_set)
end
end
f.extend (create {WSF_FORM_SUBMIT_INPUT}.make_with_text ("op", "Save changes"))
Result := f
end
end