def showdir(request): from time import mktime path = request.POST.get('path', None) if not path or path.strip() == '': parent = BaseObject.resolveID(request.session.get('main_object', None)) if not parent: parent = Page.objects.get(parent__isnull=True) else: from core.views import get_object_by_url parent = get_object_by_url(path) imgs = BaseObject.nodes(parents=[parent], types=['Photo']).all() ret = "" for r in imgs: try: ret += """<table class="imageBlock0" cellpadding="0" cellspacing="0" filename="%s" fname="%s" ext="%s" path="%s" linkto="%s" fsize="%d" date="%s" fwidth="%d" fheight="%d" md5="%s"> <tr><td valign="bottom" align="center"> <div class="imageBlock1"> <div class="imageImage"> <img src="%s" alt="%s" style="max-width:104px; max-height:116px;"/> </div> <div class="imageName">%s</div> </div> </td></tr></table>\n""" % (r.url(), r.url(), "jpg", r.url(), r.url(), r.image.size, r.date_modified.ctime(), r.image.width, r.image.height, r.id, r.thumb_url(), r.title, r.title) except: pass return HttpResponse(ret)
def showdir(request): from time import mktime path = request.POST.get('path', None) if not path or path.strip() == '': parent = BaseObject.resolveID(request.session.get('main_object', None)) if not parent: parent = Page.objects.get(parent__isnull=True) else: from core.views import get_object_by_url parent = get_object_by_url(path) imgs = BaseObject.nodes(parents=[parent], types=['Photo']).all() ret = "" for r in imgs: try: ret += """<table class="imageBlock0" cellpadding="0" cellspacing="0" filename="%s" fname="%s" ext="%s" path="%s" linkto="%s" fsize="%d" date="%s" fwidth="%d" fheight="%d" md5="%s"> <tr><td valign="bottom" align="center"> <div class="imageBlock1"> <div class="imageImage"> <img src="%s" alt="%s" style="max-width:104px; max-height:116px;"/> </div> <div class="imageName">%s</div> </div> </td></tr></table>\n""" % (r.url(), r.url(), "jpg", r.url(), r.url(), r.image.size, r.date_modified.ctime(), r.image.width, r.image.height, r.id, r.thumb_url(), r.title, r.title) except: pass return HttpResponse( ret )
def clonefile(request): import shutil, random parent = BaseObject.resolveID(request.session.get('main_object')) obj = BaseObject.resolveID(request.POST.get('object_id')) newpath = u'%s-%s.%s' % (obj.image.path, random.randint(0,10**9), obj.image.path.split('.')[-1]) shutil.copyfile(obj.image.path, newpath) Photo(parent=parent, author = request.user.is_anonymous and parent.author or request.user, image=newpath).save() return showdir(request)
def clonefile(request): import shutil, random parent = BaseObject.resolveID(request.session.get('main_object')) obj = BaseObject.resolveID(request.POST.get('object_id')) newpath = u'%s-%s.%s' % (obj.image.path, random.randint( 0, 10**9), obj.image.path.split('.')[-1]) shutil.copyfile(obj.image.path, newpath) Photo(parent=parent, author=request.user.is_anonymous and parent.author or request.user, image=newpath).save() return showdir(request)
def sitemap(request): from core.types.support import State from core.types.link import Link public = State.objects.get(name=u'опубликованный') nodes_params = dict(types=['Link', 'Page'], sort_fields=['position'], states=[public], not_browse=False) def set_children(parents, depth=0): from collections import defaultdict children = defaultdict(list) objects = BaseObject.nodes(**nodes_params).parents(*parents).query_set.only('id', 'slug', 'parent', 'title', 'type') while depth: depth -= 1 set_children(objects, depth) for object in objects: children[object.parent_id].append(object) object.type == 'Link' and links.append(object.id) for parent in parents: parent.children = children[parent.id] frontpage = BaseObject.objects.filter(parent__id=None).only('id')[0] objects = BaseObject.nodes(**nodes_params).parents(frontpage).query_set.only('id', 'slug', 'parent', 'title', 'type') links = [object.id for object in objects if object.type == 'Link'] set_children(objects, depth=1) links = Link.objects.only('url').in_bulk(links) return {'sitemap': objects, 'links': links}
def delfile(request): for key in request.POST: if re.search('^md5', key): code = request.POST[key] obj = BaseObject.resolveID(code) obj.delete() return showdir(request)
def uploadfile(request): path = request.POST.get('path', None) if not path or path.strip() == '': parent = BaseObject.resolveID(request.session.get('main_object', None)) if not parent: parent = Page.objects.get(parent__isnull=True) else: from core.views import get_object_by_url parent = get_object_by_url(path) if (len(request.FILES)): for file in request.FILES.items(): if -1 == file[1].name.rfind('.'): return HttpResponseForbidden() (name, ext) = file[1].name.rsplit('.', 2) if not ext in ALLOWED_IMAGES: return HttpResponseForbidden() from django import forms meta_form = forms.models.modelform_factory(Photo, fields=('image', )) f = Photo(parent=parent, author=request.user.is_anonymous and parent.author or request.user) frm = meta_form({}, {'image': file[1]}, instance=f) if frm.is_valid(): frm.save() else: raise Exception("FRM IS NOT VALID") return HttpResponse("Готово.") else: return HttpResponse("Нет файлов для загрузки.")
def uploadfile(request): path = request.POST.get('path', None) if not path or path.strip() == '': parent = BaseObject.resolveID(request.session.get('main_object', None)) if not parent: parent = Page.objects.get(parent__isnull=True) else: from core.views import get_object_by_url parent = get_object_by_url(path) if (len(request.FILES)): for file in request.FILES.items(): if -1 == file[1].name.rfind('.'): return HttpResponseForbidden() (name, ext) = file[1].name.rsplit('.', 2) if not ext in ALLOWED_IMAGES: return HttpResponseForbidden() from django import forms meta_form = forms.models.modelform_factory(Photo, fields = ('image',)) f = Photo(parent=parent, author = request.user.is_anonymous and parent.author or request.user) frm = meta_form({}, {'image':file[1]}, instance=f) if frm.is_valid(): frm.save() else: raise Exception("FRM IS NOT VALID") return HttpResponse( "Готово." ) else: return HttpResponse( "Нет файлов для загрузки." )
def sitemap(request): from core.types.support import State from core.types.link import Link public = State.objects.get(name=u'опубликованный') nodes_params = dict(types=['Link', 'Page'], sort_fields=['position'], states=[public], not_browse=False) def set_children(parents, depth=0): from collections import defaultdict children = defaultdict(list) objects = BaseObject.nodes(**nodes_params).parents( *parents).query_set.only('id', 'slug', 'parent', 'title', 'type') while depth: depth -= 1 set_children(objects, depth) for object in objects: children[object.parent_id].append(object) object.type == 'Link' and links.append(object.id) for parent in parents: parent.children = children[parent.id] frontpage = BaseObject.objects.filter(parent__id=None).only('id')[0] objects = BaseObject.nodes( **nodes_params).parents(frontpage).query_set.only( 'id', 'slug', 'parent', 'title', 'type') links = [object.id for object in objects if object.type == 'Link'] set_children(objects, depth=1) links = Link.objects.only('url').in_bulk(links) return {'sitemap': objects, 'links': links}
def showtree(request): path = '' if request.POST.has_key('path'): path = request.POST['path'] obj = BaseObject.resolveID(request.session.get('main_object', None)) current_node = obj.walktree()[-1] p = Page.objects.get(parent__isnull=True) ret = "" for node in BaseObject.nodes(types=['Page'], parents=[current_node.parent]).all(): if node.id == current_node.id: ret += """<div class="folderOpened %s" path="%s" pathtype="%s">%s (%d)</div>"""%( 'folderAct', node.get_absolute_url(), "images", node.title[:30], len(node.get_images()) ) else: ret += """<div class="folder%s %s" path="%s" pathtype="%s">%s (%d)</div>"""%( "S", "", node.get_absolute_url(), "images", node.title[:30], len(node.get_images()) ) return HttpResponse( ret )
def showpath(request): path = request.POST.get('path', None) if not path: obj = BaseObject.resolveID(request.session.get('main_object', None)) if not obj: path = "/" else: path = obj.get_absolute_url() return HttpResponse(DirPath(request.POST['type'], path) )
def showpath(request): path = request.POST.get('path', None) if not path: obj = BaseObject.resolveID(request.session.get('main_object', None)) if not obj: path = "/" else: path = obj.get_absolute_url() return HttpResponse(DirPath(request.POST['type'], path))
def trash(object, request): """ PageTemplate trash -- корзина Возвращает список объектов parent-ом которых она является. TODO: добавить paginator """ from core.models import BaseObject objects = BaseObject.nodes(parents=[object.id], foruser=True, sort_fields=['-date_modified']) if not request.user.is_superuser: objects = objects.authors(request.user) return {'objects':objects.all()}
def showtree(request): path = '' if request.POST.has_key('path'): path = request.POST['path'] obj = BaseObject.resolveID(request.session.get('main_object', None)) current_node = obj.walktree()[-1] p = Page.objects.get(parent__isnull=True) ret = "" for node in BaseObject.nodes(types=['Page'], parents=[current_node.parent]).all(): if node.id == current_node.id: ret += """<div class="folderOpened %s" path="%s" pathtype="%s">%s (%d)</div>""" % ( 'folderAct', node.get_absolute_url(), "images", node.title[:30], len(node.get_images())) else: ret += """<div class="folder%s %s" path="%s" pathtype="%s">%s (%d)</div>""" % ( "S", "", node.get_absolute_url(), "images", node.title[:30], len(node.get_images())) return HttpResponse(ret)
def set_children(parents, depth=0): from collections import defaultdict children = defaultdict(list) objects = BaseObject.nodes(**nodes_params).parents(*parents).query_set.only('id', 'slug', 'parent', 'title', 'type') while depth: depth -= 1 set_children(objects, depth) for object in objects: children[object.parent_id].append(object) object.type == 'Link' and links.append(object.id) for parent in parents: parent.children = children[parent.id]
def set_children(parents, depth=0): from collections import defaultdict children = defaultdict(list) objects = BaseObject.nodes(**nodes_params).parents( *parents).query_set.only('id', 'slug', 'parent', 'title', 'type') while depth: depth -= 1 set_children(objects, depth) for object in objects: children[object.parent_id].append(object) object.type == 'Link' and links.append(object.id) for parent in parents: parent.children = children[parent.id]
def render(self, context): if len(self.param_array)==1: pa = self.param_array[0].resolve(context) self.param_array = [template.Variable(x) for x in reduce(lambda x,y:x+y, pa)] filters = {} # nodes = BaseObject.nodes() ns = BaseObject.nodes().namespace() limit = 0 for i in xrange(len(self.param_array)/2): try: k = self.param_array[2*i].resolve(context) except template.VariableDoesNotExist, E: k = eval('u"%s"'%str(self.param_array[2*i])) try: v = self.param_array[2*i+1].resolve(context) except template.VariableDoesNotExist, E: v = eval('SafeUnicode(u"%s")'%str(self.param_array[2*i+1]))
def photoline(request): result = BaseObject.nodes()(types=['News'], sort_fields=['-date_published'], states=[u'опубликовынный',u'на главной']).all()[:100] all_imgs = [] for x in result: all_imgs.extend( x.get_images() ) format = request.GET.get("format", "medium") if format != "small": format = "medium" x = y = 160 count = 25 else: x = y = 80 count = 70 print "EEE", len(all_imgs), count imgs = random.sample(all_imgs, count) return { 'imgs': imgs, 'format': format, 'x': x, 'y': y }
def render(self, context): if len(self.param_array) == 1: pa = self.param_array[0].resolve(context) self.param_array = [ template.Variable(x) for x in reduce(lambda x, y: x + y, pa) ] filters = {} # nodes = BaseObject.nodes() ns = BaseObject.nodes().namespace() limit = 0 for i in xrange(len(self.param_array) / 2): try: k = self.param_array[2 * i].resolve(context) except template.VariableDoesNotExist, E: k = eval('u"%s"' % str(self.param_array[2 * i])) try: v = self.param_array[2 * i + 1].resolve(context) except template.VariableDoesNotExist, E: v = eval('SafeUnicode(u"%s")' % str(self.param_array[2 * i + 1]))
v = eval('SafeUnicode(u"%s")' % str(self.param_array[2 * i + 1])) if k not in ns: continue if k == u"limit": limit = int(v) elif k in (u'cascade', u'foruser'): # nodes = eval('''nodes.%s()'''%k) filters[str(k)] = True elif k == u'search': filters['search'] = eval(''' u'%s' ''' % v) elif type(v) == SafeUnicode: # nodes = eval('''nodes.%s(u"%s")'''%(k,v)) if not filters.has_key(str(k)): filters[str(k)] = [] filters[str(k)].append(eval(''' u'%s' ''' % v)) else: # nodes = eval('''nodes.%s("%s")'''%(k,v)) if not filters.has_key(str(k)): filters[str(k)] = [] filters[str(k)].append(eval(''' '%s' ''' % v)) print 'FILTERS', filters nodes = BaseObject.nodes(**filters) if limit > 0: context[self.var] = nodes.limit(limit) else: context[self.var] = nodes.all() return ''
def get_nested_links(self): return BaseObject.nodes().parents(self).types('Link').states(u'опубликованный').all()
def get_block(viewlet_dict, column, obj, req, fn, edit=False, new_type=None, data=None): """ Вычисляет содержимое колонки. column ::= {position} position ::= col, ":", num col ::= "a" | "b" | "c" num ::= {digit} Значение поля position (см. модель Viewlet): position_value ::= object | "$self" object ::= class, ":", id class ::= models.CLASS_DICT id ::= {digit} $self -- показывает сам объект, соответствующий текущему baseobject id. {a|b|c}:0 -- отключает показ соответствующей колонки. """ from core.models import BaseObject #raise Http404(u'asd') local_keys = filter( lambda x: x[0] == column and viewlet_dict[x] is not None, viewlet_dict.keys()) if len(local_keys) > 1: try: del (viewlet_dict["%s:0" % column]) local_keys = filter(lambda x: x[0] == column, viewlet_dict.keys()) except: pass out = u"" if len(local_keys) == 1 and local_keys[0] == "%s:0" % column: return None local_keys.sort() for key in local_keys: if viewlet_dict[key] == "$self": t = obj.direct_cast() else: (cls, oid) = viewlet_dict[key].split(":") from core import types # t = getattr(types, cls).objects.get(id=oid) t = BaseObject.resolveID(oid) # t = BaseObject.objects.get(id=oid).direct_cast() # t = eval("%s.objects.get(id=%s)"%(cls,oid)) # fn(t.__class__.__name__) # Где грязный хак, тут грязный хак?! req.main_object = obj req.session['main_object'] = obj.id if viewlet_dict[key] != "$self": out += t.render(req) # Создаем новый объект if new_type is not None: req.session['main_object'] = None print REGISTRUM['types'][new_type] t = (viewlet_dict[key] == "$self") and REGISTRUM['types'][new_type]['cls']( parent=t, type=new_type) try: out += (viewlet_dict[key] == "$self") and (data or t.render(req)) or '' except EPlainTextException, E: raise E except Http302, E: raise E
def reviewer_list(request): from core.models import BaseObject objs = BaseObject.nodes(states=[u'на редактировании'], sort_fields=['date_modified']).all() return {'obj_list': objs}
def get_block(viewlet_dict, column, obj, req, fn, edit=False, new_type=None, data=None): """ Вычисляет содержимое колонки. column ::= {position} position ::= col, ":", num col ::= "a" | "b" | "c" num ::= {digit} Значение поля position (см. модель Viewlet): position_value ::= object | "$self" object ::= class, ":", id class ::= models.CLASS_DICT id ::= {digit} $self -- показывает сам объект, соответствующий текущему baseobject id. {a|b|c}:0 -- отключает показ соответствующей колонки. """ from core.models import BaseObject #raise Http404(u'asd') local_keys = filter(lambda x: x[0] == column and viewlet_dict[x] is not None, viewlet_dict.keys()) if len(local_keys)>1: try: del(viewlet_dict["%s:0"%column]) local_keys = filter(lambda x: x[0] == column, viewlet_dict.keys()) except: pass out = u"" if len(local_keys) == 1 and local_keys[0] == "%s:0"%column: return None local_keys.sort() for key in local_keys: if viewlet_dict[key] == "$self": t = obj.direct_cast() else: (cls, oid) = viewlet_dict[key].split(":") from core import types # t = getattr(types, cls).objects.get(id=oid) t = BaseObject.resolveID(oid) # t = BaseObject.objects.get(id=oid).direct_cast() # t = eval("%s.objects.get(id=%s)"%(cls,oid)) # fn(t.__class__.__name__) # Где грязный хак, тут грязный хак?! req.main_object = obj req.session['main_object'] = obj.id if viewlet_dict[key] != "$self": out += t.render(req) # Создаем новый объект if new_type is not None : req.session['main_object'] = None print REGISTRUM['types'][new_type] t = (viewlet_dict[key] == "$self") and REGISTRUM['types'][new_type]['cls'](parent=t, type=new_type) try: out += (viewlet_dict[key] == "$self") and (data or t.render(req)) or '' except EPlainTextException, E: raise E except Http302, E: raise E
def reviewer_list(request): from core.models import BaseObject objs = BaseObject.nodes(states = [u'на редактировании'], sort_fields = ['date_modified']).all() return {'obj_list':objs}
def get_nested_links(self): return BaseObject.nodes().parents(self).types('Link').states( u'опубликованный').all()
if k not in ns: continue if k == u"limit": limit = int(v) elif k in (u'cascade', u'foruser'): # nodes = eval('''nodes.%s()'''%k) filters[str(k)] = True elif k == u'search': filters['search'] = eval(''' u'%s' ''' % v) elif type(v) == SafeUnicode: # nodes = eval('''nodes.%s(u"%s")'''%(k,v)) if not filters.has_key(str(k)): filters[str(k)] = [] filters[str(k)].append(eval(''' u'%s' ''' % v)) else: # nodes = eval('''nodes.%s("%s")'''%(k,v)) if not filters.has_key(str(k)): filters[str(k)] = [] filters[str(k)].append(eval(''' '%s' ''' % v)) print 'FILTERS', filters nodes = BaseObject.nodes(**filters) if limit>0: context[self.var] = nodes.limit(limit) else: context[self.var] = nodes.all() return ''