]> git.ipfire.org Git - ipfire.org.git/blobdiff - www/web/__init__.py
Changes on the CMS.
[ipfire.org.git] / www / web / __init__.py
index 8a79a6def252c23b58e76691069e36d6e555661c..e137f5f5fdd63cf61bb3f4e55478bba81b37bbc1 100644 (file)
@@ -4,13 +4,17 @@
 import os
 import cgi
 import time
-import random
-import simplejson as json
+
+try:
+       import cStringIO as StringIO
+except ImportError:
+       import StringIO
 
 from http import HTTPResponse, WebError
 
-import cgitb
-cgitb.enable()
+import info
+import lang
+import menu
 
 class Data:
        def __init__(self):
@@ -18,48 +22,55 @@ class Data:
        
        def w(self, s):
                self.output += "%s\n" % s
+       
+       write = w
                
        def __call__(self):
                return self.output
 
 
-class Json:
-       def __init__(self, file):
-               f = open(file)
-               data = f.read()
-               data = data.replace('\n', '') # Remove all \n
-               data = data.replace('\t', ' ') # Remove all \t
-               self.json = json.loads(data)
-               f.close()
-
-
-class Page(Data):
+class Page(object):
+       def __init__(self):
+               self.io = StringIO.StringIO()
+
+               self.info = info.Info()
+               self.langs = lang.Languages()
+               self.menu = menu.Menu(self.langs.current)
+               self.site = self.title = cgi.FieldStorage().getfirst("site", default="index")
+
+               self.content = None
+               self.javascript = None
+               self.sidebar = None
+
+       @property
+       def data(self):
+               ret = { "content" : "",
+                                "javascript": "",
+                                "lang"   : self.langs.current,
+                                "languages" : self.langs.menu(self.site),
+                                "menu"   : self.menu(),
+                                "name"   : self.info["name"],
+                                "server" : os.environ["SERVER_NAME"].replace("ipfire", "<span>ipfire</span>"),
+                                "sidebar" : "",
+                                "slogan" : self.info["slogan"],
+                                "sname"  : self.info["sname"],
+                                "title"  : "%s - %s" % (os.environ["SERVER_NAME"], self.title,),                                
+                                "year"   : time.strftime("%Y"),}
+
+               if self.content:
+                       ret["content"] = self.content(self.langs.current)
+               if self.javascript:
+                       ret["javascript"] = self.javascript(self.langs.current)
+               if self.sidebar:
+                       ret["sidebar"] = self.sidebar(self.langs.current)
+
+               return ret
+                       
        def include(self, file):
                f = open(file)
                output = f.read()
                f.close()
-               self.w(output % self.data)
-
-       def menu(self):
-               m = Menu(self.langs.current)
-               return m()
-
-       def __init__(self, title, content, sidebar=None):
-               self.output  = ""
-               self.title   = title
-               self.langs   = Languages()
-               self.data    = {"server": os.environ["SERVER_NAME"].replace("ipfire", "<span>ipfire</span>"),
-                                               "title" : "%s - %s" % (os.environ["SERVER_NAME"], title,),
-                                               "menu"  : self.menu(),
-                                               "document_name" : title,
-                                               "lang"  : self.langs.current,
-                                               "languages" : self.langs.menu(title),
-                                               "year"  : time.strftime("%Y"),
-                                               "slogan" : "Security today!",
-                                               "content" : content(self.langs.current),
-                                               "sidebar" : "", }
-               if sidebar:
-                       self.data["sidebar"] = sidebar(self.langs.current)
+               self.io.write(output % self.data)
 
        def __call__(self):
                type = "text/html"
@@ -73,137 +84,11 @@ class Page(Data):
                except WebError:
                        code = 500
                h = HTTPResponse(code, type=type)
-               h.execute(self.output)
-
-
-class News(Json):
-       def __init__(self, limit=3):
-               Json.__init__(self, "news.json")
-               self.news = []
-               for key in sorted(self.json.keys()):
-                       self.news.insert(0, self.json[key])
-               if limit:
-                       self.news = self.news[:limit]
-
-       def html(self, lang="en"):
-               s = ""
-               for item in self.news:
-                       for i in ("content", "subject",):
-                               if type(item[i]) == type({}):
-                                       item[i] = item[i][lang]
-                       b = Box(item["subject"], "%(date)s - by %(author)s" % item)
-                       b.w(item["content"])
-                       if item["link"]:
-                               if lang == "en":
-                                       b.w("""<p><a href="%(link)s" target="_blank">Read more.</a></p>""" % item)
-                               elif lang == "de":
-                                       b.w("""<p><a href="%(link)s" target="_blank">Mehr Informationen.</a></p>""" % item)
-                       s += b()
-               return s
-
-       __call__ = html
-
-       def headlines(self, lang="en"):
-               headlines = []
-               for item in self.news:
-                       if type(item["subject"]) == type({}):
-                               item["subject"] = item["subject"][lang]
-                       headlines.append((item["subject"],))
-               return headlines
-
-       def items(self):
-               return self.news
-
-
-class Menu(Json):
-       def __init__(self, lang):
-               self.lang = lang
-               Json.__init__(self, "menu.json")
-
-       def __call__(self):
-               s = """<div id="menu"><ul>\n"""
-               for item in self.json.values():
-                       item["active"] = ""
-
-                       # Grab language
-                       if type(item["name"]) == type({}):
-                               item["name"] = item["name"][self.lang]
-
-                       # Add language attribute to local uris
-                       if item["uri"].startswith("/"):
-                               item["uri"] = "/%s%s" % (self.lang, item["uri"],)
-
-                       if os.environ["REQUEST_URI"].endswith(item["uri"]):
-                               item["active"] = "class=\"active\""
-
-                       s += """<li><a href="%(uri)s" %(active)s>%(name)s</a></li>\n""" % item
-               s += "</ul></div>"
-               return s
-
-
-class Banners(Json):
-       def __init__(self, lang="en"):
-               self.lang = lang
-               Json.__init__(self, "banners.json")
-
-       def random(self):
-               banner = random.choice(self.json.values())
-               return banner
-
+               h.execute(self.io.getvalue())
 
-class Languages:
-       def __init__(self, doc=""):
-               self.available = []
-
-               for lang in ("de", "en",):
-                       self.append(lang,)
                
-               self.current = cgi.FieldStorage().getfirst("lang") or "en"
-
-       def append(self, lang):
-               self.available.append(lang)
-
-       def menu(self, doc):
-               s = ""
-               for lang in self.available:
-                       s += """<a href="/%(lang)s/%(doc)s"><img src="/images/%(lang)s.gif" alt="%(lang)s" /></a>""" % \
-                               { "lang" : lang, "doc" : doc, }
-               return s
-
-
-class Box(Data):
-       def __init__(self, headline, subtitle=""):
-               Data.__init__(self)
-               self.w("""<div class="post"><h3>%s</h3><a name="%s"></a>""" % (headline,headline,))
-               if subtitle:
-                       self.w("""<div class="post_info">%s</div>""" % (subtitle,))
-
-       def __call__(self):
-               self.w("""<br class="clear" /></div>""")
-               return Data.__call__(self)
-
-
-class Sidebar(Data):
-       def __init__(self, name):
-               Data.__init__(self)
-
-       def content(self, lang):
-               #self.w("""<h4>Test Page</h4>
-               #       <p>Lorem ipsum dolor sit amet, consectetuer sadipscing elitr,
-               #       sed diam nonumy eirmod tempor invidunt ut labore et dolore magna
-               #       aliquyam erat, sed diam voluptua. At vero eos et accusam et justo
-               #       duo dolores et ea rebum.</p>""")
-               banners = Banners()
-               self.w("""<h4>%(title)s</h4><a href="%(link)s" target="_blank">
-                       <img class="banner" src="%(uri)s" /></a>""" % banners.random())
-
-       def __call__(self, lang):
-               self.content(lang)
-               return Data.__call__(self)
-
-
 class Content(Data):
-       def __init__(self, name):
+       def __init__(self):
                Data.__init__(self)
 
        def content(self):