Beispiel #1
0
 def delete(self):
     ids = self.GetFormValue("ids")
     confirm = self.GetFormValue("confirm")
     users = []
     msgs = []
     root = self.context.root()
     if isinstance(ids, basestring):
         ids = (ids,)
     elif not ids:
         ids = ()
     for i in ids:
         u = root.GetUserByID(i, activeOnly=0)
         if not u:
             msgs.append(self.Translate(_(u"User not found. (id %(name)s)", mapping={"name": i})))
         else:
             users.append(u)
     result = True
     if confirm:
         for u in users:
             name = u.data.name
             if not root.Delete(id=u.id, obj=u, user=self.User()):
                 result = False
                 msgs.append(self.Translate(_(u"Delete failed: User '%(name)s'", mapping={"name": u.meta.title})))
         users=()
         if result:
             if len(ids)>1:
                 msgs.append(self.Translate(_(u"OK. Users deleted.")))
             else:
                 msgs.append(self.Translate(_(u"OK. User deleted.")))
         return self.Redirect(self.Url(root), msgs)
     return {"ids": ids, "users":users, "result": result, "msgs": msgs, "confirm": confirm} 
Beispiel #2
0
 def UpdateSort(self, objs, user):
     """    update pool_sort values according to list """
     if not objs:
         return False, _(u"List is empty")
     if isinstance(objs, basestring):
         objs = ConvertToNumberList(objs)
     ids = []
     for oi in objs:
         # check if listed objects are objects or ids
         if not IObject.providedBy(oi):
             ids.append(int(oi))
     if ids:
         # load remaining objects by id
         objs2 = self.GetObjsBatch(ids)
     pos = 10
     processed = []
     for obj in objs:
         if not IObject.providedBy(obj):
             for o in objs2:
                 if o.id == int(obj):
                     obj = o
                     break
         if not IObject.providedBy(obj):
             continue
         if obj.id in processed:
             continue
         processed.append(obj.id)
         obj.meta.set("pool_sort", pos)
         obj.CommitInternal(user)
         pos += 10
     return True, _(u"OK")
Beispiel #3
0
 def GetAdminWidgets(self):
     url = self.FolderUrl(self.context.root())
     confs = [
         Conf(id="admin.root", viewmapper=url+"list", name=_(u"List users")),
         Conf(id="admin.add", viewmapper=url+"add", name=_(u"Add user"))
     ]
     return confs
Beispiel #4
0
 def Paste(self, ids, pos, user):
     """
     Paste the copied object with id to this object
     """
     root = self.GetRoot()
     new = []
     msgs = []
     result = True
     for id in ids:
         id = int(id)
         if self.GetID() == id:
             continue
         obj = root.LookupObj(id, preload="skip")
         if not obj:
             msgs.append(_(u"Object not found"))
             result = False
             continue
         newobj = self.Duplicate(obj, user) 
         if not newobj:
             raise TypeError, "Duplicate failed"
         if ISort.providedBy(self):
             self.InsertAfter(newobj.id, pos, user=user)
         new.append(newobj)
     if not self.app.configuration.autocommit:
         for o in new:
             o.Commit(user)
     if result:
         msgs.append(_(u"OK. Copied and pasted."))
     return result, msgs
Beispiel #5
0
 def Update(self, action, **kw):
     """
     Process request data and update object.
     
     returns bool, html
     """
     redirectSuccess = kw.get("redirectSuccess")
     msgs = []
     conf=self.context
     result,data,errors = self.Validate(self.request)
     if result:
         # lookup persistent manager for configuration
         storage = self.app.Factory(IModuleConf, "persistence")
         if storage:
             storage(app=self.app, configuration=conf).Save(data)
             msgs.append(_(u"OK. Data saved."))
         else:
             msgs.append(_(u"No persistent storage for configurations activated. Nothing saved."))
             result = False
         errors=None
         if self.view and redirectSuccess:
             redirectSuccess = self.view.ResolveUrl(redirectSuccess, obj)
             if self.use_ajax:
                 self.view.Relocate(redirectSuccess, messages=msgs, raiseException=True)
             else:
                 self.view.Redirect(redirectSuccess, messages=msgs, raiseException=True)
     return result, self.Render(data, msgs=msgs, errors=errors)    
Beispiel #6
0
    def _Run(self, **values):

        result = 1
        codepage="utf-8"
    
        app = self.app
        datapool = app.db
        conf = app.dbConfiguration
        conn = datapool.connection
        system = values.get("excludeSystem")
        self.filename = app.configuration.id + ".json"

        if not conn:
            self.stream.write(_(u"Database connection error (${name})\n", mapping={u"name": app.dbConfiguration.context}))
            return 0
        
        if not conn.IsConnected():
            self.stream.write(_(u"Database connection error (${name})\n", mapping={u"name": app.dbConfiguration.context}))
            return 0
        
        def mapfields(fields):
            a=[]
            for f in fields:
                a.append(f.id)
            return a
        
        export = [(MetaTbl,mapfields(app.GetAllMetaFlds(ignoreSystem=False)))]
        for t in app.GetAllObjectConfs():
            export.append((t.dbparam, ["id"]+mapfields(t.data)))
        for t in Structure.items():
            export.append((t[0], mapfields(t[1]["fields"])))

        data = {}
        for table in export:
            #tablename
            tablename=table[0]
            if system and tablename in system:
                continue 
            #fields
            fields=table[1]
            columns = (",").join(fields)
            sql="select %s from %s" % (columns, tablename)
            c = conn.cursor()
            c.execute(sql)
            tvalues = []
            for rec in c.fetchall():
                recvalue = {}
                pos = 0
                for col in rec:
                    recvalue[fields[pos]] = col
                    pos+=1
                tvalues.append(recvalue)
            data[tablename] = tvalues
        
        self.stream.write(JsonDataEncoder().encode(data))        
        
        return 1
Beispiel #7
0
 def update(self):
     user=self.User()
     if user and user.id == 0:
         return {u"content": _(u"Your current user can only be edited on file system level."), u"result": False, u"head": self.form.HTMLHead()}
     self.form.Setup(subset="edit")
     try:
         result, data, action = self.form.Process()
         return {u"content": data, u"result": result, u"head": self.form.HTMLHead()}
     except Unauthorized:
         return {u"content": _(u"User not found"), u"result": False, u"head": self.form.HTMLHead()}
Beispiel #8
0
 def delfile(self):
     file = self.GetFormValue(u"fid")
     try:
         r=self.context.DeleteFile(file, self.User())
         if not r:
             m=_(u"Delete failed")
         else:
             m=_(u"OK")
     except Exception, e:
         m=str(e)
Beispiel #9
0
    def _Run(self, **values):

        result = 1
        codepage="utf-8"
    
        app = self.app
        datapool = app.db
        conf = app.dbConfiguration
        conn = datapool.connection
        system = values.get("excludeSystem")
        self.filename = app.configuration.id + ".sql"

        if not conn:
            self.stream.write(_(u"Database connection error (${name})\n", mapping={u"name": app.dbConfiguration.context}))
            return 0
        
        if not conn.IsConnected():
            self.stream.write(_(u"Database connection error (${name})\n", mapping={u"name": app.dbConfiguration.context}))
            return 0
        
        def mapfields(fields):
            a=[]
            for f in fields:
                a.append(f.id)
            return a
        
        export = [(MetaTbl,mapfields(app.GetAllMetaFlds(ignoreSystem=False)))]
        for t in app.GetAllObjectConfs():
            export.append((t.dbparam, ["id"]+mapfields(t.data)))
        for t in Structure.items():
            export.append((t[0], mapfields(t[1]["fields"])))

        for table in export:
            #tablename
            tablename=table[0]
            if system and tablename in system:
                continue 
            #fields
            fields=table[1]
            columns = (",").join(fields)
            sql="select %s from %s" % (columns, tablename)
            c = conn.cursor()
            c.execute(sql)
            for rec in c.fetchall():
                data = []
                for col in rec:
                    data.append(conn.FmtParam(col))
                data = (",").join(data)
                if not isinstance(data, unicode):
                    data = unicode(data, codepage)
                value = u"INSERT INTO %s (%s) VALUES (%s);\n"%(tablename, columns, data)
                value = value.encode(codepage)
                self.stream.write(value)        
        
        return 1
Beispiel #10
0
    def Move(self, ids, pos, user):
        """
        Move the object with id to this object
        
        Events
        
        - beforeAdd(data=obj.meta, type=type)
        - afterDelete(id=obj.id)
        - moved()
        - afterAdd(obj=obj)
        """
        root = self.root()
        oldParent=None

        moved = []
        msgs = []
        result = True
        for id in ids:
            id = int(id)
            if self.GetID() == id:
                continue
            obj = root.LookupObj(id, preload="skip")
            if not obj:
                msgs.append(_(u"Object not found"))
                result = False
                continue

            type=obj.GetTypeID()
            # allow subobject
            if not self.IsTypeAllowed(type, user):
                raise TypeError, "Object cannot be added here"

            self.Signal("beforeAdd", data=obj.meta, type=type)
            if not oldParent or oldParent.id != obj.GetParent().id:
                oldParent = obj.GetParent()
            obj.__parent__ = self
            obj.meta["pool_unitref"] = self.GetID()
            oldParent.Signal("afterDelete", id=obj.id)
            obj.Signal("moved")
            #obj.Close()
            moved.append(obj)

        for o in moved:
            o.Commit(user)
            if ISort.providedBy(self):
                self.InsertAfter(o.id, pos, user=user)
            self.Signal("afterAdd", obj=o)
        if result:
            msgs.append(_(u"OK. Cut and pasted."))
        return result, msgs
Beispiel #11
0
    def _Run(self, **values):

        result = 1
        importWf = 1
        importSecurity = 0
        showSystem = values.get("showSystem")
        modify = values.get("modify")
        request = values["original"]
        ignoreTables = self.app.configuration.get("skipUpdateTables", ())

        try:
            localizer = get_localizer(get_current_request())
        except:
            localizer = FakeLocalizer()
        # localizer.translate(term)

        text = _(
            u""" <div class="well">
This tool compares the physically existing database structure (tables, columns) with the current configuration settings.
The database structure is shown on the left, configuration settings on the right. <br><br>
Existing database columns will only be altered if manually selected in the 'Modify' column. Modifying a table may destroy the data
stored (e.g if converted from string to integer), so don't forget to create backups of the database before modifying anything.<br>
By default this tool will only create new tables and columns and never delete any column.
 </div>       """
        )
        self.stream.write(localizer.translate(_(text)))

        self.stream.write(
            u"""<form action="" method="post">
                     <input type="hidden" name="tag" value="dbStructureUpdater">
                     <input type="hidden" name="modify" value="1">"""
        )
        app = self.app
        try:
            conf = app.dbConfiguration
            connection = app.NewConnection()
            if not connection:
                self.stream.write(
                    localizer.translate(
                        _(u"""<div class="alert alert-error">No database connection configured</div>""")
                    )
                )
                return 0
        except OperationalError, e:
            self.stream.write(
                localizer.translate(_(u"""<div class="alert alert-error">No database connection configured</div>"""))
            )
            return 0
Beispiel #12
0
 def RenderField(self, fld, data=None, context=None):
     """
     Render the data field for html display. Rendering depends on the datatype defined
     in the field configuration.
     
     If data is None the current context is used.
     
     returns string
     """
     if context is None:
         context = self.context
     if isinstance(fld, basestring):
         fld = context.GetFieldConf(fld)
     if not fld:
         return _(u"<em>Unknown field</em>")
     if data is None:
         data = context.data.get(fld['id'], context.meta.get(fld['id']))
     if fld['datatype']=='file':
         url = self.FileUrl(fld['id'])
         if not url:
             return u""
         url2 = url.lower()
         if url2.find(u".jpg")!=-1 or url2.find(u".jpeg")!=-1 or url2.find(u".png")!=-1 or url2.find(u".gif")!=-1:
             return u"""<img src="%s">""" % (url)
         return u"""<a href="%s">download</a>""" % (url)
     return FieldRenderer(context).Render(fld, data, context=context)
Beispiel #13
0
 def editroot(self):
     root = self.context.app.root(name="")
     if not IPersistentRoot.providedBy(root):
         return {u"content": _(u"The default root does not support persistent data storage."), u"result": False, u"head": u""}
     fields = (
         FieldConf(id=u"pool_filename",   datatype="string", size=30,   required=1, name=_(u"Root url name"),
                   settings={"validator": RootnameValidator}, default=root.configuration.id),
         FieldConf(id=u"title",           datatype="string", size=255,  required=0, name=_(u"Root title"), default=root.configuration.name),
         FieldConf(id=u"description",     datatype="text",   size=5000, required=0, name=_(u"Root description")),
         FieldConf(id="pool_groups",      datatype="checkbox", size=250, default="", name=_(u"Permission"),
                   description=_(u"Only displayed to users in the selected group"))
     )
     form = RootForm(view=self, context=root, app=self.context)
     form.fields = fields
     form.Setup()
     # process and render the form.
     result, data, action = form.Process()
     return {u"content": data, u"result": result, u"head": form.HTMLHead()}
Beispiel #14
0
 def design(self):
     fields = (
         FieldConf(id=u"columns", datatype="lines",  size=100,  required=0, name=_(u"Column names"), description=_(u"Column names used in the main template. For multiple columns enter one per line.")),
     )
     form = ConfigurationForm(view=self, context=self.context.configuration, app=self.context)
     form.fields = fields
     form.Setup() 
     # process and render the form.
     result, data, action = form.Process()
     return {u"content": data, u"result": result, u"head": form.HTMLHead()}
Beispiel #15
0
    def elementListWidget(self, obj=None, elements=None, addResponse=True):
        """
        Widget with existing elements list and edit options
        call with obj = current object / page
        """
        #i18n?
        if not obj:
            obj=self.context
        html = u"""<div>
  <h4 onclick="$.fn.editblocks().toggleBlock('#elements%(id)s',event)">%(title)s</h4>
  %(blocks)s
</div>
        """
        
        elHtml = u"""<div class="element">
  <div class="el_title">%(title)s</div>
  <div class="el_options">%(options)s</div>
  <br style="clear:both"/>
</div>"""
        
        if not elements:
            elements = obj.GetPageElements()
            
        localizer = translator(self.request)
        
        blocks = StringIO()
        static = self.StaticUrl("nive.cms.cmsview:static/images/types/")
        for el in elements:
        
            t = el.GetTitle()
            if not t:
                t = u"<em>%s</em>" % (localizer(el.GetTypeName(), self.request))

            if el.GetTypeID()=="box":
                title = u"<img src='%s%s.png' align='top'/> %s: %s" % (static, el.GetTypeID(), localizer(u"Box"), t)
                blocks.write(elHtml % {u"title": title, u"options": self.editBlockList(obj=el, showCCP=True)})
                for elb in el.GetPageElements():
                    t = elb.GetTitle()
                    if not t:
                        t = u"<em>%s</em>" % (localizer(elb.GetTypeName()))
                    title = u"&gt; <img src='%s%s.png' align='top'/> %s" % (static, elb.GetTypeID(), t)
                    blocks.write(elHtml % {u"title": title, u"options": self.editBlockList(obj=elb, showCCP=True)})
        
            else:
                title = u"<img src='%s%s.png' align='top'/> %s" % (static, el.GetTypeID(), t)
                blocks.write(elHtml % {u"title": title, u"options": self.editBlockList(obj=el, showCCP=True)})
        if not len(elements):
            blocks.write(localizer(_(u"<p><i>empty</i></p>")))
        data = html % {u"blocks": blocks.getvalue(), u"id": str(obj.GetID()), u"title": localizer(_(u"Page elements"))}
        if addResponse:
            r = Response(content_type="text/html", conditional_response=True)
            r.unicode_body = data
            return r
        return data
Beispiel #16
0
 def selectPageElement(self):
     user = self.User()
     lt = self.context.GetAllowedTypes(user)
     tmpl = u"""<a href="add?pool_type=%s" rel="niveOverlay" class="nivecms addlink">%s</a> """
     html = StringIO()
     html.write(u"""<div class="addElements">""")
     #opt
     for t in lt:
         html.write(tmpl % (t[u"id"], _(t[u"name"])))
     html.write(u"</div>")
     return html.getvalue()
Beispiel #17
0
 def action(self):
     transition = self.GetFormValue(u"t")
     url = self.GetFormValue("redirect_url")
     if not url:
         url = self.PageUrl()
         
     user = self.User()
     self.context.WfAction("", user, transition=transition)
     self.context.CommitInternal(user)
     msg = _(u"OK")
     self.Redirect(url, messages=[msg])
Beispiel #18
0
 def copy(self):
     """
     """
     ids = self.GetFormValue(u"ids")
     if not ids:
         ids = [self.context.id]
     cp = self.SetCopyInfo(u"copy", ids, self.context)
     url = self.GetFormValue(u"url")
     if not url:
         url = self.PageUrl(self.context)
     msgs = _(u"OK. Copied.")
     return self.Redirect(url, [msgs])
Beispiel #19
0
def RootnameValidator(node, value):
    """
    Makes sure the new name does not exist.
    """
    # lookup name in database
    app = node.widget.form.context.app
    for root in app.GetAllRootConfs():
        if root.id == value:
            # check if its the context
            if app.root(root.id)!=node.widget.form.context:
                err = _(u"'${name}' already in use. Please choose a different name.", mapping={'name':value})
                raise Invalid(node, err)
Beispiel #20
0
 def __init__(self, configuration = None):
     """
     Events:
     - init(configuration)
     """
     self.components = []
     self.groups = [Conf(id=u"authenticated", name=_(u"Authenticated"), visible=True)]
     self.__acl__ = [(Allow, "group:admin", ALL_PERMISSIONS)]
     
     self.configuration = configuration or PortalConf()
     
     self.Signal("init", configuration=self.configuration)
Beispiel #21
0
 def delete(self):
     id = self.GetFormValue(u"id")
     result = {u"msgs": [], u"objToDelete": None, u"content":u"", u"cmsview": self, u"result": False}
     if not id:
         result[u"msgs"] = [_(u"Nothing to delete")]
         return result
     delete = self.GetFormValue(u"delete")
     obj = self.context.obj(id)
     if not obj:
         result[u"msgs"] = [_(u"Object not found")]
         return result
     if obj.IsContainer() and delete != u"1":
         result[u"objToDelete"] = obj
         return result
     result[u"result"] = self.context.Delete(id, user=self.User(), obj=obj)
     if result[u"result"]:
         result[u"msgs"] = [_(u"OK. Deleted.")]
     self.Relocate("""<script type="text/javascript">window.parent.close("%s");</script>""" % (self.PageUrl()), 
                   [_(u"OK. Deleted.")], 
                   raiseException=True)
     return result
Beispiel #22
0
    def _Run(self, **values):

        try:
            localizer = get_localizer(get_current_request())
        except:
            localizer = FakeLocalizer()

        app = self.app
        datapool = app.db
        conn = datapool.connection
        c = conn.cursor()

        self.stream.write(u"<table>\n")

        sql = "select count(*) from pool_meta"
        c.execute(sql)
        rec = c.fetchall()
        self.stream.write(localizer.translate(_(u"<tr><th>Elements in total</th><td>${value}</td></tr>\n", mapping={u"value": rec[0][0]})))

        sql = "select count(*) from pool_files"
        c.execute(sql)
        rec = c.fetchall()
        self.stream.write(localizer.translate(_(u"<tr><th>Physical files</th><td>${value}</td></tr>\n", mapping={u"value": rec[0][0]})))

        sql = "select sum(size) from pool_files"
        c.execute(sql)
        rec = c.fetchall()
        self.stream.write(localizer.translate(_(u"<tr><th>Physical files size</th><td>${value}</td></tr>\n", mapping={u"value": FormatBytesForDisplay(rec[0][0])})))

        for t in app.GetAllObjectConfs():
            sql = "select count(*) from pool_meta where pool_type='%s'" % t.id
            c.execute(sql)
            rec = c.fetchall()
            self.stream.write(localizer.translate(_(u"<tr><th>${name}</th><td>${value}</td></tr>\n", mapping={u"name": t.name, u"value": rec[0][0]})))
        
        self.stream.write(u"</table>\n")

        c.close()
        return 1
Beispiel #23
0
 def editdatabase(self):
     dbtypes=[{"id":"MySql","name":"MySql"},{"id":"Sqlite3","name":"Sqlite3"}]
     fields = (
         FieldConf(id=u"context",  datatype="list",   size=20,   required=1, name=_(u"Database type to be used"), listItems=dbtypes, 
                   description=_(u"Supports 'Sqlite3' and 'MySql' by default. MySql requires python-mysqldb installed.")),
         FieldConf(id=u"fileRoot", datatype="string", size=500,  required=0, name=_(u"Relative or absolute root directory for files")),
         FieldConf(id=u"dbName",   datatype="string", size=500,  required=1, name=_(u"Database file path or name"),
                   description=_(u"Sqlite3=database file path, MySql=database name")),
         FieldConf(id=u"host",     datatype="string", size=100,  required=0, name=_(u"Database server host")),
         FieldConf(id=u"port",     datatype="number", size=8,    required=0, name=_(u"Database server port")),
         FieldConf(id=u"user",     datatype="string", size=100,  required=0, name=_(u"Database server user")),
         FieldConf(id=u"password", datatype="password", size=100,required=0, name=_(u"Database server password")),
     )
     form = ConfigurationForm(view=self, context=self.context.dbConfiguration, app=self.context)
     form.fields = fields
     form.Setup()
     # process and render the form.
     result, data, action = form.Process()
     return {u"content": data, u"result": result, u"head": form.HTMLHead()}
Beispiel #24
0
    def __init__(self, view=None, loadFromType=None, context=None, request=None, app=None, **kw):
        ObjectForm.__init__(self, view=view, loadFromType=loadFromType)
        
        self.actions = [
            Conf(id="default",    method="StartForm", name=_(u"Initialize"),    hidden=True),
            Conf(id="defaultEdit",method="LoadUser",  name=_(u"Initialize"),    hidden=True),
            Conf(id="create",     method="AddUser",   name=_(u"Signup"),        hidden=False, options={"renderSuccess":False}),
            Conf(id="edit",       method="Update",    name=_(u"Confirm"),       hidden=False),
            Conf(id="mailpass",   method="MailPass",  name=_(u"Mail password"), hidden=False),
            Conf(id="resetpass",  method="ResetPass", name=_(u"Reset password"), hidden=False),
            Conf(id="login",      method="Login",     name=_(u"Login"),         hidden=False),
        ]
    
        self.subsets = {
            "create": {"fields":  ["name", "password", "email", "surname", "lastname"], 
                       "actions": ["create"],
                       "defaultAction": "default"},
            "create2":{"fields":  ["name", "email"], 
                       "actions": ["create"],
                       "defaultAction": "default"},
            "edit":   {"fields":  ["email", 
                                   FieldConf(id="password", name=_("Password"), datatype="password", required=False, settings={"update": True}),
                                   "surname", "lastname"], 
                       "actions": ["defaultEdit", "edit"],
                       "defaultAction": "defaultEdit"},
            "login":  {"fields":  ["name", FieldConf(id="password", name=_("Password"), datatype="password", settings={"single": True})], 
                       "actions": ["login"],
                       "defaultAction": "default"},
            "mailpass":{"fields": ["email"], 
                        "actions": ["mailpass"],
                        "defaultAction": "default"},
            "resetpass":{"fields": ["email"], 
                        "actions": ["resetpass"],
                        "defaultAction": "default"},
        }

        self.activate = 1
        self.generatePW = 0
        self.notify = True
        self.mail = None
        self.mailpass = None
        self.groups = ""
        self.css_class = "smallform"
Beispiel #25
0
    def _Run(self, **values):

        try:
            localizer = get_localizer(get_current_request())
        except:
            localizer = FakeLocalizer()

        app = self.app
        root = app.root()
        datapool = app.db
        conn = datapool.connection
        c = conn.cursor()

        # delete
        sql = u"delete from pool_fulltext"
        c.execute(sql)
        c.close()
        conn.commit()
        self.stream.write(localizer.translate(_(u"Deleted previous fulltext index.<br>")))
        
        pages = root.Select(parameter={"pool_stag":10,"pool_state":1})
        cnt = len(pages)
        err = 0
        for page in pages:
            page = page[0]
            obj = root.LookupObj(page)
            if not obj:
                err += 1
                self.stream.write(localizer.translate(_(u"Error: Unable to open page (${id}).<br>", mapping={"id":page})))
            else:
                try:
                    obj.UpdateFulltext()
                except Exception, e:
                    err += 1
                    self.stream.write(localizer.translate(_(u"Error: Unable to update page (${id}).<br>", mapping={"id":page})))
                    self.stream.write(unicode(e))
                    self.stream.write(u"<br><br>")
Beispiel #26
0
    def pageListWidget(self, page=None, pages=None):
        """
        Widget with existing pages list and edit options
        call with page = current page
        """
        if not page:
            page=self.context
        html = u"""<div class="subpages"> %(blocks)s </div>"""
        
        pHtml = u"""<div class="element">
  <div class="el_title">%(workflow)s<a href="%(url)s">%(title)s </a> </div>
  <div class="el_options">%(options)s</div>
  <br style="clear:both"/>
</div>"""
        
        useworkflow = 1
        localizer = translator(self.request)
        static = self.StaticUrl("nive.cms.workflow:static/exclamation.png")

        if not pages:
            pages = page.GetPages(includeMenu=1)
        blocks = StringIO()
        for p in pages:
            wf = u""
            if useworkflow and not p.meta.pool_state:
                wf = u"""<a href="%(url)sworkflow" class="right" rel="niveOverlay"><img src="%(static)s" title="%(name)s"/></a>""" % {
                                    u"static": static, 
                                    u"url": self.FolderUrl(p), 
                                    u"name": localizer(_(u"This page is not public."))
                                }
            title = p.meta.get(u"title")
            options = self.editBlockList(obj=p, page=page)
            blocks.write(pHtml % {u"url": self.FolderUrl(p), u"title": title, u"options": options, u"workflow": wf})
        if not len(pages):
            blocks.write(localizer(_(u"<p><i>no sub pages</i></p>")))
        return html % {u"blocks": blocks.getvalue()}
Beispiel #27
0
    def printStructure(self, structure, table, fmt, db, localizer):
        header = u"""
<h4>%(Table)s: %(tablename)s</h4>
<table class="table"><tbody>
<tr><td colspan="5">%(Db Columns)s</td>                                        <td colspan="2">%(Configuration settings)s</td></tr>
<tr><td>%(ID)s</td><td>%(Type)s</td><td>%(Default)s</td><td>%(Settings)s</td>  <td>%(Modify?)s</td><td></td></tr>
"""  % {"tablename":table, 
        "Table": localizer.translate(_(u"Table")), 
        "Db Columns": localizer.translate(_(u"Database settings")), 
        "Configuration settings": localizer.translate(_(u"Configuration settings")),
        "ID":localizer.translate(_(u"ID")),
        "Type":localizer.translate(_(u"Type")),
        "Default":localizer.translate(_(u"Default")),
        "Settings":localizer.translate(_(u"Settings")),
        "Modify?":localizer.translate(_(u"Modify?"))
       }

        row = u"""
<tr><td>%(id)s</td><td>%(type)s</td><td>%(default)s</td><td>Not null: %(null)s, Identity: %(identity)s</td>        <td>%(Modify)s</td><td>%(Conf)s</td></tr>
"""

        cb = u"""
<input type="checkbox" name="%s" value="%s">""" 

        footer = u"""
</tbody></table> <br/>"""


        self.stream.write(header)
        for col in structure:
            id = col
            col = structure[col].get("db")
            if not col:
                col = {"id":id, "type": u"", "default": u"", "null": u"", "identity": u""}
            conf = u""
            for d in fmt:
                if col and d["id"].upper() == col["id"].upper():
                    conf = db.ConvertConfToColumnOptions(d)
                    break
            col["Modify"] = cb % (table, id)
            col["Conf"] = conf
            self.stream.write(row % col)

        self.stream.write(footer)

        return 
Beispiel #28
0
    def Update(self, action, **kw):
        """
        Form action: safely update a user 
        """
        user = self.view.User()
        if not user:
            raise Unauthorized, "User not found."
        msgs = []
        result,data,errors = self.Validate(self.request)
        if result:
            uobj = self.context.LookupUser(id=user.id)
            result = uobj.SecureUpdate(data, user)
            if result:
                msgs.append(_(u"OK"))

        return self._FinishFormProcessing(result, data, msgs, errors, **kw)
Beispiel #29
0
    def SecureUpdate(self, data, user):
        """
        Update existing user data.
        name, groups, pool_state cannot be changed
        """
        if data.has_key("name"):
            del data["name"]
        if data.has_key("groups"):
            del data["groups"]
        if data.has_key("pool_state"):
            del data["pool_state"]

        if not self.Update(data, user):
            return False, [_(u"Update failed.")]

        self.Commit(user)
        return True, []
Beispiel #30
0
    def Process(self, images=None, profiles=None):
        """
        Process images and create versions from profiles. ::
        
            images = list of image field ids to process. if none all images based on 
                     selected profiles are processed.
            profiles = list of profiles to process. if none all profiles are 
                       processed
            returns result, messages
        
        Example: If `Process(images=['highres'],profiles=None)` all versions with
        `source=highres` are updated.

        Events: 
        updateImage(profile)

        """
        if not PILloaded:
            return False, [_(u"Python image library (PIL) not installed.")]
        convert = []
        if not images:
            for p in self.configuration.imageProfiles:
                if not self._CheckCondition(p):
                    continue
                convert.append(p)
        else:
            for p in self.configuration.imageProfiles:
                if not self._CheckCondition(p):
                    continue
                if p.source in images:
                    convert.append(p)
        if not convert:
            return True
        msgs = []
        result = True
        for profile in convert:
            r, m = self._Convert(profile)
            msgs += m
            if not r:
                result = False
            else:
                self.Signal("updateImage", profile=profile)
        return result, msgs
Beispiel #31
0
    def _Run(self, **values):
        """
        """

        host = values.get("host")
        port = values.get("port")
        sender = values.get("sender")
        user = values.get("user")
        pass_ = values.get("pass_")

        fromName = values.get("fromName")
        fromMail = values.get("fromMail")
        replyTo = values.get("replyTo")

        recvids = values.get("recvids")
        recvrole = values.get("recvrole")
        recvmails = values.get("recvmails")
        cc = values.get("cc")
        bcc = values.get("bcc")

        title = values.get("title")
        body = values.get("body")
        html = values.get("html")
        utf8 = values.get("utf8")
        ssl = values.get("ssl")

        showToListInHeader = values.get("showToListInHeader")
        force = values.get("force")
        debug = values.get("debug")
        maillog = values.get("maillog")
        log = logging.getLogger(maillog or "sendMail")

        # lookup receivers
        recvs = []
        if recvmails:
            if isinstance(recvmails, basestring):
                recvs.append((recvmails, u""))
            else:
                recvs.extend(recvmails)
        if recvids or recvrole:
            recvs.extend(self._GetRecv(recvids, recvrole, force, self.app))
        if cc:
            cc = self._GetRecv(cc, None, force, self.app)
            if cc:
                recvs.extend(cc)
        if bcc:
            bcc = self._GetRecv(bcc, None, force, self.app)
            if bcc:
                recvs.extend(bcc)

        if len(recvs) == 0:
            self.stream.write(_(u"No receiver for the e-mail! Aborting."))
            return 0

        temp = []
        for r in recvs:
            temp.append(self._GetMailStr(r))
        to = temp
        temp = []
        for r in cc:
            temp.append(self._GetMailStr(r))
        cc = temp
        temp = []
        for r in bcc:
            temp.append(self._GetMailStr(r))
        bcc = temp

        if fromMail and fromMail != u"":
            senderMail = sender
        else:
            fromMail = sender
            senderMail = u""

        contentType = u"text/plain"
        if html:
            contentType = u"text/html"
        if utf8:
            contentType += u"; charset=utf-8"

        if debug:
            mails_original = u""
            for m in recvs:
                mails_original += m + u"\r\n<br>"
            body += u"""\r\n<br><br>\r\nDEBUG\r\n<br> Original receiver: \r\n<br>""" + mails_original
            # in debug mode use default receiver mail as receiving address for all mails
            recvs = [(recvmails, u"")]

        result = 1
        if showToListInHeader:
            self.stream.write((u", ").join(r))
        else:
            for recv in recvs:
                self.stream.write(recv[0] + u" ok, ")
                if maillog:
                    logdata = u"%s - %s - %s" % (recv[0], recv[1], title)
                    log.debug(u" %s", logdata)
        return result
Beispiel #32
0
    def _Run(self, **values):

        result = 1
        codepage = "utf-8"

        app = self.app
        datapool = app.db
        conf = app.dbConfiguration
        conn = datapool.connection
        tree = values.get("tree")
        filedata = values.get("filedata")
        self.filename = app.configuration.id + ".json"

        if not conn:
            self.stream.write(
                _(u"Database connection error (${name})\n",
                  mapping={u"name": app.dbConfiguration.context}))
            return 0

        if not conn.IsConnected():
            self.stream.write(
                _(u"Database connection error (${name})\n",
                  mapping={u"name": app.dbConfiguration.context}))
            return 0

        def mapfields(fields):
            return [f.id for f in fields]

        metaflds = mapfields(app.GetAllMetaFlds(ignoreSystem=False))

        def exportObj(o):
            values = {"__items__": []}
            for field in metaflds:
                values[field] = o.meta.get(field)
            for field in o.configuration.data:
                if field["datatype"] == "file":
                    file = o.files.get(field.id)
                    if not file:
                        continue
                    values[field.id] = {
                        "filename": file.filename,
                        "size": file.size
                    }
                    if filedata == "path":
                        values[field.id]["path"] = file.path
                    elif filedata == "data":
                        values[field.id]["data"] = base64.b64encode(
                            file.read())
                else:
                    values[field.id] = o.data.get(field.id)

            if IContainer.providedBy(o):
                for child in o.GetObjs():
                    cv = exportObj(child)
                    values["__items__"].append(cv)
            return values

        root = app.root()
        data = {"__items__": []}
        for child in root.GetObjs():
            cv = exportObj(child)
            data["__items__"].append(cv)

        if not tree:

            def getlist(values, datalist):
                for v in values["__items__"]:
                    datalist = getlist(v, datalist)
                del values["__items__"]
                datalist.append(values)
                return datalist

            data = getlist(data, [])

        self.stream.write(ConfEncoder().encode(data))

        return 1
Beispiel #33
0
from nive.i18n import _
from nive.definitions import StagPageElement, ObjectConf, FieldConf
from nive.components.objects.base import PageElementBase


class spacer(PageElementBase):
    pass
    


# type definition ------------------------------------------------------------------
#@nive_module
configuration = ObjectConf(
    id = "spacer",
    name = _(u"Spacer"),
    dbparam = "spacers",
    context = "nive.cms.spacer.spacer",
    template = "spacer.pt",
    selectTag = StagPageElement,
    icon = "nive.cms.cmsview:static/images/types/spacer.png",
    description = _(u"Styling element to add line breaks and vertical space between elements.")
)

css =[  {'id': u'bo', 'name': _(u'Border')},
        {'id': u'h0', 'name': _(u'Invisible')},
        {'id': u'h1', 'name': _(u'1 line')},
        {'id': u'h2', 'name': _(u'2 lines')},
        {'id': u'h3', 'name': _(u'3 lines')},
        {'id': u'h4', 'name': _(u'4 lines')},
        ]
Beispiel #34
0
                continue
            if isinstance(e, tuple):
                e = list(e)
            e.append(extension)
            c.unlock()
            c.extensions = tuple(e)
            c.lock()
    
    add(app.GetAllRootConfs())
    add(app.GetAllObjectConfs())


toolconf = ToolConf(
    id = "updatefulltext",
    context = "nive_cms.extensions.fulltextpage.RewriteFulltext",
    name = _(u"Rewrite fulltext index"),
    description = _("Delete and rewrite the fulltext index."),
    apply = (IApplication,),
    mimetype = "text/html",
    data = [],
    views = [
        ViewConf(name="", view=ToolView, attr="form", permission="system", context="nive_cms.extensions.fulltextpage.RewriteFulltext")
    ]
)

configuration = ModuleConf(
    id = "pagefulltext",
    name = u"Web page fulltext extension",
    context = PageFulltext,
    events = (Conf(event="startRegistration", callback=SetupFulltext),),
    modules = [toolconf]
Beispiel #35
0
from nive.i18n import _
from nive.definitions import ViewConf, ViewModuleConf, FieldConf, WidgetConf, Conf
from nive.definitions import IApplication, IUser, IAdminWidgetConf, IUserDatabase, IPersistent, IModuleConf, IViewModuleConf
from nive.definitions import IWebsiteRoot, ICMSRoot

from nive.views import BaseView
from nive.forms import ValidationError, HTMLForm
from nive.extensions.persistentRoot import IPersistentRoot
from nive.utils.utils import SortConfigurationList, ConvertDictToStr

# view module definition ------------------------------------------------------------------

#@nive_module
configuration = ViewModuleConf(
    id="administration",
    name=_(u"Administration"),
    context=IApplication,
    view="nive.adminview.view.AdminView",
    templates="nive.adminview:",
    template="index.pt",
    permission="administration",
    adminLink=u"app_folder_url/admin",
    static="nive.adminview:static",
    assets=[
        ('bootstrap.min.css',
         'nive.adminview:static/mods/bootstrap/css/bootstrap.min.css'),
        ('adminview.css', 'nive.adminview:static/adminview.css'),  # nive css
        ('jquery.js', 'nive.adminview:static/mods/jquery.min.js'),
        ('bootstrap.min.js',
         'nive.adminview:static/mods/bootstrap/js/bootstrap.min.js'),
    ],
Beispiel #36
0
from nive.workflow import WfProcessConf, WfStateConf, WfTransitionConf
from nive.i18n import _


# change pool_state to publish or revoke
def publish(transition, context, user, values):
    context.meta.set("pool_state", 1)


def revoke(transition, context, user, values):
    context.meta.set("pool_state", 0)


wfProcess = WfProcessConf(
    id="default",
    name=_(u"Simple Publishing Workflow"),
    apply=(IPage, ),
    states=(WfStateConf(id="start",
                        name=_(u"New object"),
                        actions=("delete", "duplicate", "edit", "add",
                                 "remove")),
            WfStateConf(id="edit",
                        name=_(u"Edit"),
                        actions=("delete", "duplicate", "edit", "add",
                                 "remove")),
            WfStateConf(id="public",
                        name=_(u"Public"),
                        actions=("delete", "duplicate", "edit", "add",
                                 "remove"))),
    transitions=(WfTransitionConf(id="create",
                                  name=_(u"Create"),
Beispiel #37
0
from pyramid.renderers import get_renderer, render_to_response, render
from pyramid.httpexceptions import HTTPNotFound

from nive.i18n import _
from nive.definitions import ViewModuleConf, ViewConf, ConfigurationError
from nive.definitions import IWebsite, IWebsiteRoot, IRoot, ICMSRoot, IPage, IPageElement, IObject, IFile
from nive.definitions import IViewModuleConf
from nive.views import BaseView
from nive.helper import ResolveName

# view module definition ------------------------------------------------------------------

#@nive_module
configuration = ViewModuleConf(
    id="design",
    name=_(u"Website design and view"),
    static="nive.cms.design:static",
    templates="nive.cms.design:templates",
    mainTemplate="index.pt",
    permission="view",
    view="nive.cms.design.view.Design",
    views=[
        ViewConf(id="appview", name="", attr="app", context=IWebsite),
        ViewConf(id="search", name="search", attr="search", context=IRoot),
        ViewConf(id="su", name="su", attr="open", context=IRoot),
        ViewConf(id="rootview", name="", attr="view", context=IWebsiteRoot),
        ViewConf(id="objview",
                 name="",
                 attr="view",
                 context=IPage,
                 containment=IWebsiteRoot),
Beispiel #38
0
 def editdatabase(self):
     dbtypes = [{
         "id": "MySql",
         "name": "MySql"
     }, {
         "id": "Sqlite3",
         "name": "Sqlite3"
     }]
     fields = (
         FieldConf(
             id=u"context",
             datatype="list",
             size=20,
             required=1,
             name=_(u"Database type to be used"),
             listItems=dbtypes,
             description=
             _(u"Supports 'Sqlite3' and 'MySql' by default. MySql requires python-mysqldb installed."
               )),
         FieldConf(
             id=u"fileRoot",
             datatype="string",
             size=500,
             required=0,
             name=_(u"Relative or absolute root directory for files")),
         FieldConf(id=u"dbName",
                   datatype="string",
                   size=500,
                   required=1,
                   name=_(u"Database file path or name"),
                   description=_(
                       u"Sqlite3=database file path, MySql=database name")),
         FieldConf(id=u"host",
                   datatype="string",
                   size=100,
                   required=0,
                   name=_(u"Database server host")),
         FieldConf(id=u"port",
                   datatype="number",
                   size=8,
                   required=0,
                   name=_(u"Database server port")),
         FieldConf(id=u"user",
                   datatype="string",
                   size=100,
                   required=0,
                   name=_(u"Database server user")),
         FieldConf(id=u"password",
                   datatype="password",
                   size=100,
                   required=0,
                   name=_(u"Database server password")),
     )
     form = ConfigurationForm(view=self,
                              context=self.context.dbConfiguration,
                              app=self.context)
     form.fields = fields
     form.Setup()
     # process and render the form.
     result, data, action = form.Process()
     return {u"content": data, u"result": result, u"head": form.HTMLHead()}
Beispiel #39
0
 def AdministrationLinks(self, context=None):
     if context:
         apps = (context,)
     else:
         apps = self.context.app.portal.GetApps()
     links = []
     for app in apps:
         if not hasattr(app, "registry"):
             continue
         # search for cms editor
         for root in app.GetRoots():
             if ICMSRoot.providedBy(root):
                 links.append({"href":self.Url(root), "title":app.configuration.title + u": " + _(u"editor")})
             elif IWebsiteRoot.providedBy(root):
                 links.append({"href":self.Url(root), "title":app.configuration.title + u": " + _(u"public")})
         # administration
         links.append({"href":self.FolderUrl(app)+u"admin", "title":app.configuration.title + u": " + _(u"administration")})
         # user management
         if IUserDatabase.providedBy(app):
             links.append({"href":self.FolderUrl(app)+u"usermanagement", "title":app.configuration.title + u": " + _(u"user management")})
     return links
Beispiel #40
0
from nive.definitions import ViewConf, ViewModuleConf, FieldConf, WidgetConf, Conf
from nive.definitions import IApplication, IUser, IAdminWidgetConf, IUserDatabase, IPersistent, IModuleConf
from nive.definitions import IWebsiteRoot, ICMSRoot

from nive.views import BaseView
from nive.forms import ValidationError, HTMLForm

from nive.utils.utils import SortConfigurationList, ConvertDictToStr


# view module definition ------------------------------------------------------------------

#@nive_module
configuration = ViewModuleConf(
    id = "administration",
    name = _(u"Administration"),
    static = "",
    context = IApplication,
    view = "nive.adminview.view.AdminView",
    templates = "nive.adminview:",
    permission = "administration"
)
t = configuration.templates
configuration.views = [
    # User Management Views
    ViewConf(name = "admin",    attr = "view",       renderer = t+"root.pt"),
    ViewConf(name = "basics",   attr = "editbasics", renderer = t+"form.pt"),
    #ViewConf(name = "portal",   attr = "editportal", renderer = t+"form.pt"),
    ViewConf(name = "tools",    attr = "tools",      renderer = t+"tools.pt"),
    ViewConf(name = "modules",  attr = "view",       renderer = t+"modules.pt"),
    ViewConf(name = "views",    attr = "view",       renderer = t+"views.pt"),
Beispiel #41
0
from pyramid.i18n import get_localizer
from pyramid.threadlocal import get_current_request

from nive.tool import Tool, ToolView
from nive.helper import FakeLocalizer
from nive.definitions import ToolConf, IApplication
from nive.definitions import ViewConf
from nive.i18n import _

from nive.utils.utils import FormatBytesForDisplay

configuration = ToolConf(
    id="cmsstatistics",
    context="nive.tools.cmsstatistics.cmsstatistics",
    name=_(u"CMS Statistics"),
    description=
    _("This function provides a short summary of elements and data contained in the website."
      ),
    apply=(IApplication, ),
    mimetype="text/html",
    data=[],
    views=[
        ViewConf(name="",
                 view=ToolView,
                 attr="run",
                 permission="system",
                 context="nive.tools.cmsstatistics.cmsstatistics")
    ])

Beispiel #42
0
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#----------------------------------------------------------------------
__doc__ = """
Root for context to run adminview 
"""

from nive.definitions import RootConf
from nive.userdb.root import root
from nive.i18n import _


class adminroot(root):
    """
	"""


# Root definition ------------------------------------------------------------------
#@nive_module
configuration = RootConf(id="usermanagement",
                         context="nive.userdb.useradmin.adminroot.adminroot",
                         default=False,
                         subtypes="*",
                         name=_(u"User listing"),
                         description="")
Beispiel #43
0
def LoadListItems(fieldconf, app=None, obj=None, pool_type=None, force=False):
    """
    Load field list items for the given fieldconf.
    If `force` is False and fieldconf already contains list items, the existing 
    `fieldconf.listItems` are returned. Set `force=True` to reload each time this
    function is called.
        
    `obj` and `pool_type` are only used for workflow lookup.
        
    returns dict list
    """
    values = []
    if not fieldconf:
        return values

    if fieldconf.listItems and not force:
        # skip loading if list filled
        if hasattr(fieldconf.listItems, '__call__'):
            return fieldconf.listItems(fieldconf, obj or app)
        return fieldconf.listItems

    if not app:
        if fieldconf.settings:
            # settings dyn list
            dyn = fieldconf.settings.get("codelist")
            if dyn in ("languages", "countries"):
                # the only two lists not requiring 'app'
                if dyn == "languages":
                    return LanguageExtension().Codelist()
                else:
                    return CountryExtension().Codelist()

        # abort here if app is not set
        return fieldconf.listItems

    # load list items from db, application or user database
    if fieldconf.settings:
        # settings dyn list
        dyn = fieldconf.settings.get("codelist")
        if not dyn:
            pass
        elif dyn == "users":
            return GetUsers(app)
        elif dyn == "groups":
            portal = app.portal
            if portal is None:
                portal = app
            return portal.GetGroups(sort="name", visibleOnly=True)
        elif dyn == "localgroups":
            return app.GetGroups(sort="name", visibleOnly=True)
        elif dyn == "groups+auth":
            portal = app.portal
            if portal is None:
                portal = app
            return [
                Conf(id=u"authenticated",
                     name=_(u"Authenticated"),
                     visible=True)
            ] + portal.GetGroups(sort="name", visibleOnly=True)
        elif dyn == "types":
            return app.GetAllObjectConfs()
        elif dyn == "categories":
            return app.GetAllCategories()
        elif dyn[:5] == "type:":
            type = dyn[5:]
            return app.root().GetEntriesAsCodeList(type,
                                                   "title",
                                                   parameter={},
                                                   operators={},
                                                   sort="title")
        elif dyn == "meta":
            return app.root().GetEntriesAsCodeList2("title",
                                                    parameter={},
                                                    operators={},
                                                    sort="title")
        elif dyn == "languages":
            return LanguageExtension().Codelist()
        elif dyn == "countries":
            return CountryExtension().Codelist()

    fld = fieldconf.id
    if fld == "pool_type":
        values = app.GetAllObjectConfs()

    elif fld == "pool_category":
        values = app.GetAllCategories()

    elif fld == "pool_groups":
        local = fieldconf.settings.get("local")
        loader = app
        if not local:
            portal = app.portal
            if portal:
                loader = portal
        values = loader.GetGroups(sort="name", visibleOnly=True)

    elif fld == "pool_language":
        values = app.GetLanguages()

    elif fld == "pool_wfa":
        # uses type object as param
        if obj:
            try:
                aWfp = obj.meta.get("pool_wfp")
                obj = app.GetWorkflow(aWfp)
                if obj:
                    values = obj.GetActivities()
            except:
                pass
        elif pool_type:
            aWfp = app.GetObjectConf(pool_type).get("workflowID")
            try:
                obj = app.GetWorkflow(aWfp)
                values = obj.GetActivities()
            except:
                pass
        else:
            values = []

    elif fld == "pool_wfp":
        values = app.GetAllWorkflowConfs()

    return values
Beispiel #44
0
# Released under GPL3. See license.txt
#

import json
import base64

from nive.tool import Tool, ToolView
from nive.definitions import ToolConf, FieldConf, ViewConf
from nive.definitions import IApplication, MetaTbl, Structure, IContainer
from nive.helper import ConfEncoder
from nive.i18n import _

configuration = ToolConf(
    id="exportJson",
    context="nive.tools.exportJson.exportJson",
    name=_(u"Json data export"),
    description=
    _("This function exports all objects in json format. Optionally as flat list or tree structure. This is not a simple database table dump. Object events will be triggered before exporting data."
      ),
    apply=(IApplication, ),
    mimetype="text/json",
    data=[
        FieldConf(
            id="tree",
            datatype="bool",
            default=1,
            listItems=[{
                "id": "true",
                "name": "Tree"
            }, {
                "id": "false",
Beispiel #45
0
__doc__ = """
Test version of nive.tools.sendMail. Use `sendMailTester` as a replacement for `sendMail` in tests
or to disable actual mail delivery
"""

import logging

from nive.utils.utils import ConvertToList
from nive.definitions import ToolConf
from nive.tools.sendMail import sendMail
from nive.i18n import _

configuration = ToolConf("nive.tools.sendMail",
                         context="nive.tools.sendMailTester.sendMailTester",
                         name=_(u"Fake Mailer"),
                         description=__doc__)


class sendMailTester(sendMail):
    def _Run(self, **values):
        """
        """

        host = values.get("host")
        port = values.get("port")
        sender = values.get("sender")
        user = values.get("user")
        pass_ = values.get("pass_")

        fromName = values.get("fromName")
Beispiel #46
0
"""

from nive.i18n import _
from nive.components.objects.base import PageRootBase
from nive.definitions import IWebsiteRoot, implements
from nive.definitions import RootConf


class root(PageRootBase):

    implements(IWebsiteRoot)
    extension = u"html"

    def Init(self):
        self.queryRestraints = {"pool_state": 1}, {}


# Root definition ------------------------------------------------------------------
#@nive_module
configuration = RootConf(
    id="root",
    context="nive.cms.root.root",
    template="root.pt",
    default=True,
    subtypes="*",
    extensions=("nive.components.extensions.persistentRoot.Persistent", ),
    name=_(u"Home"),
    description=
    _(u"The root is the home page of the website. All contained pages and elements are stored in the database."
      ))
Beispiel #47
0
    def _Run(self, **values):

        result = 1
        codepage = "utf-8"

        app = self.app
        datapool = app.db
        conf = app.dbConfiguration
        conn = datapool.connection
        system = values.get("excludeSystem")
        self.filename = app.configuration.id + ".json"

        if not conn:
            self.stream.write(
                _(u"Database connection error (${name})\n",
                  mapping={u"name": app.dbConfiguration.context}))
            return 0

        if not conn.IsConnected():
            self.stream.write(
                _(u"Database connection error (${name})\n",
                  mapping={u"name": app.dbConfiguration.context}))
            return 0

        def mapfields(fields):
            a = []
            for f in fields:
                a.append(f.id)
            return a

        export = [(MetaTbl, mapfields(app.GetAllMetaFlds(ignoreSystem=False)))]
        for t in app.GetAllObjectConfs():
            export.append((t.dbparam, ["id"] + mapfields(t.data)))
        for t in Structure.items():
            export.append((t[0], mapfields(t[1]["fields"])))

        data = {}
        for table in export:
            #tablename
            tablename = table[0]
            if system and tablename in system:
                continue
            #fields
            fields = table[1]
            columns = (",").join(fields)
            sql = "select %s from %s" % (columns, tablename)
            c = conn.cursor()
            c.execute(sql)
            tvalues = []
            for rec in c.fetchall():
                recvalue = {}
                pos = 0
                for col in rec:
                    recvalue[fields[pos]] = col
                    pos += 1
                tvalues.append(recvalue)
            data[tablename] = tvalues

        self.stream.write(JsonDataEncoder().encode(data))

        return 1
Beispiel #48
0
from nive.components.objects.base import PageElementFileBase


class media(PageElementFileBase):
    def IsVideo(self):
        return self.data.get("player") == u"video"

    def IsAudio(self):
        return self.data.get("player") == u"audio"


# media type definition ------------------------------------------------------------------
#@nive_module
configuration = ObjectConf(
    id="media",
    name=_(u"Media"),
    dbparam="mediafile",
    context="nive.cms.media.media",
    template="media.pt",
    selectTag=StagPageElement,
    icon="nive.cms.cmsview:static/images/types/media.png",
    description=_(
        u"Element to insert audio or video files into the web page. Uses HTML 5 media"
        u"and audio tags and the browser's default player."))

player = [{
    "id": u"video",
    "name": _(u"Video player")
}, {
    "id": u"audio",
    "name": _(u"Audio player")
Beispiel #49
0
::

    configuration.admin = {"name": "admin", "password": "******", "email": "*****@*****.**"}
    configuration.systemAdmin = (u"email", u"display name")

"""

from nive.definitions import implements, AppConf, FieldConf, GroupConf, IUserDatabase, ILocalGroups
from nive.security import Allow, Deny, Everyone, ALL_PERMISSIONS, remember, forget
from nive.components.objects.base import ApplicationBase
from nive.i18n import _

#@nive_module
configuration = AppConf()
configuration.id = "userdb"
configuration.title = _(u"Users")
configuration.context = "nive.userdb.app.UserDB"
configuration.loginByEmail = False

# configuration.systemAdmin = (u"email", u"display name")
# configuration.admin = {"name": "admin", "password": "******", "email": "*****@*****.**"}

configuration.modules = [
    "nive.userdb.root",
    "nive.userdb.user",
    # session user cache
    "nive.components.extensions.sessionuser",
    # user administration
    "nive.userdb.useradmin",
    # tools
    "nive.components.tools.dbStructureUpdater",
Beispiel #50
0
        # return the current element container
        return self.GetParent()

    def GetElementContainer(self):
        # return the current element container
        return self  #.GetParent()

    def GetContainer(self):
        # return the current element container
        return self.GetParent()


#@nive_module
configuration = ObjectConf(
    id="box",
    name=_(u"Box"),
    dbparam="box",
    context="nive.cms.box.box",
    template="box.pt",
    selectTag=StagPageElement,
    container=True,
    icon="nive.cms.cmsview:static/images/types/box.png",
    description=
    _(u"A box is a container to group elements on a page. It can be used as an"
      u"advanced styling element for web pages. The box itself only stores a title and styling selector."
      ))

# data definition ------------------------------------------------------------------
css = [
    {
        'id': u'span1',
Beispiel #51
0
# Released under GPL3. See license.txt
#

import json
import datetime

from nive.tool import Tool, ToolView
from nive.definitions import ToolConf, FieldConf, ViewConf
from nive.definitions import IApplication, MetaTbl, Structure
from nive.helper import JsonDataEncoder
from nive.i18n import _

configuration = ToolConf(
    id="dbJsonDump",
    context="nive.tools.dbJsonDump.dbJsonDump",
    name=_(u"Database json dump"),
    description=
    _("This function dumps table contents the way records are stored in json format."
      ),
    apply=(IApplication, ),
    mimetype="text/json",
    data=[
        FieldConf(id="excludeSystem",
                  datatype="checkbox",
                  default=[],
                  listItems=[{
                      "id": "pool_sys",
                      "name": "pool_sys"
                  }, {
                      "id": "pool_fulltext",
                      "name": "pool_fulltext"
Beispiel #52
0
class image(PageElementFileBase):
    def Span(self):
        # css class span for the css selection
        if self.data.cssClass == "teaserl":
            return u"span4"
        elif self.data.cssClass == "teasers":
            return u"span2"
        return u"span3"


# image type definition ------------------------------------------------------------------
#@nive_module
configuration = ObjectConf(
    id="image",
    name=_(u"Image"),
    dbparam="images",
    context="nive.cms.image.image",
    template="image.pt",
    selectTag=StagPageElement,
    extensions=[],
    icon="nive.cms.cmsview:static/images/types/image.png",
    description=_(u"The image element inserts images into the web page."))

css = [
    {
        "id": u"default",
        "name": _(u"Simple")
    },
    {
        "id": u"left",
Beispiel #53
0
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#----------------------------------------------------------------------

__doc__ = ""

import types

from nive.tools import Tool
from nive.definitions import ToolConf, IApplication
from nive.i18n import _

configuration = ToolConf(
    id="gcdump",
    context="nive.components.tools.gcdump.gcdump",
    name=_(u"Object dump"),
    description=_(
        "This function dumps a list of all objects found in memory."),
    apply=(IApplication, ),
    data=[],
    mimetype="text/html")

import gc
from types import InstanceType


class gcdump(Tool):
    """
    """
    def _Run(self, **values):