--- /dev/null
+# BiaWeb Website content manager (c) 2010 V.Harishankar
+# Site exporter/generator class
+
+import os
+import os.path
+import time
+import sqlite3
+import string
+import shutil
+import biaweb_db
+
+# to format the best rated articles in a HTML link list
+def html_format_best_rated (best_rated):
+ items = [ "<ul>\n", ]
+ for art in best_rated:
+ # art[13] is category stub, art[8] is article stub
+ # thus forming the relative url as Category/Article.html
+ str_art = '<li><a href="' + art[13] + '/' + art[8] + '.html">' + art[1] + '</a></li>\n'
+ items.append (str_art)
+ items.append ("</ul>\n")
+ str_items = "".join (items)
+ return str_items
+
+# to format categories in a HTML link list
+def html_format_categories (cats):
+ items = [ "<ul>\n", ]
+ for cat in cats:
+ # cat[3] is category stub and cat[1] is category name
+ str_cat = '<li><a href="' + cat[3] + '/">' + cat[1] + '</a></li>\n'
+ items.append (str_cat)
+ items.append ("</ul>\n")
+ str_items = "".join (items)
+ return str_items
+
+# function to generate main index file and stylesheet
+def generate_home_page (dbname, conf, templates, category_str, bestrated_str):
+ # main template
+ tpl_main = string.Template (templates[0][1])
+ # index bit
+ tpl_indexbit = string.Template (templates[6][1])
+ # news bits
+ tpl_newsbit = string.Template (templates[2][1])
+
+ # get the latest articles - conf[4] is num of rss entries to be used also
+ latest_arts = biaweb_db.site_latest_articles (dbname, conf[4])
+ if latest_arts == False:
+ return False
+
+ news_items = []
+
+ # Run through the latest articles
+ # for the num of latest news items on index
+ for art in latest_arts:
+ # url is Category/Article.html
+ url = art[13] + "/" + art[8] + ".html"
+ # art[5] is creation time
+ strdate = time.ctime (art[5])
+ # now populate the template variables. art[1] is title, art[2] is summary
+ strnews = tpl_newsbit.safe_substitute (news_title = art[1],
+ news_link = url,
+ news_datetime = strdate,
+ news_description = art[2]
+ )
+ news_items.append (strnews)
+ # now convert it into a string
+ newsbit_str = "".join (news_items)
+
+ # now populate the index template
+ indexbit_str = tpl_indexbit.safe_substitute (site_name = conf[1],
+ news_updates = newsbit_str
+ )
+ # now populate the main page template
+ main_str = tpl_main.safe_substitute (site_title = conf[1],
+ site_url = "http://" + conf[0],
+ meta_keywords = conf[2],
+ meta_description = conf[3],
+ page_title = conf[1],
+ page_desc = conf[3],
+ contents_bit = indexbit_str,
+ list_of_categories = category_str,
+ list_best_rated = bestrated_str,
+ copyright = conf[6])
+
+ # write the index.html file in the destination directory
+ try:
+ findex = open (os.path.join (conf[5], "index.html"), "w+")
+ findex.write (main_str)
+ findex.close ()
+ except IOError, OSError:
+ return False
+
+ # write the style.css file in the destination directory
+ try:
+ fstyle = open (os.path.join (conf[5], "style.css"), "w+")
+ fstyle.write (templates[5][1])
+ fstyle.close ()
+ print "error"
+ except IOError, OSError:
+ return False
+
+ return True
+
+# superfunction to generate the site
+def generate_site (dbname, files_to_copy, folders_to_copy, search_type_full=True):
+ # get the configuration
+ conf = biaweb_db.get_configuration (dbname)
+ # get the templates
+ tpls = biaweb_db.get_templates (dbname)
+
+ # get the list of categories
+ cats = biaweb_db.get_categories (dbname)
+ # cannot get categories return false
+ if cats == False:
+ return False
+
+ # format the categories as a html bulleted list
+ cats_str = html_format_categories (cats)
+
+ # get the best rated articles
+ best_rated = biaweb_db.site_get_bestrated (dbname)
+ # if cannot retrieve
+ if best_rated == False:
+ return False
+ # format the best rated articles as a html bulleted list
+ best_rated_str = html_format_best_rated (best_rated)
+
+ # remove the destination tree and recreate it
+ try:
+ if os.path.exists (conf[5]):
+ shutil.rmtree (conf[5])
+ os.mkdir (conf[5])
+ except OSError:
+ return False
+
+ # generate the index page including style sheet
+ ret = generate_home_page (dbname, conf, tpls, cats_str, best_rated_str)
+ if ret == False:
+ return False
+
+ # finally when all is successfully done return true
+ return True