def set_membership(self,auth, group): if auth.is_logged_in(): from regnews import Regnews Regnews(self.db) if self.db(self.db.regnews.email==auth.user.email).count()==0: self.db.regnews.insert(email=auth.user.email, name="%s %s"%(auth.user.first_name, auth.user.last_name), news=True) auth.add_membership(auth.id_group(group), auth.user_id)
def subscriptions(): if auth.has_membership('administradores') or auth.has_membership('superadministradores'): from pagination import Pagination from regnews import Regnews settings = db(db.adminsettings.id>0).select(db.adminsettings.ALL).first() try: reg=Regnews(db) reg.define_tables() except: pass records=db(db.regnews.id>0).count() items_per_page=settings.subscriptionitems pag=Pagination(records, items_per_page) subscriptions = db().select(db.regnews.ALL, orderby=~db.regnews.id, limitby=pag.limitby()) return dict(subscriptions=subscriptions, pagination=pag, records=records, items_per_page=items_per_page, actives=db(db.regnews.news==True).count()) else: redirect(URL(request.application,'default','user/login'))
def __init__(self, db): Regnews(db) self.db = db self.T = current.T try: self.define_tables() except Exception as ex: pass
def mailcheck(): request.requires_https() from regnews import Regnews Regnews(db) if request.args: if len(request.args) == 2: datenow = datetime.datetime.now() if request.args[0] == "confirm": db(db.regnews.verification_code == request.args[1]).update( news=True, suscribed_on=datenow, verified_on=datenow) elif request.args[0] == "refuse": db(db.regnews.verification_code == request.args[1]).update( news=False, unsuscribed_on=datenow) db.commit() return dict(action=request.args[0]) else: return dict(action="error") else: return dict(action="error")
import os import socket import datetime import copy import gluon.contenttype import gluon.fileutils from blog import Blog, Draft, Images from shops import Shop, DomainShop, PricePlan, Product, ContractedProduct, ProfilePlan, PricePlan, CustomerAgreement, Agreement from invoices import Invoice, Order, Orderlist, Fiscal, CreditAccount, AccountingEntry, Budget, Budgetlist from regnews import Regnews from province import Province from cities import Cities Images(db), Blog(db, ckeditor), Draft( db, ckeditor), Regnews(db), Province(db), Cities(db) Shop(db), PricePlan(db), DomainShop(db), Product(db) ProfilePlan(db), PricePlan(db), CustomerAgreement(db), Agreement(db) Invoice(db), Order(db), Orderlist(db), Budget(db), Budgetlist(db), Fiscal( db), ContractedProduct(db), CreditAccount(db), AccountingEntry(db) try: import pygraphviz as pgv except ImportError: pgv = None # ## critical --- make a copy of the environment global_env = copy.copy(globals()) global_env['datetime'] = datetime
def index(): from regnews import Regnews from mailboxing import Mailboxing from cities import Cities from province import Province from queuemail import Queuemail Province(db) Cities(db) Regnews(db) Mailboxing(db) Queuemail(db) wpoblacion = SQLFORM.widgets.autocomplete(request, db.cities.poblacion, limitby=(0, 10), min_length=2) wprovincia = SQLFORM.widgets.autocomplete(request, db.province.provincia, limitby=(0, 10), min_length=2) name = Field('name', 'string', label="Nombre", length=50, requires=IS_NOT_EMPTY( error_message="Debe identificarse con un nombre"), widget=lambda field, value: SQLFORM.widgets.string.widget( field, value, _placeholder='Nombre y apellidos')) email = Field('email', 'string', length=128, requires=[ IS_NOT_EMPTY(error_message="Un email es requerido"), IS_EMAIL(error_message="email incorrecto") ], widget=lambda field, value: SQLFORM.widgets.string.widget( field, value, _placeholder='ejemplo: [email protected]')) phone = Field('phone', 'string', length=18, notnull=False) poblacion = Field('city', 'string', length=40, notnull=False, widget=wpoblacion) provincia = Field('province', 'string', length=40, notnull=False, widget=wprovincia) rnews = Field('rnews', 'boolean', default=True) message = Field( 'message', 'text', notnull=True, requires=IS_NOT_EMPTY( error_message= "Por favor, díganos por qué quiere contactar con nosotros.")) form = SQLFORM.factory(name, rnews, email, phone, poblacion, provincia, message, submit_button='contactar', formstyle='bootstrap') queuedata = [] if form.validate(keepvalues=False): data = form.vars try: reg = db(db.regnews.email == data.email).select() if len(reg) == 0: id = db.regnews.insert(email=data.email, name=data.name, news=data.rnews, phone=data.phone, city=data.city, province=data.province) db.mailbox.insert(regnews=id, message=data.message) else: db.mailbox.insert(regnews=reg[0].id, message=data.message) db.commit() except: db.rollback() response.flash = 'Su petición de contacto no pudo registrarse. Inténtelo de nuevo.' #primero encolamos el mail al usuario que ha hecho la petición de contacto queuedata.append({ 'to': '%s' % data.email, 'subject': 'Confirmación de petición de contacto', 'message': 'Estimado %s,\n hemos recibido una petición de contacto por parte suya desde el formulario de contacto de Despacho Cifrado.\n\n Muchas gracias por su interés. Le responderemos en breve.\n\n Reciba un cordial saludo.\n--\nDespacho Cifrado' % data.name }) #y ahora notificación a cada uno de los administradores mails = db(db.auth_membership.group_id == 1).select( db.auth_membership.ALL, db.auth_user.ALL, left=db.auth_user.on( db.auth_membership.user_id == db.auth_user.id)) for m in mails: queuedata.append({ 'to': '%s' % m.auth_user.email, 'subject': 'Tienes una solicitud de contacto', 'message': '%s con mail: %s y teléfono: %s te ha enviado el siguiente mensaje: \n %s ' % (data.name, data.email, data.phone, data.message) }) try: logger.debug(queuedata) queue.queuemessage(queuedata) except Exception, ex: logger.debug("error al almacenar la cola de mensajes %s" % ex) pass session.flash = 'Su petición ha sido registrada' redirect(URL(request.application, 'default', 'index'))
def show(): session.publishing=False from blog import Blog, Images from regnews import Regnews from comments import Comments from gluon.tools import Recaptcha Blog(db,ckeditor), Images(db) Regnews(db) Comments(db) images=None if auth.has_membership('administradores') or auth.has_membership('superadministradores'): #logger.debug(session.preview) if not request.args(0): redirect(URL('blog','index')) if session.preview: from blog import Draft Draft(db,ckeditor) if request.args(0).isdigit(): post=db.draft(db.draft.id==request.args(0)) or redirect(URL('blog','index')) else: post=db.draft(db.draft.urlfriendly==request.args(0)) or redirect(URL('blog','index')) else: if request.args(0).isdigit(): post=db.blog(db.blog.id==request.args(0)) or redirect(URL('blog','index')) else: post=db.blog(db.blog.urlfriendly==request.args(0)) or redirect(URL('blog','index')) else: if not request.args(0): redirect(URL('blog','index')) if request.args(0).isdigit(): post=db.blog((db.blog.id==request.args(0)) & (db.blog.public==True) ) or redirect(URL('blog','index')) else: post=db.blog((db.blog.urlfriendly==request.args(0)) & (db.blog.public==True) ) or redirect(URL('blog','index')) if post.image!=None: images=db.images(post.image) #logger.debug(images) comment = Field('comment', 'text', label="Comentario",notnull=True, requires=IS_NOT_EMPTY(error_message="Debes escribir un comentario")) if auth.is_logged_in(): form = SQLFORM.factory(comment, submit_button = 'Comentar', formstyle='bootstrap') else: name = Field('name', 'string', label="Nombre", length=50, requires=IS_NOT_EMPTY(error_message="Debe identificarse con un nombre")) email = Field('email', 'string', length=128, requires=IS_EMAIL(error_message="email incorrecto")) website = Field('website','string', length=128, widget=lambda field,value: SQLFORM.widgets.string.widget(field, value, _placeholder='Opcional')) rnews = Field('rnews', 'bool', default=True) captcha = Recaptcha(request, '6Lf849gSAAAAAD2YgjNJxrelMp7-hPnTNZyyf4pD', '6Lf849gSAAAAAOgabgN9kc5YO1hhEws_un0btbbf',use_ssl=True, error_message='Inválido', label='Verificar:', options='theme:"clean", lang:"es"') # antispam= Field("anti_spam", widget=recaptcha, default='') form = SQLFORM.factory(name, rnews, email, website, comment, submit_button = 'Comentar') form[0].append(captcha) if form.errors.has_key('captcha'): response.flash='Captcha inválido' elif form.validate(keepvalues=False): data=form.vars try: if auth.is_logged_in(): if request.args(0).isdigit(): db.comments.insert(comment=data.comment, user=auth.user.id, blog=request.args(0)) else: db.comments.insert(comment=data.comment, user=auth.user.id, blog=db(db.blog.urlfriendly==request.args(0)).select().first()["id"] ) else: reg=db(db.regnews.email==data.email).select() if len(reg)==0: id=db.regnews.insert(email=data.email, name=data.name, news=data.rnews, website=data.website) if request.args(0).isdigit(): db.comments.insert(comment=data.comment, blog=request.args(0), regnews=id) else: db.comments.insert(comment=data.comment, blog=db(db.blog.urlfriendly==request.args(0)).select().first()["id"], regnews=id) else: if request.args(0).isdigit(): db.comments.insert(comment=data.comment, blog=request.args(0), regnews=reg[0].id) else: db.comments.insert(comment=data.comment, blog=db(db.blog.urlfriendly==request.args(0)).select().first()["id"], regnews=reg[0].id) db.commit() response.flash = "Comentario publicado" #redirect(URL('blog','show', args=request.args(0))) except Exception, ex: logger.debug(ex) db.rollback() response.flash="Su comentario no se pudo enviar. Inténtelo de nuevo"
def prelaunch(): request.requires_https() from regnews import Regnews from mailboxing import Mailboxing from queuemail import Queuemail from auxiliartools import AuxiliarTools auxiliar = AuxiliarTools(db) Regnews(db) Mailboxing(db) queue = Queuemail(db) email = Field('email', 'string', length=128, requires=[ IS_NOT_EMPTY(error_message="Un email es requerido"), IS_EMAIL(error_message="email incorrecto") ], widget=lambda field, value: SQLFORM.widgets.string.widget( field, value, _placeholder='ejemplo: [email protected]')) form = SQLFORM.factory(email) form.element('input', _name='email')['_class'] = "form-control input-lg" form.element('input', _name='email')['_placeholder'] = "email" form.element('input', _type='submit' )['_class'] = "btn btn-grove-one btn-lg btn-bold btn-block" form.element('input', _type='submit')['_value'] = "Quiero mi tienda" queuedata = [] if form.validate(keepvalues=True): data = form.vars try: reg = db(db.regnews.email == data.email).select() verification_code = auxiliar.generatecode() if len(reg) == 0: db.regnews.insert(email=data.email, news=False, verification_code=verification_code, ip=request.client) else: db(db.regnews.email == data.email).update( news=False, verification_code=verification_code, ip=request.client) #primero encolamos el mail al usuario que ha hecho la petición de contacto urlconfirm = '%(scheme)s://%(host)s%(url)s' % { 'scheme': request.env.wsgi_url_scheme, 'host': request.env.http_host, 'url': URL('communications', 'mailcheck', args=['confirm', verification_code]) } urlrefuse = '%(scheme)s://%(host)s%(url)s' % { 'scheme': request.env.wsgi_url_scheme, 'host': request.env.http_host, 'url': URL('communications', 'mailcheck', args=['refuse', verification_code]) } html = """ <p>Gracias por apuntarte al prelanzamiento de GEXtiendas.</p> <p>Por favor, confirma tu petición clickando en el siguiente enlace:</p> <p><a href='%(urlconfirm)s'>%(urlconfirm)s</a></p> <p>o si por error, no eres el destinatario de este email, clicka en este otro para borrarte de nuestra lista:</p> <p><a href='%(urlrefuse)s'>%(urlrefuse)s</a></p> <h3>Estamos de prelanzamiento</h3> <p>Como ya sabes, estamos a punto de poner en marcha nuestro sistema de gestión de tiendas electrónicas. Podrás crear y mantener gratuitamente cuantas tiendas electrónicas quieras. Si más adelante necesitas servicios profesionales, cuenta con nosotros a precios más ventajosos por el simple hecho de haber formado parte del proceso de prelanzamiento.</p> <p>Esperamos que con nosotros, ganes mucho.</p> """ % { "urlconfirm": urlconfirm, "urlrefuse": urlrefuse } queuedata.append({ 'to': '%s' % data.email, 'subject': 'Confirmación de registro de email en Gextiendas', 'message': 'Gracias por enviarnos tu dirección de correo electrónico.\nPor favor, confirma tu petición clickando en el siguiente enlace:\n%s\no si por error, no eres el destinatario de este email, clicka en este otro\n%s\n para borrarte de nuestra lista.\nComo ya sabes, estamos de prelanzamiento y estamos a punto de poner en marcha nuestro sistema de gestión de tiendas electrónicas. Podrás crear y mantener gratuitamente cuantas tiendas electrónicas quieras. Si más adelante necesitas servicios profesionales, cuenta con nosotros a precios más ventajosos por el simple hecho de haber formado parte del proceso de prelanzamiento.\n\nEsperamos que con nosotros, ganes mucho.\n--\nGextiendas' % (urlconfirm, urlrefuse), 'html': XML(html), 'unsubscribe': urlrefuse }) #y ahora notificación a cada uno de los administradores mails = db(db.auth_membership.group_id == 1).select( db.auth_membership.ALL, db.auth_user.ALL, left=db.auth_user.on( db.auth_membership.user_id == db.auth_user.id)) for m in mails: queuedata.append({ 'to': '%s' % m.auth_user.email, 'subject': 'Tienes nuevos leads para la campaña de prelanzamiento: %s' % data.email, 'message': 'Míralo en: %s' % "https://www.gextiendas.es/administrator/subscriptions" }) try: queue.queuemessage(queuedata) except Exception, ex: db.rollback() logger.debug("error al almacenar la cola de mensajes %s" % ex) response.flash = 'No hemos podido registrar tu email. Inténtalo de nuevo.' return dict(form=form) db.commit() session.flash = 'Su petición ha sido registrada' except Exception as ex: logger.debug("Error en Communication Prelaunch %s" % ex) db.rollback() response.flash = 'No hemos podido registrar tu email. Inténtalo de nuevo.'