Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions cyder/base/eav/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@

class Attribute(models.Model):
search_fields = ('name',)
display_fields = ('name',)

class Meta:
app_label = 'cyder'
Expand All @@ -25,6 +26,14 @@ class Meta:
def __unicode__(self):
return self.name

def details(self):
data = {}
data['data'] = [
('Name', 'name', self),
]
data['url'] = ""
return data


class EAVBase(BaseModel, ObjectUrlMixin):
"""The entity-attribute-value base model
Expand Down
12 changes: 8 additions & 4 deletions cyder/base/tablefier.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,15 @@

class Tablefier:
def __init__(self, objects, request=None, extra_cols=None,
users=False, custom=None, update=True):
users=False, custom=None, update=True, obj_type=""):
if users:
from cyder.core.cyuser.models import UserProfile
objects = UserProfile.objects.filter(user__in=objects)

self.objects = objects
self.request = request
self.custom = custom
self.obj_type = obj_type
if self.custom:
self.extra_cols = None
self.update = False
Expand Down Expand Up @@ -106,9 +107,11 @@ def build_data(self, obj, value):

@staticmethod
def build_extra(d):
data_fields = ['value', 'url', 'img', 'class']
data_fields = ['value', 'url', 'img', 'class', 'pk']
if not isinstance(d['value'], list):
for k, v in d.items():
if k == 'pk':
continue
d[k] = [v]
col = dict(filter(lambda (k, v): k in data_fields, d.items()))
return col
Expand Down Expand Up @@ -137,8 +140,8 @@ def build_update_field(obj):
('objType', obj._meta.db_table),
('getUrl', reverse('get-update-form')),
('prettyObjType', obj.pretty_type)],
[('kwargs', '{"obj_type": "' + str(obj._meta.db_table)
+ '", "pk": "' + str(obj.id) + '"}')]],
[('kwargs', '{"obj_type": "' + str(obj_type)
+ '", "pk": "' + str(obj.id) + '"}')]],
'class': ['update', 'delete'],
'img': ['/media/img/update.png', '/media/img/delete.png']}
return col
Expand Down Expand Up @@ -183,6 +186,7 @@ def get_table(self):
self.headers # generate headers first to select related objects
objs, data, urls = self.get_data()
return {
'obj_type': self.obj_type,
'headers': self.headers,
'postback_urls': urls,
'data': data,
Expand Down
4 changes: 2 additions & 2 deletions cyder/base/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,7 @@ def make_paginator(request, qs, num=20, obj_type=None):


def tablefy(objects, users=False, extra_cols=None, info=True, request=None,
update=True):
update=True, obj_type=""):
"""Make list of table headers, rows of table data, list of urls
that may be associated with table data, and postback urls.

Expand All @@ -112,7 +112,7 @@ def tablefy(objects, users=False, extra_cols=None, info=True, request=None,
},]
"""
t = Tablefier(objects, request=request, users=users,
extra_cols=extra_cols, update=update)
extra_cols=extra_cols, update=update, obj_type=obj_type)
return t.get_table()


Expand Down
3 changes: 2 additions & 1 deletion cyder/core/ctnr/forms.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,8 @@ class CtnrObjectForm(forms.Form):
('user', 'User'),
('domain', 'Domain'),
('range', 'Range'),
('workgroup', 'Workgroup')))
('workgroup', 'Workgroup'),
('attribute', 'Attribute')))

def __init__(self, *args, **kwargs):
obj_perm = kwargs.pop('obj_perm', False)
Expand Down
2 changes: 2 additions & 0 deletions cyder/core/ctnr/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
from cyder.cydhcp.constants import DYNAMIC
from cyder.cydhcp.range.models import Range
from cyder.cydhcp.workgroup.models import Workgroup
from cyder.base.eav.models import Attribute
from cyder.core.validation import validate_ctnr_name


Expand All @@ -24,6 +25,7 @@ class Ctnr(BaseModel, ObjectUrlMixin):
domains = models.ManyToManyField(Domain, null=False, blank=True)
ranges = models.ManyToManyField(Range, null=False, blank=True)
workgroups = models.ManyToManyField(Workgroup, null=False, blank=True)
attributes = models.ManyToManyField(Attribute, null=False, blank=True)
description = models.CharField(max_length=200, blank=True)
email_contact = models.CharField(max_length=75, blank=True)

Expand Down
13 changes: 11 additions & 2 deletions cyder/core/ctnr/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ def ctnr_detail(request, pk):
ctnrRdomains = ctnr.domains.select_related().filter(is_reverse=True)
ctnrRanges = ctnr.ranges.select_related()
ctnrWorkgroups = ctnr.workgroups.select_related()
ctnrAttributes = ctnr.attributes.select_related()

if request.user.get_profile().has_perm(
request, ACTION_UPDATE, obj_class='CtnrObject', ctnr=ctnr):
Expand All @@ -51,13 +52,19 @@ def ctnr_detail(request, pk):
workgroup_table = tablefy(workgroups, extra_cols=extra_cols,
request=request)

extra_cols, attributes = create_obj_extra_cols(
ctnr, ctnrAttributes, 'attribute')
attribute_table = tablefy(attributes, extra_cols=extra_cols,
request=request, obj_type='attribute')

object_form = CtnrObjectForm(obj_perm=True)

else:
domain_table = tablefy(ctnrDomains, request=request)
rdomain_table = tablefy(ctnrRdomains, request=request)
range_table = tablefy(ctnrRanges, request=request)
workgroup_table = tablefy(ctnrWorkgroups, request=request)
attribute_table = None
object_form = CtnrObjectForm()
object_form.fields['obj_type'] = ChoiceField(widget=HiddenInput,
initial='user')
Expand Down Expand Up @@ -85,6 +92,7 @@ def ctnr_detail(request, pk):
'rdomain_table': rdomain_table,
'range_table': range_table,
'workgroup_table': workgroup_table,
'attribute_table': attribute_table,
'add_user_form': add_user_form,
'object_select_form': object_form
})
Expand Down Expand Up @@ -145,7 +153,7 @@ def create_user_extra_cols(ctnr, ctnrusers, actions=False):
'url': reverse('ctnr-update-user',
kwargs={'ctnr_pk': ctnr.id}),
'img': '/media/img/remove.png',
'class': 'remove user'
'class': 'remove user',
})

extra_cols[0]['data'] = level_data
Expand All @@ -171,7 +179,8 @@ def create_obj_extra_cols(ctnr, obj_set, obj_type):
'url': reverse('ctnr-remove-object', kwargs={
'ctnr_pk': ctnr.id}),
'img': '/media/img/remove.png',
'class': 'remove object'
'class': 'remove object',
'pk': str(obj.pk),
})
objs.append(obj)
extra_cols[0]['data'] = remove_data
Expand Down
6 changes: 4 additions & 2 deletions cyder/templates/base/tables.html
Original file line number Diff line number Diff line change
Expand Up @@ -21,10 +21,12 @@
{% for col in row %}
<td class="{{object_table['headers'][i][0] | lower}}_column">
{% for cell in col['value'] %}
{% if col['url'][loop.index0] %}
{% if col['url'][loop.index0] %}
<a{% if col['class'] %} class="{{ col['class'][loop.index0] }}"{% endif %}
{% if col['data'] %}{% if col['data'][loop.index0] %}{% for data in col['data'][loop.index0] %} data-{{ data[0] }}="{{ data[1] }}"{% endfor %}{% endif %}{% endif %}
href="{{ col['url'][loop.index0] }}">
href="{{ col['url'][loop.index0] }}"
{% if object_table['obj_type'] %} col_obj_type={{ object_table['obj_type'] }} {% endif %}
{% if col['pk'] %} col_pk={{ col['pk'] }} {% endif %}>
{% if col['img'] and col['img'][loop.index0] %}
<img alt="{{ cell }}" src="{{ col['img'][loop.index0] }}">
{% else %}
Expand Down
5 changes: 5 additions & 0 deletions cyder/templates/ctnr/ctnr_detail.html
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,11 @@ <h3>Domains</h3>
{% if rdomain_table %}
<h3>Reverse Domains</h3>
{{ render_table(request, rdomain_table) }}
{% endif %}

{% if attribute_table %}
<h3>Attributes</h3>
{{ render_table(request, attribute_table) }}
{% endif %}
</div>

Expand Down
8 changes: 6 additions & 2 deletions media/js/ctnr/ctnr.js
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,12 @@ $(document).ready(function() {
var url = $(this).attr('href');
var lvl;
var detailUrl = $(this).parent().parent().find('a:first').attr('href');
var pk = detailUrl.split('/').slice(-2)[0];
var obj_type = detailUrl.split('/').slice(2)[0];
var obj_type = $(this).parent().find('a:first').attr('col_obj_type')
if (obj_type == '' || typeof(obj_type) == "undefined")
obj_type = detailUrl.split('/').slice(2)[0];
var pk = $(this).parent().find('a:first').attr('col_pk')
if (pk == '' || typeof(pk) == "undefined")
pk = detailUrl.split('/').slice(-2)[0];
var action = 'user_level';
var acknowledge = true;
if ($(this).attr('class') == 'minus') {
Expand Down