def xml(self): from gluon import current pages, rem = divmod(self.records, self.items_per_page) li = [] if rem: pages += 1 if self.page > 0: li.append( LI( A(XML('<i class="glyphicon glyphicon-fast-backward"></i>'), _href=URL(args=current.request.args, vars=dict(page=0))))) else: li.append( LI(A(XML('<i class="glyphicon glyphicon-fast-backward"></i>'), _href="#"), _class="disabled")) if self.page >= 1: li.append( LI( A(XML('<i class="glyphicon glyphicon-backward"></i>'), _href=URL(args=current.request.args, vars=dict(page=self.page - 1))))) else: li.append( LI(A(XML('<i class="glyphicon glyphicon-backward"></i>'), _href="#"), _class="disabled")) li.append( LI(A( XML('<i class="glyphicon glyphicon-file"></i>Página %s de %s' % (self.page + 1, int(self.records / self.items_per_page) + 1))), _class="disabled")) if self.page <= pages - 2: li.append( LI(A(XML('<i class="glyphicon glyphicon-forward"></i>'), _href=URL(args=current.request.args, vars=dict(page=self.page + 1))), _class="next")) else: li.append( LI(A(XML('<i class="glyphicon glyphicon-forward"></i>'), _href="#"), _class="disabled")) if self.page < pages - 1: li.append( LI( A(XML('<i class="glyphicon glyphicon-fast-forward"></i>'), _href=URL(args=current.request.args, vars=dict(page=pages - 1))))) else: li.append( LI(A(XML('<i class="glyphicon glyphicon-fast-forward"></i>'), _href="#"), _class="disabled")) div = DIV(UL(li, _class="pagination pagination-sm")) return DIV.xml(div)
def get_cms_intro(module, resource, name, cmsxml=False): """ Get intro from CMS @param module: the module prefix @param resource: the resource name @param name: the post name @param cmsxml: whether to XML-escape the contents or not @returns: the post contents, or None if not available """ # Get intro text from CMS db = current.db s3db = current.s3db ctable = s3db.cms_post ltable = s3db.cms_post_module join = ltable.on((ltable.post_id == ctable.id) & \ (ltable.module == module) & \ (ltable.resource == resource) & \ (ltable.deleted == False)) query = (ctable.name == name) & \ (ctable.deleted == False) row = db(query).select(ctable.body, join = join, cache = s3db.cache, limitby = (0, 1), ).first() if not row: return None return XML(row.body) if cmsxml else row.body
def preview(self, item): super(ContentPackage, self).preview(item) content = self.db.plugin_package_content(item_id=item.unique_id) return XML( self.response.render( 'plugin_package/preview.html', dict(item=item, p_content=content)) )
def preview(self, item): super(ContentPhotoset, self).preview(item) photoset_content = self.db.plugin_photoset_content( item_id=item.unique_id) return XML( self.response.render( 'plugin_photoset/preview.html', dict(item=item, photoset_content=photoset_content)))
def comment_facebook(self): js = """ <div id="fb-root"></div> <script>(function(d, s, id) { var js, fjs = d.getElementsByTagName(s)[0]; if (d.getElementById(id)) {return;} js = d.createElement(s); js.id = id; js.src = "//connect.facebook.net/en_US/all.js#xfbml=1&appId=%(facebook_appid)s"; fjs.parentNode.insertBefore(js, fjs); }(document, 'script', 'facebook-jssdk'));</script> <div class="fb-comments" data-href="%(url)s" data-num-posts="%(facebook_numposts)s" data-width="700"></div> """ % dict(facebook_appid=self.config.comment.facebook_appid, facebook_numposts=self.config.comment.facebook_numposts, url=self.request.url) return XML(js)
def button(merchant_id="123456789012345", products=[ dict(name="shoes", quantity=1, price=23.5, currency='USD', description="running shoes black") ]): t = '<input name="item_%(key)s_%(k)s" type="hidden" value="%(value)s"/>\n' list_products = '' for k, product in enumerate(products): for key in ('name', 'description', 'quantity', 'price', 'currency'): list_products += t % dict(k=k + 1, key=key, value=product[key]) button = """<form action="https://checkout.google.com/api/checkout/v2/checkoutForm/Merchant/%(merchant_id)s" id="BB_BuyButtonForm" method="post" name="BB_BuyButtonForm" target="_top">\n%(list_products)s<input name="_charset_" type="hidden" value="utf-8"/>\n<input alt="" src="https://checkout.google.com/buttons/buy.gif?merchant_id=%(merchant_id)s&w=117&h=48&style=white&variant=text&loc=en_US" type="image"/>\n</form>""" % dict( merchant_id=merchant_id, list_products=list_products) return XML(button)
def list_dict_to_table_sortable(lista, nombre_archivo): '''recibe una lista de diccionarios(clave-valor iguales) y devuelve una tabla html''' if type(lista) == list: if type(lista[0]) == dict: claves = lista[0].keys() orden = [ 'dni', 'usuario', 'apellido y nombre', 'apellido', 'nombre', 'nombre map', 'baja map', 'reparticion', 'Unif', 'Unif_creado', 'Unif_modificado' ] for i in reversed(orden): try: claves.insert(0, claves.pop(claves.index(i))) except Exception: pass # log(e) # cabecera tabla tabla = '<table data-toggle="table"> <thead> <tr>' for i in claves: fila = """<th data-field="%s" data-sortable="true"> %s</th>""" % (i, i) tabla = tabla + fila tabla = tabla + '</tr> </thead> <tbody>' # contenido tabla for i in lista: tabla = tabla + '<tr>' for j in claves: tabla = tabla + '<td>%s</td>' % (i[j]) tabla = tabla + '</tr>' tabla = tabla + '</tbody> </table>' cantidad = len(lista) leyenda_cantidad = (MARKMIN("Cantidad de dias registrados: " + str(cantidad))) session.nombre_archivo = list_of_dict_to_csv( nombre_archivo, lista)[1] # open_archivo = open(dir_files + session.nombre_archivo, "r") boton_csv = A('Descarga tabla como CSV...', _href=URL('descarga_csv'), _class='btn btn-default') # return CENTER(TABLE(boton_csv,XML(tabla))) return DIV(boton_csv, leyenda_cantidad, XML(tabla))
def index(): """ Show notifications for the current user """ tbl = db.notification query = (tbl.id > 0) query &= (tbl.to_user == auth.user.id) def p_seen_rpr(v, r): if v: return I(_class="fa fa-envelope-open-o") return I(_class="fa fa-envelope") tbl.seen.represent = p_seen_rpr if request.args(0) == 'view': tbl.seen.readable = False tbl.message_content.represent = lambda v, r: XML(v) msg = tbl(request.args(2)) msg.update_record(seen=True) tbl.from_user.represent = lambda v, r: db.auth_user(v).email grid = SQLFORM.grid( query, fields=[tbl.subject, tbl.from_user, tbl.seen, tbl.msg_date], paginate=10, showbuttontext=False, editable=False, csv=False, maxtextlengths={'notification.subject': 100}, create=False, searchable=False, orderby=[~tbl.msg_date], formstyle='bootstrap', ) return dict(grid=grid)
def chapter(poem, db, uhdb): """ Return a bootstrap row for a poem row. """ if not poem: raise Exception('No such poem') qry = ((db.verse.book == 1) & (db.verse.chapter == poem.chapter)) verse = db(qry).select().first() title = H3(poem.chapter.title) subtitle = H4('Chapter %i' % poem.chapter.number) published = H5(poem.published.strftime(date_format)) stanzas = verse.en.split('\r\n\r\n') content = [] for stanza in stanzas: content.append(P(XML(stanza.replace('\r\n', '<br />')))) link = P(A(I('Go to the study version'), _href=URL('studies', 'chapter', args=[poem.chapter.number]), _style='color:inherit;', _title='Study version'), _style='font-size:0.9em;padding-top:1em') content.append(P(link)) column = DIV(title, subtitle, published, *content, _class=poem_class) return DIV(column, _class='row', _style='font-size:1.12em;white-space:nowrap;')
def comment_intense(self): # counterjs = """ # <script> # var idcomments_acct = 'fe83a2e2af975dd1095a8e4e9ebe1902'; # var idcomments_post_id; # var idcomments_post_url; # </script> # <script type="text/javascript" src="http://www.intensedebate.com/js/genericLinkWrapperV2.js"></script> # """ js = """ <script> var idcomments_acct = '%(intense_acct)s'; var idcomments_post_id; var idcomments_post_url; </script> <span id="IDCommentsPostTitle" style="display:none"></span> <script type='text/javascript' src='http://www.intensedebate.com/js/genericCommentWrapperV2.js'></script> """ % dict(intense_acct=self.config.comment.intense_acct, idcomments_post_id="%s/%s" % (self.context.article.id, self.context.article.slug), idcomments_post_url=self.request.url) return XML(js)
def comment_disqus(self): js = """ <div id="disqus_thread"></div> <script type="text/javascript"> /* * * CONFIGURATION VARIABLES: EDIT BEFORE PASTING INTO YOUR WEBPAGE * * */ var disqus_shortname = '%(disqus_shortname)s'; // required: replace example with your forum shortname var disqus_identifier = '%(disqus_identifier)s'; //var disqus_url = '%(disqus_url)s'; var disqus_developer = %(disqus_developer)s; // developer mode is on /* * * DON'T EDIT BELOW THIS LINE * * */ (function() { var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true; dsq.src = 'http://' + disqus_shortname + '.disqus.com/embed.js'; (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq); })(); </script> <noscript>Please enable JavaScript to view the <a href="http://disqus.com/?ref_noscript">comments powered by Disqus.</a></noscript> <a href="http://disqus.com" class="dsq-brlink">blog comments powered by <span class="logo-disqus">Disqus</span></a> """ % dict(disqus_shortname=self.config.comment.disqus_shortname, disqus_developer=self.config.comment.disqus_developer, disqus_identifier="%s/%s" % (self.context.article.id, self.context.article.slug), disqus_url=self.request.url) return XML(js)
def _render(cls, resource, data, meta_data, format=None): """ Method to pre-render the contents for the message template @param resource: the S3Resource @param data: the data returned from S3Resource.select @param meta_data: the meta data for the notification @param format: the contents format ("text" or "html") """ created_on_selector = resource.prefix_selector("created_on") created_on_colname = None notify_on = meta_data["notify_on"] last_check_time = meta_data["last_check_time"] rows = data["rows"] rfields = data["rfields"] output = {} new, upd = [], [] if format == "html": # Pre-formatted HTML colnames = [] new_headers = TR() mod_headers = TR() for rfield in rfields: if rfield.selector == created_on_selector: created_on_colname = rfield.colname elif rfield.ftype != "id": colnames.append(rfield.colname) label = rfield.label new_headers.append(TH(label)) mod_headers.append(TH(label)) for row in rows: append_record = upd.append if created_on_colname: try: created_on = row["_row"][created_on_colname] except (KeyError, AttributeError): pass else: if s3_utc(created_on) >= last_check_time: append_record = new.append tr = TR([TD(XML(row[colname])) for colname in colnames]) append_record(tr) if "new" in notify_on and len(new): output["new"] = len(new) output["new_records"] = TABLE(THEAD(new_headers), TBODY(new)) else: output["new"] = None if "upd" in notify_on and len(upd): output["upd"] = len(upd) output["upd_records"] = TABLE(THEAD(new_headers), TBODY(upd)) else: output["upd"] = None else: # Standard text format labels = [] append = labels.append for rfield in rfields: if rfield.selector == created_on_selector: created_on_colname = rfield.colname elif rfield.ftype != "id": append((rfield.colname, rfield.label)) for row in rows: append_record = upd.append if created_on_colname: try: created_on = row["_row"][created_on_colname] except (KeyError, AttributeError): pass else: if s3_utc(created_on) >= last_check_time: append_record = new.append record = [] append_column = record.append for colname, label in labels: append_column((label, row[colname])) append_record(record) if "new" in notify_on and len(new): output["new"] = len(new) output["new_records"] = new else: output["new"] = None if "upd" in notify_on and len(upd): output["upd"] = len(upd) output["upd_records"] = upd else: output["upd"] = None output.update(meta_data) return output
def __call__(self): T = current.T db = current.db s3db = current.s3db s3 = current.response.s3 session_s3 = current.session.s3 output = {} # Recent Updates etable = s3db.event_event stable = s3db.event_sitrep query = (stable.deleted == False) fields = [ etable.name, stable.id, stable.date, stable.name, stable.summary, ] left = [etable.on(etable.id == stable.event_id)] language = session_s3.language if language != current.deployment_settings.get_L10n_default_language(): ntable = s3db.event_event_name left.append(ntable.on((ntable.event_id == etable.id) & \ (ntable.language == language))) fields.append(ntable.name_l10n) use_local_event_name = True else: use_local_event_name = False sitreps = db(query).select(left=left, limitby=(0, 3), orderby=~stable.date, *fields) len_sitreps = len(sitreps) if len_sitreps == 0: from s3 import S3CRUD recent_updates = DIV(S3CRUD.crud_string("event_sitrep", "msg_list_empty"), _class="empty") else: recent_updates = DIV() rappend = recent_updates.append count = 0 for s in sitreps: count += 1 if use_local_event_name: event_name = s["event_event_name.name_l10n"] or s[ "event_event.name"] else: event_name = s["event_event.name"] if not event_name: event_name = s["event_sitrep.name"] rappend( H3( A( event_name, _href=URL( c="event", f="sitrep", args=[s["event_sitrep.id"]], ), ))) rappend(P(XML(s["event_sitrep.summary"]))) if count != len_sitreps: rappend(HR()) output["recent_updates"] = recent_updates map_btn = A( T("MAP OF CURRENT NEEDS"), #_href = URL(c="default", # f="index", # args="dashboard", # ), _href=URL( c="req", f="need_line", args="map", ), _class="small primary button", ) create_btn = A( T("CREATE A NEED"), _href=URL( c="req", f="need", args="create", ), _class="small primary button", ) output["needs_btn"] = DIV( SPAN(map_btn), SPAN(create_btn), _class="button-group radius", ) output["about_btn"] = A( "%s >" % T("Read More"), _href=URL( c="default", f="about", ), ) # Resources section if current.deployment_settings.has_module("cms"): system_roles = current.auth.get_system_roles() ADMIN = system_roles.ADMIN in session_s3.roles table = s3db.cms_post ltable = s3db.cms_post_module module = "default" resource = "index" query = (ltable.module == module) & \ ((ltable.resource == None) | \ (ltable.resource == resource)) & \ (ltable.post_id == table.id) & \ (table.deleted != True) item = current.db(query).select(table.body, table.id, limitby=(0, 1)).first() if item: if ADMIN: item = DIV( XML(item.body), BR(), A(T("Edit"), _href=URL(c="cms", f="post", args=[item.id, "update"]), _class="action-btn")) else: item = DIV(XML(item.body)) elif ADMIN: if s3.crud.formstyle == "bootstrap": _class = "btn" else: _class = "action-btn" item = A(T("Edit"), _href=URL(c="cms", f="post", args="create", vars={ "module": module, "resource": resource }), _class="%s cms-edit" % _class) else: item = "" else: item = "" output["item"] = item # Inject D3 scripts from s3 import S3Report S3Report.inject_d3() # Inject charts-script appname = current.request.application scripts = s3.scripts if s3.debug: script = "/%s/static/scripts/S3/s3.ui.charts.js" % appname if script not in scripts: scripts.append(script) else: script = "/%s/static/scripts/S3/s3.ui.charts.min.js" % appname if script not in scripts: scripts.append(script) # Instantiate charts scriptopts = { # Standard SHARE theme color set: "colors": [ '#0C9CD0', # blue '#E03158', # red '#FBA629', # amber '#8ABC3F', # green '#AFB8BF', # grey ], } script = '''$('.homepage-chart').uiChart(%s)''' % json.dumps( scriptopts) s3.jquery_ready.append(script) # Add last update time of chart data last_update = HomepageStatistics.last_update() if last_update: output["last_stats_update"] = T("Updated on %(date)s") % { "date": last_update } else: output["last_stats_update"] = None self._view(THEME, "index.html") return output
def found_pay_ins(db, curr_in, xcurr_in, addr, shop=None, shop_order=None): pays =[] #print '\n',curr_in and curr_in.abbrev or 'curr_in=None', '\nSHOP:',shop.id, '\nshop_order:',shop_order.id # все зачтенные за последний месяц # сначала выдадим все неоплоченные входы - они в стеке used = {} privat = not addr or len(addr) < 4 no_addr = privat or addr == "????" for pay in db( (not privat) & (db.pay_ins.id == db.pay_ins_stack.ref_id) & (db.pay_ins.shop_order_addr_id == db.shop_order_addrs.id) & (no_addr or db.shop_order_addrs.addr==addr) # & (xcurr_in and xcurr_in.id == db.shop_order_addrs.xcurr_id) ).select(orderby=~db.pay_ins.created_on): xcurr = db.xcurrs[pay.shop_order_addrs.xcurr_id] #if xcurr_in and xcurr_in.id != xcurr.id: continue curr_in = db.currs[xcurr.curr_id] #print shop_order = shop_order or db.shop_orders[pay.shop_order_addrs.shop_order_id] shop = shop or db.shops[shop_order.shop_id] shop_name = shop.name or shop.url or shop.mail if not privat: # показать подробно мне shop_name = '%s %s' % (shop_name or '', shop_order.order) status = pay.pay_ins.status pay_out_info = T('статус: ') + (status or T('в обработке')) used[pay.pay_ins.id]=True mess_in = '%s [%s] %s -> %s' % (pay.pay_ins.amount, curr_in.abbrev, pay.pay_ins.created_on, shop_name) pays.append({ T('Вход'): mess_in, T('Выход'): pay_out_info, }) # теперь все выплаченные - их в стеке уже нет и тут глубина - 40 дней # если без адреса то только 1 сутки expired = datetime.datetime.now() - datetime.timedelta(no_addr and 1 or 40, 0) for pay in db( (no_addr or db.shop_order_addrs.addr==addr) & (db.pay_ins.shop_order_addr_id == db.shop_order_addrs.id) & (db.pay_ins.created_on > expired) & (xcurr_in and xcurr_in.id == db.shop_order_addrs.xcurr_id) ).select(orderby=~db.pay_ins.created_on): if pay.pay_ins.id in used: continue #print pay xcurr = db.xcurrs[pay.shop_order_addrs.xcurr_id] #if xcurr_in and xcurr_in.id != xcurr.id: continue curr_in = db.currs[pay.shop_order_addrs.curr_id] shop_order = shop_order or db.shop_orders[pay.shop_order_addrs.shop_order_id] shop = shop or db.shops[shop_order.shop_id] curr_out = db.currs[shop_order.curr_id] dn_url = URL('order','show', args=[order.id]) order_info = None if pay.pay_ins.order_id: order = db.orders[pay.pay_ins.order_id] order_info = T('№%s от %s, курс:%s') % (order.id, order.created_on, round(order.volume_out/order.volume_in,8)) status = pay.pay_ins.status if status and status == 'returned': pay_out_info = T('Возвращен обратно') else: pay_out_info = T('НЕ ВЫПЛАЧЕН, статус: ') + (status or T('в обработке')) payout = rate = None if pay.pay_ins.payout_id: payout = db.pay_outs[pay.pay_ins.payout_id] if payout and payout.shoper_order_id: #shop_order = db.shop_orders[payout.ref] #shop = db.shops[shop_order.shop_id] shoper_order = db.shopers_orders[payout.shoper_order_id] #curr_out = db.currs[shoper_order.curr_id] shoper = db.shopers[shoper_order.shoper_id] shoper_shop = db((db.shoper_shops.shop_id == shop.id) & (db.shoper_shops.shoper_id == shoper.id)).select().first() #if shoper_shop.p2p and shop.name != 'WALLET': # # если это выплата в магазин то переопределим ссылку # dn_url = URL('to_shop','index') p_i = json.loads(payout.info) rate = round(payout.amount/payout.amo_in,8) amo_out = round(pay.pay_ins.amount * payout.amount/payout.amo_in, 2) #if not 'payment_id' in p_i: print payout.info, amo_out if 'payment_id' in p_i: pay_out_info = privat and T('%s [%s] -%s%s %s') % ( amo_out, curr_out.abbrev, shoper_shop.tax, '%', payout.created_on ) or \ T('%s [%s] -%s%s %s %s %s') % ( amo_out, curr_out.abbrev, shoper_shop.tax, '%', p_i['payment_id'], 'invoice_id' in p_i and p_i['invoice_id'] or 'payee' in p_i and p_i['payee'], payout.created_on ) elif pay.pay_ins.clients_tran_id: # это выплатата клиенту cl_tr = db.clients_trans[pay.pay_ins.clients_tran_id] clnt = db.clients[cl_tr.client_id] amo_out = cl_tr.amo_in rate = None pay_out_info = '' if cl_tr.curr_in_id and cl_tr.curr_in_id != curr_in.id: # была конвертация pay_out_info = pay_out_info + '%s [%s] ' % (amo_out, curr_out.abbrev) #rate = cl_tr.amo_in pay_out_info = pay_out_info + T('зачтено') if privat: dn_url = URL('to_shop','index', args=[cl_tr.client_id]) else: pay_out_info = pay_out_info + T(' транзакция №%s - %s') % (cl_tr.id, cl_tr.desc) # to_shop/index/2?order=UUWZNTYIR&sum=0.02&curr_out=BTC vvv = {'order':shop_order.order, 'curr_out':curr_out.abbrev} if amo_rest: vvv['sum'] = amo_rest dn_url = URL('to_shop','index', args=[cl_tr.client_id], vars=vvv) if not order_info and rate: order_info = T('текущий курс:%s') % round(rate,8) shop_name = shop.name if not privat: shop_name = '%s %s' % (shop.name, shop_order.order) shop_name = XML(A(shop_name, _href=dn_url)) rec_vals = { T('Вход'): '%s [%s] %s' % (pay.pay_ins.amount, curr_in.abbrev, pay.pay_ins.created_on), T('Для'): shop_name, T('Заказ'): order_info, T('Выход'): pay_out_info, } if payout: if payout.amo_gift and payout.amo_gift > 0: rec_vals[T('Подарок')] = T('Вы получили дополнительно %s [%s]') % (payout.amo_gift, curr_out.abbrev) if payout.amo_partner and payout.amo_partner > 0: rec_vals[T('Партёрские')] = T('Вы получили дополнительно %s [%s]') % (payout.amo_partner, curr_out.abbrev) pays.append(rec_vals) return pays
def __call__(self): output = {} T = current.T request = current.request response = current.response s3 = response.s3 # Check logged in and permissions auth = current.auth settings = current.deployment_settings roles = current.session.s3.roles system_roles = auth.get_system_roles() AUTHENTICATED = system_roles.AUTHENTICATED # Login/Registration forms self_registration = current.deployment_settings.get_security_registration_visible( ) registered = False login_form = None login_div = None register_form = None register_div = None if AUTHENTICATED not in roles: login_buttons = DIV(A(T("Login"), _id="show-login", _class="tiny secondary button"), _id="login-buttons") script = ''' $('#show-mailform').click(function(e){ e.preventDefault() $('#intro').slideDown(400, function() { $('#login_box').hide() }); }) $('#show-login').click(function(e){ e.preventDefault() $('#login_form').show() $('#register_form').hide() $('#login_box').show() $('#intro').slideUp() })''' s3.jquery_ready.append(script) # This user isn't yet logged-in if "registered" in request.cookies: # This browser has logged-in before registered = True if self_registration is True: # Provide a Registration box on front page login_buttons.append( A(T("Register"), _id="show-register", _class="tiny secondary button", _style="margin-left:5px")) script = ''' $('#show-register').click(function(e){ e.preventDefault() $('#login_form').hide() $('#register_form').show() $('#login_box').show() $('#intro').slideUp() })''' s3.jquery_ready.append(script) register_form = auth.register() register_div = DIV( H3(T("Register")), P( XML( T("If you would like to help, then please <b>sign up now</b>" )))) register_script = ''' $('#register-btn').click(function(e){ e.preventDefault() $('#register_form').show() $('#login_form').hide() }) $('#login-btn').click(function(e){ e.preventDefault() $('#register_form').hide() $('#login_form').show() })''' s3.jquery_ready.append(register_script) # Provide a login box on front page auth.messages.submit_button = T("Login") login_form = auth.login(inline=True) login_div = DIV( H3(T("Login")), #P(XML(T("Registered users can <b>login</b> to access the system"))), ) else: login_buttons = "" output["login_buttons"] = login_buttons output["self_registration"] = self_registration output["registered"] = registered output["login_div"] = login_div output["login_form"] = login_form output["register_div"] = register_div output["register_form"] = register_form s3.stylesheets.append("../themes/%s/homepage.css" % THEME) self._view(settings.get_theme_layouts(), "index.html") return output
def __call__(self): output = {} # Allow editing of page content from browser using CMS module ADMIN = current.auth.s3_has_role("ADMIN") s3db = current.s3db table = s3db.cms_post ltable = s3db.cms_post_module module = "default" resource = "Legal" query = (ltable.module == module) & \ (ltable.resource == resource) & \ (ltable.post_id == table.id) & \ (table.deleted != True) item = current.db(query).select(table.body, table.id, limitby=(0, 1)).first() if item: if ADMIN: content = DIV( XML(item.body), BR(), A( current.T("Edit"), _href=URL( c="cms", f="post", args=[item.id, "update"], vars={ "module": module, "resource": resource, }, ), _class="action-btn", ), ) else: content = DIV(XML(item.body)) elif ADMIN: content = A( current.T("Edit"), _href=URL( c="cms", f="post", args="create", vars={ "module": module, "resource": resource, }, ), _class="action-btn cms-edit", ) else: content = "" output["item"] = content self._view(THEME, "cmspage.html") return output
def found_pay_ins(db, curr_in, xcurr_in, addr, pays, amo_rest): # все зачтенные за последний месяц #xcurr = None # сначала выдадим все неоплоченные входы - они в стеке used = {} privat = not addr or len(addr) < 4 no_addr = privat or addr == "????" for pay in db((not privat) & (db.pay_ins.id == db.pay_ins_stack.ref_) & (db.pay_ins.ref_ == db.deal_acc_addrs.id) & (no_addr or db.deal_acc_addrs.addr == addr)).select( orderby=~db.pay_ins.created_on): xcurr = db.xcurrs[pay.deal_acc_addrs.xcurr_id] if xcurr_in and xcurr_in.id != xcurr.id: continue curr_in = db.currs[xcurr.curr_id] deal_acc = db.deal_accs[pay.deal_acc_addrs.deal_acc_id] deal = db.deals[deal_acc.deal_id] deal_name = deal.name if not privat: # показать подробно мне deal_name = '%s %s' % (deal.name, deal_acc.acc) st = pay.pay_ins.status if st == 'returned': pay_out_info = T('Возвращен обратно') else: pay_out_info = T('НЕ ВЫПЛАЧЕН, статус: ') + (st or T('в обработке')) used[pay.pay_ins.id] = True mess_in = '%s [%s] %s -> %s' % (pay.pay_ins.amount, curr_in.abbrev, pay.pay_ins.created_on, deal_name) pays.append({ T('Вход'): mess_in, T('Выход'): pay_out_info, }) # теперь все выплаченные - их в стеке уже нет и тут глубина - 40 дней # если без адреса то только 1 сутки expired = datetime.datetime.now() - datetime.timedelta( no_addr and 1 or 40, 0) for pay in db((no_addr or db.deal_acc_addrs.addr == addr) & (db.pay_ins.ref_ == db.deal_acc_addrs.id) & (db.pay_ins.created_on > expired)).select( orderby=~db.pay_ins.created_on): if pay.pay_ins.id in used: continue #print pay xcurr = db.xcurrs[pay.deal_acc_addrs.xcurr_id] if xcurr_in and xcurr_in.id != xcurr.id: continue curr_in = db.currs[xcurr.curr_id] deal_acc = db.deal_accs[pay.deal_acc_addrs.deal_acc_id] deal = db.deals[deal_acc.deal_id] curr_out = db.currs[deal_acc.curr_id] dn_url = None if deal.name == 'phone +7': dn_url = URL('to_phone', 'index') elif deal.name == 'WALLET': dn_url = URL('to_wallet', 'index') else: dn_url = URL('more', 'to_pay', args=[deal.id]) order_info = None if pay.pay_ins.order_id: order = db.orders[pay.pay_ins.order_id] order_info = T('№%s от %s, курс:%s') % ( order.id, order.created_on, round(order.volume_out / order.volume_in, 8)) st = pay.pay_ins.status if st == 'returned': pay_out_info = T('Возвращен обратно') else: pay_out_info = T('НЕ ВЫПЛАЧЕН, статус: ') + (st or T('в обработке')) payout = rate = None if pay.pay_ins.payout_id: payout = db.pay_outs[pay.pay_ins.payout_id] if payout and payout.dealer_acc_id: #deal_acc = db.deal_accs[payout.ref_] #deal = db.deals[deal_acc.deal_id] dealer_acc = db.dealers_accs[payout.dealer_acc_id] #curr_out = db.currs[dealer_acc.curr_id] dealer = db.dealers[dealer_acc.dealer_id] dealer_deal = db((db.dealer_deals.deal_id == deal.id) & ( db.dealer_deals.dealer_id == dealer.id)).select().first() #if dealer_deal.p2p and deal.name != 'WALLET': # # если это выплата в магазин то переопределим ссылку # dn_url = URL('to_shop','index') p_i = payout.vars or json.loads(payout.info or '{}') rate = round(payout.amount / payout.amo_in, 8) amo_out = round( pay.pay_ins.amount * payout.amount / payout.amo_in, 2) #if not 'payment_id' in p_i: print payout.info, amo_out pay_out_info = T('%s [%s] -%s%s %s ') % ( amo_out, curr_out.abbrev, dealer_deal.tax, '%', payout.created_on) if not privat: if 'payment_id' in p_i: pay_out_info = pay_out_info + T('%s %s') % ( p_i['payment_id'], p_i.get('invoice_id') or p_i.get('payee')) else: pay_out_info = pay_out_info + '%s' % p_i elif pay.pay_ins.clients_tran_id: # это выплатата клиенту cl_tr = db.clients_trans[pay.pay_ins.clients_tran_id] clnt = db.clients[cl_tr.client_id] amo_out = cl_tr.amo_in rate = None pay_out_info = '' if cl_tr.curr_in_id and cl_tr.curr_in_id != curr_in.id: # была конвертация pay_out_info = pay_out_info + '%s [%s] ' % (amo_out, curr_out.abbrev) #rate = cl_tr.amo_in pay_out_info = pay_out_info + T('зачтено') if privat: dn_url = URL('to_shop', 'index', args=[cl_tr.client_id]) else: pay_out_info = pay_out_info + T(' транзакция №%s - %s') % ( cl_tr.id, cl_tr.desc_) # to_shop/index/2?order=UUWZNTYIR&sum=0.02&curr_out=BTC vvv = {'order': deal_acc.acc, 'curr_out': curr_out.abbrev} if amo_rest: vvv['sum'] = amo_rest dn_url = URL('to_shop', 'index', args=[cl_tr.client_id], vars=vvv) if not order_info and rate: order_info = T('текущий курс:%s') % round(rate, 8) deal_name = deal.name if not privat: deal_name = '%s %s' % (deal.name, deal_acc.acc) deal_name = XML(A(deal_name, _href=dn_url)) rec_vals = { T('Вход'): '%s [%s] %s' % (pay.pay_ins.amount, curr_in.abbrev, pay.pay_ins.created_on), T('Для'): deal_name, T('Заказ'): order_info, T('Выход'): pay_out_info, } if payout: if payout.amo_gift and payout.amo_gift > 0: rec_vals[T( 'Подарок')] = T('Вы получили дополнительно %s [%s]') % ( payout.amo_gift, curr_out.abbrev) if payout.amo_partner and payout.amo_partner > 0: rec_vals[T('Партнёрские' )] = T('Вы получили дополнительно %s [%s]') % ( payout.amo_partner, curr_out.abbrev) pays.append(rec_vals)
def preview(self, item): super(ContentPicture, self).preview(item) info = self.db.plugin_picture_info(item_id=item.unique_id) return XML( self.response.render('plugin_picture/preview.html', dict(item=item, info=info)))
def __call__(self): T = current.T db = current.db s3db = current.s3db output = {} # Recent Updates etable = s3db.event_event stable = s3db.event_sitrep query = (stable.deleted == False) fields = [ etable.name, stable.date, stable.name, stable.summary, ] left = [etable.on(etable.id == stable.event_id)] language = current.session.s3.language if language != current.deployment_settings.get_L10n_default_language(): ntable = s3db.event_event_name left.append(ntable.on((ntable.event_id == etable.id) & \ (ntable.language == language))) fields.append(ntable.name_l10n) use_local_event_name = True else: use_local_event_name = False sitreps = db(query).select(left=left, limitby=(0, 3), orderby=~stable.date, *fields) len_sitreps = len(sitreps) if len_sitreps == 0: from s3 import S3CRUD recent_updates = DIV(S3CRUD.crud_string("event_sitrep", "msg_list_empty"), _class="empty") else: recent_updates = DIV() rappend = recent_updates.append count = 0 for s in sitreps: count += 1 if use_local_event_name: event_name = s["event_event_name.name_l10n"] or s[ "event_event.name"] else: event_name = s["event_event.name"] if not event_name: event_name = s["event_sitrep.name"] rappend(H3(event_name)) rappend(P(XML(s["event_sitrep.summary"]))) if count != len_sitreps: rappend(HR()) output["recent_updates"] = recent_updates map_btn = A( T("MAP OF CURRENT NEEDS"), #_href = URL(c="default", # f="index", # args="dashboard", # ), _href=URL( c="req", f="need_line", args="map", ), _class="small primary button", ) create_btn = A( T("CREATE A NEED"), _href=URL( c="req", f="need", args="create", ), _class="small primary button", ) output["needs_btn"] = DIV( SPAN(map_btn), SPAN(create_btn), _class="button-group radius", ) output["about_btn"] = A( "%s >" % T("Read More"), _href=URL( c="default", f="about", ), ) self._view(THEME, "index.html") # Inject D3 scripts from s3 import S3Report S3Report.inject_d3() # Inject charts-script appname = current.request.application s3 = current.response.s3 scripts = s3.scripts if s3.debug: script = "/%s/static/scripts/S3/s3.ui.charts.js" % appname if script not in scripts: scripts.append(script) else: script = "/%s/static/scripts/S3/s3.ui.charts.min.js" % appname if script not in scripts: scripts.append(script) # Instantiate charts scriptopts = { # Standard SHARE theme color set: "colors": [ '#0C9CD0', # blue '#E03158', # red '#FBA629', # amber '#8ABC3F', # green '#AFB8BF', # grey ], } script = '''$('.homepage-chart').uiChart(%s)''' % json.dumps( scriptopts) s3.jquery_ready.append(script) # Add last update time of chart data last_update = HomepageStatistics.last_update() if last_update: output["last_stats_update"] = T("Updated on %(date)s") % { "date": last_update } else: output["last_stats_update"] = None return output
def comment_internal(self): is_author = False if self.session.auth and self.session.auth.user: is_author = True if self.session.auth.user.id == self.context.article.author else False self.db.Comments.article_id.default = self.context.article.id self.db.Comments.user_id.default = self.session.auth.user.id self.db.Comments.commenttime.default = self.request.now self.db.Comments.comment_text.label = self.T("Post your comment") from plugin_ckeditor import CKEditor ckeditor = CKEditor() self.db.Comments.comment_text.widget = ckeditor.basicwidget form = SQLFORM(self.db.Comments, formstyle='divs') if form.process( message_onsuccess=self.T('Comment included')).accepted: self.new_article_event( 'new_article_comment', self.session.auth.user, data={ 'event_text': form.vars.comment_text, 'event_link': "%s/%s#comment_%s" % (self.context.article.id, self.context.article.slug, form.vars.id) }) else: form = A( self.T("Login to post comments"), _class="button", _href=self.CURL( 'default', 'user', args='login', vars=dict(_next=self.CURL('article', 'show', args=[ self.context.article.id, self.context.article.slug ])))) comments = self.db( self.db.Comments.article_id == self.context.article.id).select( orderby=self.db.Comments.created_on) if comments and is_author: edit_in_place = ckeditor.bulk_edit_in_place( ["comment_%(id)s" % comment for comment in comments], URL('editcomment')) elif comments and self.session.auth and self.session.auth.user: usercomments = comments.find( lambda row: row.user_id == self.session.auth.user.id) if usercomments: edit_in_place = ckeditor.bulk_edit_in_place( ["comment_%(id)s" % comment for comment in usercomments], URL('editcomment')) else: edit_in_place = ('', '') else: edit_in_place = ('', '') return DIV(H4( IMG(_src=URL('static', '%s/images/icons' % self.context.theme_name, args='board.24.png')), self.T("Comments")), UL( *[ LI(H5( A(self.T("%s %s" % (comment.nickname or comment.user_id, self.db.pdate(comment.commenttime))), _href=self.CURL('person', 'show', args=comment.nickname or comment.user_id))), DIV( XML(comment.comment_text), **{ '_class': 'editable commentitem', '_data-object': 'comment', '_data-id': comment.id, '_id': "comment_%s" % comment.id }), _class="comment_li") for comment in comments ], **dict(_class="comment_ul")), edit_in_place[1], form, _class="internal-comments article-box")