Added CMS_HOOK_RESPONSE_ALTER to give a last chance to alter the response before rendering. This hook should not be used, when there are other alternative hook that answer the need, but this is proposed for now, as a way to alter response by adding css, js url, ... Moved blog under official modules folder. Cleaned theme of demo example project. Renamed NODE_MODULE as CMS_NODE_MODULE.
116 lines
2.8 KiB
Plaintext
116 lines
2.8 KiB
Plaintext
note
|
|
description: "Storage extension for Blog nodes."
|
|
date: "$Date$"
|
|
revision: "$Revision$"
|
|
|
|
class
|
|
CMS_NODE_STORAGE_SQL_BLOG_EXTENSION
|
|
|
|
inherit
|
|
CMS_NODE_STORAGE_EXTENSION [CMS_BLOG]
|
|
|
|
CMS_PROXY_STORAGE_SQL
|
|
rename
|
|
sql_storage as node_storage
|
|
redefine
|
|
node_storage
|
|
end
|
|
|
|
create
|
|
make
|
|
|
|
feature {NONE} -- Initialization
|
|
|
|
node_storage: CMS_NODE_STORAGE_SQL
|
|
-- <Precursor>
|
|
|
|
feature -- Access
|
|
|
|
content_type: STRING
|
|
once
|
|
Result := {CMS_BLOG_NODE_TYPE}.name
|
|
end
|
|
|
|
feature -- Persistence
|
|
|
|
store (a_node: CMS_BLOG)
|
|
local
|
|
l_parameters: STRING_TABLE [detachable ANY]
|
|
l_new_tags: detachable STRING_32
|
|
l_previous_tags: detachable STRING_32
|
|
l_update: BOOLEAN
|
|
do
|
|
error_handler.reset
|
|
if attached api as l_api then
|
|
l_api.logger.put_information (generator + ".store", Void)
|
|
end
|
|
|
|
create l_parameters.make (2)
|
|
l_parameters.put (a_node.id, "nid")
|
|
l_parameters.put (a_node.revision, "revision")
|
|
|
|
sql_query (sql_select_blog_data, l_parameters)
|
|
if not has_error then
|
|
if sql_rows_count = 1 then
|
|
l_previous_tags := sql_read_string_32 (3)
|
|
l_update := True
|
|
end
|
|
if attached a_node.tags as l_tags and then not l_tags.is_empty then
|
|
create l_new_tags.make (0)
|
|
across
|
|
l_tags as ic
|
|
loop
|
|
if not l_new_tags.is_empty then
|
|
l_new_tags.append_character (',')
|
|
end
|
|
l_new_tags.append (ic.item)
|
|
end
|
|
else
|
|
l_new_tags := Void
|
|
end
|
|
l_parameters.put (l_new_tags, "tags")
|
|
if l_update and l_new_tags /~ l_previous_tags then
|
|
sql_change (sql_update_blog_data, l_parameters)
|
|
elseif l_new_tags /= Void then
|
|
sql_change (sql_insert_blog_data, l_parameters)
|
|
else
|
|
-- no blog data, means everything is empty.
|
|
end
|
|
end
|
|
end
|
|
|
|
load (a_node: CMS_BLOG)
|
|
local
|
|
l_parameters: STRING_TABLE [ANY]
|
|
n: INTEGER
|
|
do
|
|
error_handler.reset
|
|
create l_parameters.make (2)
|
|
l_parameters.put (a_node.id, "nid")
|
|
l_parameters.put (a_node.revision, "revision")
|
|
sql_query (sql_select_blog_data, l_parameters)
|
|
if not has_error then
|
|
n := sql_rows_count
|
|
if n = 1 then
|
|
-- nid, revision, parent
|
|
if
|
|
attached sql_read_string_32 (3) as l_tags and then
|
|
not l_tags.is_whitespace
|
|
then
|
|
-- FIXME: find a simple way to access the declared content types.
|
|
a_node.set_tags_from_string (l_tags)
|
|
end
|
|
else
|
|
check unique_data: n = 0 end
|
|
end
|
|
end
|
|
end
|
|
|
|
feature -- SQL
|
|
|
|
sql_select_blog_data: STRING = "SELECT nid, revision, tags FROM blog_post_nodes WHERE nid =:nid AND revision=:revision;"
|
|
sql_insert_blog_data: STRING = "INSERT INTO blog_post_nodes (nid, revision, tags) VALUES (:nid, :revision, :tags);"
|
|
sql_update_blog_data: STRING = "UPDATE blog_post_nodes SET nid=:nid, revision=:revision, tags=:tags WHERE nid=:nid AND revision=:revision;"
|
|
|
|
end
|