Skip to content

Commit

Permalink
Fix form bug
Browse files Browse the repository at this point in the history
  • Loading branch information
ibuler committed Apr 12, 2017
1 parent 695e4da commit 2ec0ab8
Show file tree
Hide file tree
Showing 12 changed files with 82 additions and 229 deletions.
16 changes: 16 additions & 0 deletions apps/assets/api.py
Original file line number Diff line number Diff line change
Expand Up @@ -172,3 +172,19 @@ def retrieve(self, request, *args, **kwargs):
return Response('1')
else:
return Response('0', status=502)


class AssetGroupPushSystemUserView(generics.UpdateAPIView):
queryset = AssetGroup.objects.all()
permission_classes = (IsSuperUser,)

def patch(self, request, *args, **kwargs):
asset_group = self.get_object()
assets = asset_group.assets.all()
system_user_id = self.request.data['system_user']
system_user = get_object_or_none(SystemUser, id=system_user_id)
if not assets or not system_user:
return Response('Invalid system user id or asset group id', status=404)
task = push_users.delay([asset._to_secret_json() for asset in assets],
system_user._to_secret_json())
return Response(task.id)
2 changes: 1 addition & 1 deletion apps/assets/forms.py
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ class AssetBulkUpdateForm(forms.ModelForm):
required=True,
help_text='* required',
label=_('Select assets'),
choices=[(asset.id, asset.hostname) for asset in Asset.objects.all()],
# choices=[(asset.id, asset.hostname) for asset in Asset.objects.all()],
widget=forms.SelectMultiple(
attrs={
'class': 'select2',
Expand Down
1 change: 1 addition & 0 deletions apps/assets/models/user.py
Original file line number Diff line number Diff line change
Expand Up @@ -157,6 +157,7 @@ class SystemUser(models.Model):

def __unicode__(self):
return self.name
__str__ = __unicode__

@property
def password(self):
Expand Down
160 changes: 48 additions & 112 deletions apps/assets/templates/assets/asset_group_detail.html
Original file line number Diff line number Diff line change
Expand Up @@ -51,22 +51,6 @@
</tr>
</thead>
<tbody>
{# {% for asset in assets %}#}
{# <tr id="bdg_asset" data-aid="{{ asset.id }}">#}
{# <td>{{ asset.hostname }}</td>#}
{# <td>{{ asset.ip }}</td>#}
{# <td>{{ asset.port }}</td>#}
{# {% if asset.is_active %}#}
{# <td><i class="fa fa-circle text-navy"></i></td>#}
{# {% else %}#}
{# <td><i class="fa fa-circle text-danger"></i></td>#}
{# {% endif %}#}
{# <td>#}
{# <a class="btn btn-xs btn-danger m-l-xs btn_asset_delete" data-aid="{{ asset.id }}">{% trans "Delete" %}</a>#}
{# <a class="btn btn-xs btn-info m-l-xs btn_asset_update" data-aid="{{ asset.id }}" href="{% url 'assets:asset-update' pk=asset.id %}">{% trans "Update" %}</a>#}
{# </td>#}
{# </tr>#}
{# {% endfor %}#}
</tbody>
</table>
</div>
Expand All @@ -83,9 +67,9 @@
<form>
<tr class="no-borders-tr">
<td colspan="2">
<select data-placeholder="{% trans 'Select assets' %}" class="select2" style="width: 100%" multiple="" tabindex="4">
<select data-placeholder="{% trans 'Select assets' %}" class="select2 asset-select" style="width: 100%" multiple="" tabindex="4">
{% for asset in assets_remain %}
<option value="{{ asset.id }}" id="opt_{{ asset.id }}">{{ asset.ip }}:{{ asset.port }}</option>
<option value="{{ asset.id }}" id="opt_{{ asset.id }}">{{ asset.hostname }}</option>
{% endfor %}
</select>
</td>
Expand All @@ -100,20 +84,47 @@
</table>
</div>
</div>
</div>

<div class="col-sm-5" style="padding-left: 0;padding-right: 0">
<div class="panel panel-warning">
<div class="panel-heading">
<i class="fa fa-info-circle"></i> {% trans 'Push system user to this group assets' %}
</div>
<div class="panel-body">
<table class="table">
<tbody>
<form>
<tr class="no-borders-tr">
<td colspan="2">
<select data-placeholder="{% trans 'Select system users' %}" class="select2 system-user-select" style="width: 100%" multiple="" tabindex="4">
{% for system_user in system_users %}
<option value="{{ system_user.id }}"> {{ system_user.name }} </option>
{% endfor %}
</select>
</td>
</tr>
<tr class="no-borders-tr">
<td colspan="2">
<button type="button" class="btn btn-warning btn-sm btn-push-system-user">{% trans 'Push' %}</button>
</td>
</tr>
</form>
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
{# </div>#}

{% endblock %}
{% block custom_foot_js %}
<script>
jumpserver.assets_selected = {};
jumpserver.system_users_selected = {};
function updateAssetsGroup(assets) {
var the_url = "{% url 'api-assets:asset-groups-update' pk=asset_group.id %}";
var body = {
Expand Down Expand Up @@ -154,7 +165,7 @@
});
}

function objectDelete(obj, name, url, data) {
function leaveGroup(obj, name, url, data) {
function doDelete() {
var body = data;
var success = function() {
Expand Down Expand Up @@ -186,27 +197,18 @@
});
}

function updateAssetGroupSystemUsers(system_users) {
var the_url = "{% url 'api-assets:asset-groups-update-systemusers' pk=asset_group.id %}";
function pushSystemUser(sysUserID) {
var the_url = "{% url 'api-assets:asset-group-push-system-user' pk=asset_group.id %}";
var body = {
system_users: Object.assign([], system_users)
system_user: sysUserID
};
var success = function(data) {
$('.select2-selection__rendered').empty();
$('#groups_selected').val('');
$.map(jumpserver.system_users_selected, function(system_user, index) {
$('#opt_' + index).remove();
$('.system-user-table tbody').append(
'<tr>' +
'<td><b class="bdg_group" data-sid="' + index + '">' + system_user + '</b></td>' +
'<td><button class="btn btn-danger btn-xs pull-right btn_leave_group" type="button"><i class="fa fa-minus"></i></button></td>' +
'</tr>'
)
});
jumpserver.system_users_selected = {};
var url = "{% url 'ops:task-detail' pk=234234234 %}".replace("234234234", data);
location.href = url
};
APIUpdateAttr({
url: the_url,
method: 'PATCH',
body: JSON.stringify(body),
success: success
});
Expand All @@ -232,17 +234,7 @@
};

$(document).ready(function () {
$('.select2').select2()
.on("select2:select", function (evt) {
var data = evt.params.data;
jumpserver.assets_selected[data.id] = data.text;
jumpserver.system_users_selected[data.id] = data.text;
})
.on('select2:unselect', function(evt) {
var data = evt.params.data;
delete jumpserver.assets_selected[data.id];
delete jumpserver.system_users_selected[data.id]
});
$('.select2').select2();

var options = {
ele: $('#asset_list_table'),
Expand Down Expand Up @@ -274,39 +266,13 @@
jumpserver.initDataTable(options);
})

.on('click', '.btn-asset-add-groups', function () {
if (Object.keys(jumpserver.assets_selected).length === 0) {
return false;
}
jumpserver.system_users_selected = {};
var $data_table = $("#asset_list_table").DataTable();
var assets = [];
$.ajax({
url: '{% url "api-assets:asset-list" %}?asset_group_id={{ asset_group.id }}',
method: 'GET',
dataType: 'json',
success: function (result) {
for(var i in result){
if (!isNaN(parseInt(result[i]['id']))) {
assets.push(parseInt(result[i]['id']))
}
}
$.map(jumpserver.assets_selected, function(value, index) {
assets.push(parseInt(index));
});
assets.unique();
var the_url = "{% url 'api-assets:asset-groups-update' pk=asset_group.id %}";
var body = {"assets": assets};
APIUpdateAttr({
url: the_url,
body: JSON.stringify(body),
method: 'PATCH'
});
{# TODO: reflash the table and reset the jumpserver variables #}
{# window.location.href='{% url "assets:asset-group-detail" pk=asset_group.id %}';#}

}
});
.on('click', '.btn-push-system-user', function () {
var data = $('.system-user-select').select2();
var system_id = data.val()[0];
if (!system_id) {
return false
}
pushSystemUser(system_id)
})

.on('click', '.btn_asset_delete', function () {
Expand All @@ -320,40 +286,10 @@
var delete_asset_id = $(this).data('aid');
assets.remove(delete_asset_id);
var data = {"assets": assets};
objectDelete($this, name, the_url, data);
leaveGroup($this, name, the_url, data);
})

.on('click', '.btn-asset-add-groups-system-users', function () {
if (Object.keys(jumpserver.system_users_selected).length === 0) {
return false;
}
jumpserver.assets_selected = {};
var system_users = $('.bdg_system_user').map(function() {
return $(this).data('sid');
}).get();
$.map(jumpserver.system_users_selected, function(value, index) {
system_users.push(parseInt(index));
$('#opt_' + index).remove();
});
system_users.unique();
updateAssetGroupSystemUsers(system_users);
})

.on('click', '.btn_leave_asset_group', function () {
var $this = $(this);
var $tr = $this.closest('tr');
var $badge = $tr.find('.bdg_system_user');
var sid = $badge.data('sid');
var name = $badge.html() || $badge.text();
$('system-user-table').append(
'<option value="' + sid + '" id="opt_' + sid + '">' + name + '</option>'
);
$tr.remove();
var system_users = $('.bdg_system_user').map(function () {
return $(this).data('sid');
}).get();
updateAssetGroupSystemUsers(system_users)
})

</script>
{% endblock %}
3 changes: 3 additions & 0 deletions apps/assets/urls/api_urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,9 @@
url(r'^v1/assets/(?P<pk>\d+)/system-users/$',
api.SystemUserUpdateApi.as_view(), name='asset-update-system-users'),

url(r'^v1/asset-groups/(?P<pk>\d+)/push-system-user/$',
api.AssetGroupPushSystemUserView.as_view(), name='asset-group-push-system-user'),

# update the system users, which add and delete the asset to the system user
url(r'^v1/system_user/(?P<pk>\d+)/assets/$',
api.SystemUserUpdateAssetsApi.as_view(), name='systemuser-update-assets'),
Expand Down
5 changes: 4 additions & 1 deletion apps/ops/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@

from django.db import models
from django.utils.translation import ugettext_lazy as _
from assets.models import Asset

__all__ = ["Task"]

Expand All @@ -33,7 +34,9 @@ def __unicode__(self):

@property
def total_assets(self):
return self.assets.split(',')
assets_id = [i for i in self.assets.split(',') if i.isdigit()]
assets = Asset.objects.filter(id__in=assets_id)
return assets

@property
def assets_json(self):
Expand Down
10 changes: 5 additions & 5 deletions apps/ops/templates/ops/task_detail.html
Original file line number Diff line number Diff line change
Expand Up @@ -83,11 +83,11 @@
<tr>
<td>{% trans 'assets' %}:</td>
<td>
<b>
{% for asset in object.total_assets %}
{{ asset }} <br/>
{% endfor %}
</b>
<b>
{% for asset in object.total_assets %}
{{ asset.hostname }} <br/>
{% endfor %}
</b>
</td>
</tr>
</tbody>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,9 +38,9 @@ <h3>{% trans 'User' %}</h3>
{% bootstrap_field form.user_groups layout="horizontal" %}
<div class="hr-line-dashed"></div>
<h3>{% trans 'Asset' %}</h3>
{{ form.assets|bootstrap_horizontal|safe }}
{% bootstrap_field form.assets layout="horizontal" %}
{% bootstrap_field form.asset_groups layout="horizontal" %}
{{ form.system_users |bootstrap_horizontal }}
{% bootstrap_field form.system_users layout="horizontal" %}
<div class="hr-line-dashed"></div>
<h3>{% trans 'Other' %}</h3>
<div class="form-group">
Expand Down
2 changes: 1 addition & 1 deletion apps/users/forms.py
Original file line number Diff line number Diff line change
Expand Up @@ -123,7 +123,7 @@ class UserBulkUpdateForm(forms.ModelForm):
required=True,
help_text='* required',
label=_('Select users'),
choices=[(user.id, user.name ) for user in User.objects.all()],
# choices=[(user.id, user.name) for user in User.objects.all()],
widget=forms.SelectMultiple(
attrs={
'class': 'select2',
Expand Down
Loading

0 comments on commit 2ec0ab8

Please sign in to comment.