summaryrefslogtreecommitdiff
path: root/doc/README_FOR_APP
diff options
context:
space:
mode:
Diffstat (limited to 'doc/README_FOR_APP')
-rw-r--r--doc/README_FOR_APP99
1 files changed, 38 insertions, 61 deletions
diff --git a/doc/README_FOR_APP b/doc/README_FOR_APP
index ef03d13..5d280f3 100644
--- a/doc/README_FOR_APP
+++ b/doc/README_FOR_APP
@@ -4,8 +4,9 @@ CCCMS
4 4
5===Nodes 5===Nodes
6 6
7The structure of the cccms is built from Node objects which live within a nested 7The whole structure of the website is built from nodes. They live within a
8set. Therefor a given node has parents, children, descendants etc. 8nested set structure. Therefor a given node has parents, children, descendants
9etc.
9 10
10The position of a node within the nested set corresponds directly to the URL 11The position of a node within the nested set corresponds directly to the URL
11under which that node is accessible: 12under which that node is accessible:
@@ -15,7 +16,7 @@ root
15 \__2009 16 \__2009
16 \___ultra_important_news 17 \___ultra_important_news
17 18
18=> http://domain/de/updates/2009/ultra_important_news 19http://domain/de/updates/2009/ultra_important_news
19 20
20Note that the first parameter after the domain is the locale. Everything after 21Note that the first parameter after the domain is the locale. Everything after
21the locale identifier is the unique path of a given node. The unique path itself 22the locale identifier is the unique path of a given node. The unique path itself
@@ -28,25 +29,42 @@ is then saved on the node object itself, allowing the system to retrieve a
28node simply by looking for the right url in the unique_path column. This is a 29node simply by looking for the right url in the unique_path column. This is a
29lot faster then walking down the tree. 30lot faster then walking down the tree.
30 31
32Nodes are really just proxy objects. They point to information but they don't
33hold that information themselves. Instead they have pages associated to them.
34When you want to render a particular node, you actually render a page associated
35to that node. When multiple pages are attached to a node, they act as one page
36with many revisions. The node itself holds the pointer to current or head
37revision.
38
31===Pages 39===Pages
32 40
33As the nodes only built the structure, another object is necessary to actually 41Although there is really one Page class, the pages associated to one node differ
34hold all the contents. This object is called a page and is associated to a node 42slightly. Obviously there is a slight difference between the head and the other
35via a one-to-many association. A node can have multiple pages associated to it. 43revisions. While the head is always the most recent page which is publicly
36The node is actually a proxy for the pages behind it, and the pages act as a 44available, all the older revisions are only kind of a history.
37versioned page. By default, if you retrieve a node from the database by its 45
38unique path and ask this node for a page, the node would return the most recent 46Now when a user wants to modify or edit the content of the head revision he or
39one. It is also possible to get a page from a node, supplying a revision number. 47she is editing a new revision instead. This new revision is considered a draft
40The node object would then retrieve the associated page with the corresponding 48and has the current content of the head revision copied onto itself.
41revision number. For convenience purposes, the most recent page revision, in 49
42the scope of a node, is flagged as the head of this collection. This is 50====Draft
43primarily for making certain queries a lot easier where you only want to select 51
44upon the current pages in the db rather than on all. 52A draft has an author attached to it which makes sure that only the creator of
53that draft is able to edit it. This is a form of pessimistic locking as it
54prevents more than one user from editing and saving the same page.
55
56However, if an author should choose to abandon his draft or to let somebody else
57finish it, the author can withdraw his lock. In this case, the draft has no
58longer an author associated to itself which enables another user to edit this
59draft.
60
61To abandon or revert a draft, the author can also delete it entirely so that
62when another user is editing, he or she would get a fresh copy from the current
63head revision.
45 64
46It is important to know that all the associations of a page, such as tags, 65Of course a admin user can always override or remove locks on drafts. In case
47authors etc, must be copied one a new revision of a page is created. The Page 66an author created a draft but simply didn't care anymore, an admin could remove
48class is providing a deep_copy method to make sure everything important is 67that draft or the lock on it, enabling other users to edit that page again.
49copied.
50 68
51===Tags 69===Tags
52 70
@@ -93,45 +111,4 @@ extract db/updates.tbz
93start a script/console and execute the following commands: 111start a script/console and execute the following commands:
94 112
95i = UpdateImporter.new("#{RAILS_ROOT}/db/updates") 113i = UpdateImporter.new("#{RAILS_ROOT}/db/updates")
96i.import_xml 114i.import_xml \ No newline at end of file
97
98===============================================================================
99Node
100
101The whole structure of the website is built from nodes. They live within a
102nested set structure. Nodes are really just proxy objects though. They point to
103information but they don't hold that information themselves. Instead they have
104pages associated to them. When you want to render a particular node, you
105actually render a page associated to that node. When multiple pages are attached
106to a node, they act as one page with many revisions. The node itself holds the
107pointer to current or head revision.
108
109Page
110
111Although there is really on Page class, the pages associated to one node differ
112slightly. Obviously there is a slight difference between the head and the other
113revisions. While the head is always the most recent page which is publicly
114available, all the older revisions are only kind of a history.
115
116Now when a user wants to modify or edit the content of the head revision he or
117she is editing a new revision instead. This new revision is considered a draft
118and has the current content of the head revision copied onto itself.
119
120Draft
121
122A draft has an author attached to it which makes sure that only the creator of
123that draft is able to edit it. This is a form of pessimistic locking as it
124prevents more than one user from editing and saving the same page.
125
126However, if an author should choose to abandon his draft or to let somebody else
127finish it, the author can withdraw his lock. In this case, the draft has no
128longer an author associated to itself which enables another user to edit this
129draft.
130
131To abandon or revert a draft, the author can also delete it entirely so that
132when another user is editing, he or she would get a fresh copy from the current
133head revision.
134
135Of course a admin user can always override or remove locks on drafts. In case
136an author created a draft but simply didn't care anymore, an admin could remove
137that draft or the lock on it enabling other users to edit that page again. \ No newline at end of file