Changesets can be listed by changeset number.
The Git repository is here.
- Revision:
- 344
- Log:
Massive changeset which brings the old, ROOL customised Instiki
version up to date, but without any ROOL customisations in this
latest checked-in version (which is 0.19.1). This is deliberate,
so that it's easy to see the changes made for the ROOL version
in a subsequent changeset. The 'app/views/shared' directory is not
part of Instiki but is kept to maintain the change history with
updated ROOL customisations, some of which involve the same files
in that same directory.
- Author:
- rool
- Date:
- Sat Mar 19 19:52:13 +0000 2011
- Size:
- 4493 Bytes
1 | class WikiReference < ActiveRecord::Base |
2 | |
3 | LINKED_PAGE = 'L' |
4 | WANTED_PAGE = 'W' |
5 | REDIRECTED_PAGE = 'R' |
6 | INCLUDED_PAGE = 'I' |
7 | CATEGORY = 'C' |
8 | AUTHOR = 'A' |
9 | FILE = 'F' |
10 | WANTED_FILE = 'E' |
11 | |
12 | belongs_to :page |
13 | validates_inclusion_of :link_type, :in => [LINKED_PAGE, WANTED_PAGE, REDIRECTED_PAGE, INCLUDED_PAGE, CATEGORY, AUTHOR, FILE, WANTED_FILE] |
14 | |
15 | def referenced_name |
16 | read_attribute(:referenced_name).as_utf8 |
17 | end |
18 | |
19 | def self.link_type(web, page_name) |
20 | if web.has_page?(page_name) || self.page_that_redirects_for(web, page_name) |
21 | LINKED_PAGE |
22 | else |
23 | WANTED_PAGE |
24 | end |
25 | end |
26 | |
27 | def self.pages_that_reference(web, page_name) |
28 | query = 'SELECT name FROM pages JOIN wiki_references ' + |
29 | 'ON pages.id = wiki_references.page_id ' + |
30 | 'WHERE wiki_references.referenced_name = ? ' + |
31 | "AND wiki_references.link_type in ('#{LINKED_PAGE}', '#{WANTED_PAGE}', '#{INCLUDED_PAGE}') " + |
32 | "AND pages.web_id = '#{web.id}'" |
33 | names = connection.select_all(sanitize_sql([query, page_name])).map { |row| row['name'] } |
34 | end |
35 | |
36 | def self.pages_that_link_to(web, page_name) |
37 | query = 'SELECT name FROM pages JOIN wiki_references ' + |
38 | 'ON pages.id = wiki_references.page_id ' + |
39 | 'WHERE wiki_references.referenced_name = ? ' + |
40 | "AND wiki_references.link_type in ('#{LINKED_PAGE}','#{WANTED_PAGE}') " + |
41 | "AND pages.web_id = '#{web.id}'" |
42 | names = connection.select_all(sanitize_sql([query, page_name])).map { |row| row['name'] } |
43 | end |
44 | |
45 | def self.pages_that_link_to_file(web, file_name) |
46 | query = 'SELECT name FROM pages JOIN wiki_references ' + |
47 | 'ON pages.id = wiki_references.page_id ' + |
48 | 'WHERE wiki_references.referenced_name = ? ' + |
49 | "AND wiki_references.link_type in ('#{FILE}') " + |
50 | "AND pages.web_id = '#{web.id}'" |
51 | names = connection.select_all(sanitize_sql([query, file_name])).map { |row| row['name'] } |
52 | end |
53 | |
54 | def self.pages_that_include(web, page_name) |
55 | query = 'SELECT name FROM pages JOIN wiki_references ' + |
56 | 'ON pages.id = wiki_references.page_id ' + |
57 | 'WHERE wiki_references.referenced_name = ? ' + |
58 | "AND wiki_references.link_type = '#{INCLUDED_PAGE}' " + |
59 | "AND pages.web_id = '#{web.id}'" |
60 | names = connection.select_all(sanitize_sql([query, page_name])).map { |row| row['name'] } |
61 | end |
62 | |
63 | def self.pages_redirected_to(web, page_name) |
64 | names = [] |
65 | redirected_pages = [] |
66 | page = web.page(page_name) |
67 | redirected_pages.concat page.redirects |
68 | redirected_pages.concat Thread.current[:page_redirects][page] if |
69 | Thread.current[:page_redirects] && Thread.current[:page_redirects][page] |
70 | redirected_pages.uniq.each { |name| names.concat self.pages_that_reference(web, name) } |
71 | names.uniq |
72 | end |
73 | |
74 | def self.page_that_redirects_for(web, page_name) |
75 | query = 'SELECT name FROM pages JOIN wiki_references ' + |
76 | 'ON pages.id = wiki_references.page_id ' + |
77 | 'WHERE wiki_references.referenced_name = ? ' + |
78 | "AND wiki_references.link_type = '#{REDIRECTED_PAGE}' " + |
79 | "AND pages.web_id = '#{web.id}'" |
80 | row = connection.select_one(sanitize_sql([query, page_name])) |
81 | row['name'].as_utf8 if row |
82 | end |
83 | |
84 | def self.pages_in_category(web, category) |
85 | query = |
86 | "SELECT name FROM pages JOIN wiki_references " + |
87 | "ON pages.id = wiki_references.page_id " + |
88 | "WHERE wiki_references.referenced_name = ? " + |
89 | "AND wiki_references.link_type = '#{CATEGORY}' " + |
90 | "AND pages.web_id = '#{web.id}'" |
91 | names = connection.select_all(sanitize_sql([query, category])).map { |row| row['name'].as_utf8 } |
92 | end |
93 | |
94 | def self.list_categories(web) |
95 | query = "SELECT DISTINCT wiki_references.referenced_name " + |
96 | "FROM wiki_references LEFT OUTER JOIN pages " + |
97 | "ON wiki_references.page_id = pages.id " + |
98 | "WHERE wiki_references.link_type = '#{CATEGORY}' " + |
99 | "AND pages.web_id = '#{web.id}'" |
100 | connection.select_all(query).map { |row| row['referenced_name'].as_utf8 } |
101 | end |
102 | |
103 | def wiki_word? |
104 | linked_page? or wanted_page? |
105 | end |
106 | |
107 | def wiki_link? |
108 | linked_page? or wanted_page? or file? or wanted_file? |
109 | end |
110 | |
111 | def linked_page? |
112 | link_type == LINKED_PAGE |
113 | end |
114 | |
115 | def redirected_page? |
116 | link_type == REDIRECTED_PAGE |
117 | end |
118 | |
119 | def wanted_page? |
120 | link_type == WANTED_PAGE |
121 | end |
122 | |
123 | def included_page? |
124 | link_type == INCLUDED_PAGE |
125 | end |
126 | |
127 | def file? |
128 | link_type == FILE |
129 | end |
130 | |
131 | def wanted_file? |
132 | link_type == WANTED_FILE |
133 | end |
134 | |
135 | def category? |
136 | link_type == CATEGORY |
137 | end |
138 | |
139 | end |