class Qwik::Site
Constants
- CACHE_DIR
- COMMENT
- ML_LIFE_TIME_ALLOWANCE
- PLAN_RE
plan¶ ↑
Attributes
cache[R]
cache_path[R]
path[R]
sitename[R]
Public Class Methods
new(config, memory, sitename)
click to toggle source
# File vendor/qwik/lib/qwik/site.rb, line 27 def initialize(config, memory, sitename) @config = config @memory = memory @sitename = sitename @path = "#{@config.sites_dir}/#{sitename}".path @pages = Pages.new(@config, @path) @cache_path = @path + CACHE_DIR @cache_path.check_directory @cache = {} init_group_config # site-group.rb # init_site_search end
parse_charset(content)
click to toggle source
FIXME: Same as in group-config.rb
# File vendor/qwik/lib/qwik/site-report.rb, line 151 def self.parse_charset(content) return (content.to_a.first || '').chomp end
Public Instance Methods
[](k)
click to toggle source
# File vendor/qwik/lib/qwik/site-pages.rb, line 13 def [](k) @pages[k]; end
attach()
click to toggle source
obsolete
# File vendor/qwik/lib/qwik/site-files.rb, line 29 def attach @attach = SiteAttach.new(@path.to_s) unless defined? @attach return @attach end
backupdb()
click to toggle source
# File vendor/qwik/lib/qwik/site-pages.rb, line 10 def backupdb(); @pages.backupdb; end
close()
click to toggle source
def path(f) @pages.path(f); end
# File vendor/qwik/lib/qwik/site-pages.rb, line 25 def close(); @pages.close; end
create(k)
click to toggle source
# File vendor/qwik/lib/qwik/site-pages.rb, line 18 def create(k) @pages.create(k); end
create_new()
click to toggle source
# File vendor/qwik/lib/qwik/site-pages.rb, line 19 def create_new(); @pages.create_new; end
date_list()
click to toggle source
# File vendor/qwik/lib/qwik/site-pages.rb, line 23 def date_list(); @pages.date_list; end
db()
click to toggle source
# File vendor/qwik/lib/qwik/site-pages.rb, line 9 def db(); @pages.db; end
delete(k)
click to toggle source
# File vendor/qwik/lib/qwik/site-pages.rb, line 21 def delete(k) @pages.delete(k); end
each(*a, &b)
click to toggle source
# File vendor/qwik/lib/qwik/site-pages.rb, line 15 def each(*a, &b) @pages.each(*a, &b); end
each_all(*a, &b)
click to toggle source
# File vendor/qwik/lib/qwik/site-pages.rb, line 16 def each_all(*a, &b) @pages.each_all(*a, &b); end
erase_all()
click to toggle source
# File vendor/qwik/lib/qwik/test-module-path.rb, line 10 def erase_all @pages.erase_all end
event()
click to toggle source
# File vendor/qwik/lib/qwik/site-event.rb, line 11 def event @event = SiteEvent.new(@config, @memory, self) unless defined? @event @event end
exist?(k)
click to toggle source
# File vendor/qwik/lib/qwik/site-pages.rb, line 14 def exist?(k) @pages.exist?(k); end
files(k = 'FrontPage')
click to toggle source
# File vendor/qwik/lib/qwik/site-files.rb, line 11 def files(k = 'FrontPage') page = self[k] return nil if page.nil? page.files = PageFiles.new(@path.to_s, k) if page.files.nil? return page.files end
files_total()
click to toggle source
# File vendor/qwik/lib/qwik/site-files.rb, line 18 def files_total t = 0 self.each {|page| # force to create page.files object for each page # to count files in unaccecced pages after server rebooted t+= files(page.key).total } return t end
forward?()
click to toggle source
# File vendor/qwik/lib/qwik/site-group.rb, line 13 def forward? return @group_config.forward? end
generate_report_mail(user, rep)
click to toggle source
# File vendor/qwik/lib/qwik/site-report.rb, line 117 def generate_report_mail(user, rep) domainurl = self.host_url siteurl = self.site_url f = self.siteconfig['reportfrom'] from = self.ml_address from = f if f && ! f.empty? mail = { :from => from, :to => user, :subject => "#{siteurl} Report", :content => "Recent changes on #{siteurl}\n\n#{rep}", :precedence => "bulk", } lang = get_lang if lang == 'ja' mail[:subject] = "#{siteurl} レポート" mail[:content] = "#{siteurl} における、本日の編集記録です。\n\n#{rep}" end return mail end
get_by_title(t)
click to toggle source
# File vendor/qwik/lib/qwik/site-pages.rb, line 26 def get_by_title(t) @pages.get_by_title(t); end
get_lang()
click to toggle source
# File vendor/qwik/lib/qwik/site-report.rb, line 140 def get_lang lang = 'en' page = self['_GroupCharset'] return lang if page.nil? content = page.load charset = self.class.parse_charset(content) return 'ja' if charset == 'iso-2022-jp' return lang end
get_new_id()
click to toggle source
# File vendor/qwik/lib/qwik/site-pages.rb, line 20 def get_new_id(); @pages.get_new_id; end
get_page_title(pagename)
click to toggle source
# File vendor/qwik/lib/qwik/site-url.rb, line 54 def get_page_title(pagename) page = self[pagename] return '' if page.nil? page_title = page.get_title sitetitle = self.title if ! sitetitle.empty? if self.siteconfig['page_title_first'] == 'true' return "#{page_title} - #{sitetitle}" else return "#{sitetitle} - #{page_title}" end end return page_title end
get_pages()
click to toggle source
Only for test.
# File vendor/qwik/lib/qwik/page-get.rb, line 141 def get_pages return @pages end
get_pages_with_date()
click to toggle source
# File vendor/qwik/lib/qwik/site-plan.rb, line 13 def get_pages_with_date pages = [] self.each {|page| if PLAN_RE =~ page.key datestr = $1 date = Time.parse(datestr).to_i pages << [page.key, date.to_i] next end =begin tags = page.get_tags if tags tags.each {|tag| date = Time.date_parse(tag) if date pages << [page.key, date.to_i] end } end =end } return pages end
get_superpage(k)
click to toggle source
# File vendor/qwik/lib/qwik/site-pages.rb, line 28 def get_superpage(k) page = self[k] return page if page page = self["_#{k}"] return page if page return nil end
host_url()
click to toggle source
# File vendor/qwik/lib/qwik/site-url.rb, line 11 def host_url host_url = self.siteconfig['siteurl'] if ! host_url.nil? && host_url.empty? host_url = @config.public_url end uri = URI(host_url) uri.path = "" return uri.to_s end
inactive?(now = Time.now)
click to toggle source
# File vendor/qwik/lib/qwik/site-group.rb, line 21 def inactive?(now = Time.now) return false if @group_config.forward? || @group_config.permanent? log = @memory[:bury_log] last_article_time = @pages.last_article_time if last_article_time.nil? # No file here. unless $test log.info("site #{@sitename}: last_article_time is nil") if log end return true end ml_life_time = self.siteconfig['ml_life_time'].to_i ml_life_time += ML_LIFE_TIME_ALLOWANCE result = last_article_time.to_i + ml_life_time.to_i <= now.to_i if result ymdhms = last_article_time.strftime("%Y-%m-%d %H:%M:%S") unless $test log.info("site #{@sitename}: last_article_time is #{ymdhms}") if log end end return result end
index()
click to toggle source
# File vendor/qwik/lib/qwik/site-index.rb, line 9 def index return @pages.index end
inspect()
click to toggle source
# File vendor/qwik/lib/qwik/site.rb, line 49 def inspect return "#<Site:#{@sitename}>" end
interwiki()
click to toggle source
# File vendor/qwik/lib/qwik/act-interwiki.rb, line 57 def interwiki @interwiki = InterWiki.new(@config, self) unless defined? @interwiki @interwiki end
is_blessed?()
click to toggle source
# File vendor/qwik/lib/qwik/site-config.rb, line 19 def is_blessed? file = @path + ",blessed" return file.exist? end
is_open?()
click to toggle source
# File vendor/qwik/lib/qwik/site-config.rb, line 15 def is_open? return (siteconfig['open'] == 'true') end
isearch(query)
click to toggle source
# File vendor/qwik/lib/qwik/site-index.rb, line 13 def isearch(query) index = self.index return if index.nil? return index.search(query) end
isearch_parse_query(query)
click to toggle source
# File vendor/qwik/lib/qwik/site-index.rb, line 19 def isearch_parse_query(query) return query.strip.split end
last_modified()
click to toggle source
# File vendor/qwik/lib/qwik/site-timeline.rb, line 9 def last_modified return self.map {|page| page.mtime }.max end
last_page_time()
click to toggle source
# File vendor/qwik/lib/qwik/site-pages.rb, line 12 def last_page_time; @pages.last_page_time; end
lastmod_of_all()
click to toggle source
# File vendor/qwik/lib/qwik/act-sitebackup.rb, line 10 def lastmod_of_all ar = [] self.path.find do |p| Find.prune if p.basename.to_s == '.cache' or p.basename.to_s == '.svn' ar << p.mtime end ar.max end
log(time, user, cmd, pagename)
click to toggle source
# File vendor/qwik/lib/qwik/site-log.rb, line 14 def log(time, user, cmd, pagename) sitelog.add(time, user, cmd, pagename) end
make_report()
click to toggle source
private
# File vendor/qwik/lib/qwik/site-report.rb, line 99 def make_report page = self['_SiteChanged'] return nil if page.nil? report = '' page.wikidb.array.each {|k, v| user, cmd, pagename = v user = 'anonymous' if user.nil? || user.empty? user = MailAddress.obfuscate(user) if ! user.empty? time = Time.at(k.to_i) time_str = time.strftime('%H:%M') url = self.page_url(pagename) line = "#{time_str} #{user} #{cmd} #{url}\n" report += line } return report end
member()
click to toggle source
# File vendor/qwik/lib/qwik/site-member.rb, line 9 def member @member = SiteMember.new(@config, self) if ! defined?(@member) return @member end
metadata()
click to toggle source
# File vendor/qwik/lib/qwik/act-metadata.rb, line 57 def metadata return SiteMetaData.new(@config, self) end
ml_address()
click to toggle source
# File vendor/qwik/lib/qwik/site-url.rb, line 38 def ml_address siteml = self.siteconfig['siteml'] return siteml if ! siteml.nil? && ! siteml.empty? return "#{@sitename}@#{@config.ml_domain}" end
page_url(k)
click to toggle source
# File vendor/qwik/lib/qwik/site-url.rb, line 27 def page_url(k) return "#{self.site_url}#{k}.html" end
permanent?()
click to toggle source
# File vendor/qwik/lib/qwik/site-group.rb, line 17 def permanent? return @group_config.permanent? end
resolve_all_ref(wabisabi)
click to toggle source
Make index before call this method. Use parent.
# File vendor/qwik/lib/qwik/site-resolve.rb, line 16 def resolve_all_ref(wabisabi) wabisabi.index_each_tag(:a) {|e| resolve_ref(e) } return wabisabi end
resolve_ref(w)
click to toggle source
# File vendor/qwik/lib/qwik/site-resolve.rb, line 23 def resolve_ref(w) attr = w.attr return w if attr.nil? href = attr[:href] return w if href.nil? || href.empty? # External link. if /^(?:http|https|ftp|file):\/\// =~ href w.set_attr(:class=>'external') # Make it redirect link. if self.siteconfig['redirect'] == 'true' w.set_attr(:href=>".redirect?url=#{href}") end return w end # Error check. return w if href.include?('?') # ignore command link return w if href[0] == ?/ # already resolved return w if /\.html\z/ !~ href # ignore not html file linkbase = href.sub(/\.html\z/, '') text = w[2] t = linkbase page = self.get_by_title(t) if page && page.key != t w.set_attr(:href=>page.key+'.html') return w end # Create a new page link. if ! self.exist?(linkbase) newlinkbase = linkbase.escape edithref = ".new?t=#{newlinkbase}" return [:span, {:class=>'new'}, text, [:a, {:href=>edithref}, [:img, {:src=>'.theme/i/new.png', :alt=>'create'}]]] end # Rewrite inside to the page title. if linkbase == text t = self[linkbase].get_title return w if t == linkbase w[2] = t return w end return w end
rrefs(k = 'FronPage')
click to toggle source
# File vendor/qwik/lib/qwik/site-rrefs.rb, line 11 def rrefs(k = 'FronPage') page = self[k] return nil if page.nil? page.rrefs = PageRRefs.new(@path.to_s, k) if page.rrefs.nil? return page.rrefs end
search(query, obfuscate = true)
click to toggle source
def init_site_search
@search_words_db = SearchWordsDB.new(@path, @config)
end
def get_search_words
@search_words_db.get_normalized
end
def delete_search_word(word)
@search_words_db.delete(word)
end
# File vendor/qwik/lib/qwik/site-search.rb, line 27 def search(query, obfuscate = true) queries = search_parse_query(query) # @search_words_db.put(queries) all_snippet_length = 120 pre_snippet_length = all_snippet_length / queries.size / 2 ar = [] self.each {|page| str = page.load str = str.gsub(COMMENT, '') str = wiki_to_string(str) matched = true mds = [] snippet = "" queries.each {|query| regexp = Regexp.new(Regexp.escape(query), Regexp::IGNORECASE|Regexp::MULTILINE) md = regexp.match(str) if ! md matched = false break else mds.push(md) end } if matched snippet = create_snippet(mds) snippet = MailAddress.obfuscate_str(snippet) if obfuscate ar << [page.key, snippet] end } ar end
search_parse_query(query)
click to toggle source
# File vendor/qwik/lib/qwik/site-search.rb, line 66 def search_parse_query(query) return query.strip.split.map{|e| e.downcase }.uniq end
send_report()
click to toggle source
# File vendor/qwik/lib/qwik/site-report.rb, line 80 def send_report rep = self.make_report return nil if rep.nil? list = self.member.list(false) # Without obfuscation. list.each {|user| mail = generate_report_mail(user, rep) sm = Sendmail.new(@config.smtp_host, @config.smtp_port, @config.test) begin sm.send(mail) rescue => e p 'error '+e end } self.delete('_SiteChanged') # Destructive. end
site_url()
click to toggle source
# File vendor/qwik/lib/qwik/site-url.rb, line 21 def site_url siteurl = self.siteconfig['siteurl'] return siteurl if ! siteurl.nil? && ! siteurl.empty? return "#{@config.public_url}#{self.url_path}" end
siteconfig()
click to toggle source
# File vendor/qwik/lib/qwik/site-config.rb, line 9 def siteconfig # @siteconfig = SiteConfig.new(@config, self) unless defined? @siteconfig #return @siteconfig return SiteConfig.new(@config, self) end
sitedb()
click to toggle source
# File vendor/qwik/lib/qwik/site-db.rb, line 9 def sitedb @sitedb = SiteDB.new(@config, self) unless defined? @sitedb return @sitedb end
sitelog()
click to toggle source
# File vendor/qwik/lib/qwik/site-log.rb, line 9 def sitelog @sitelog = SiteLog.new(@config, self) unless defined? @sitelog @sitelog end
sitemonitor()
click to toggle source
# File vendor/qwik/lib/qwik/site-monitor.rb, line 11 def sitemonitor @sitemonitor = SiteMonitor.new(@config, self) unless defined? @sitemonitor return @sitemonitor end
timeline()
click to toggle source
called from act-chronology
# File vendor/qwik/lib/qwik/site-timeline.rb, line 16 def timeline @timeline = SiteTimeLine.new(self) unless defined? @timeline return @timeline end
title()
click to toggle source
# File vendor/qwik/lib/qwik/site-url.rb, line 44 def title sitetitle = self.siteconfig['sitename'] if ! sitetitle.nil? && sitetitle.empty? return '' if @config.test sitetitle = self.site_url.sub(%r|\Ahttp://|, "").sub(%r|/\z|, "") #sitetitle = sitetitle.sub(%r|\Awww\.|, "") end return sitetitle end
title_list()
click to toggle source
# File vendor/qwik/lib/qwik/site-pages.rb, line 22 def title_list(); @pages.title_list; end
to_a(*a)
click to toggle source
# File vendor/qwik/lib/qwik/site-pages.rb, line 17 def to_a(*a) @pages.to_a(*a); end
top_site?()
click to toggle source
# File vendor/qwik/lib/qwik/site-url.rb, line 71 def top_site? return (@sitename == @config.default_sitename) end
unconfirmed?()
click to toggle source
# File vendor/qwik/lib/qwik/site-group.rb, line 47 def unconfirmed? member.list.empty? && @pages.exist?('_GroupWaitingMembers') && @pages.exist?('_GroupWaitingMessage') end
url_path()
click to toggle source
# File vendor/qwik/lib/qwik/site-url.rb, line 31 def url_path siteurl = self.siteconfig['siteurl'] return '' if siteurl.nil? return '' if ! siteurl.empty? || self.top_site? return "#{@sitename}/" end
Private Instance Methods
create_snippet(mds)
click to toggle source
# File vendor/qwik/lib/qwik/site-search.rb, line 78 def create_snippet(mds) #sort as first hit keyword goes first mds = mds.sort {|i, j| i.begin(0) <=> j.begin(0) } max_width = 400 # merge snippets of each search key # # snip[s, e] #|============|1st key|=============| snip = [mds[0].begin(0), mds[0].end(0)] mds[1..-1].each {|md| #|=====|1st key|==...==|last key|========|a key|===..===| # snip[s, e] ^ # |md.begin(0) # <-------------------------.......-----> # max_width # this is the length of bytes, not characters if md.begin(0) < snip[0] + max_width # extends snip end # snip[s, e] #|====|1st key|==...==|last key|========|a key|===..===| snip[1] = md.end(0) end } #all md(MatchData) has same input string all_string = mds[0].string snippet = all_string[snip[0]...snip[1]] len = snippet.mb_length # character length rest = (max_width - len) / 2 if 0 < rest # we have shot snippet, adding additional strings pre = all_string[0...snip[0]] post = all_string[snip[1]..-1] if rest < pre.size pre = pre.mb_substring(-rest, pre.length) end if rest < post.size post = post.mb_substring(0, rest) end snippet = pre + snippet + post end return snippet end
generate_plan(pages, now)
click to toggle source
# File vendor/qwik/lib/qwik/site-plan.rb, line 48 def generate_plan(pages, now) return '' if pages.empty? # Select near futer. From yesterday to 1 month in the future. pages = plan_select_future(pages, now) pages = plan_select_near_future(pages, now) return '' if pages.empty? # Sort by date. pages = pages.sort_by {|pagekey, datei| datei } str = "* Plan\n" pages.each {|pagekey, datei| date = Time.at(datei) date_abbr = Time.date_abbr(now, date) page = self[pagekey] title = page.get_title url = self.page_url(pagekey) str << "- [#{date_abbr}] #{title}\n" str << url+"\n" } return str end
init_group_config()
click to toggle source
# File vendor/qwik/lib/qwik/site-group.rb, line 55 def init_group_config # in group-db.rb db = QuickML::GroupDB.new(@config.sites_dir.to_s, @sitename) db.set_site(self) # in group-config.rb @group_config = QuickML::GroupConfig.new(db) end
plan_select_future(pages, now)
click to toggle source
# File vendor/qwik/lib/qwik/site-plan.rb, line 78 def plan_select_future(pages, now) day = 60*60*24 # 1 day nowi = now.to_i return pages.select {|pagekey, datei| diff = datei - nowi -day < diff } end
plan_select_near_future(pages, now)
click to toggle source
# File vendor/qwik/lib/qwik/site-plan.rb, line 87 def plan_select_near_future(pages, now) month = 60*60*24*30 # 1 month nowi = now.to_i return pages.select {|pagekey, datei| diff = datei - nowi diff < month } end
wiki_to_string(wiki)
click to toggle source
# File vendor/qwik/lib/qwik/site-search.rb, line 72 def wiki_to_string(wiki) tokens = Qwik::TextTokenizer.tokenize(wiki, true) wabisabi = Qwik::TextParser.make_tree(tokens) return wabisabi.flatten.select{|a| a.class == String}.join(" ") end