Viewing File: /usr/local/cpanel/whostmgr/docroot/templates/quotalist.tmpl
[% USE JSON -%]
[% USE Whostmgr -%]
[% USE CPScalar -%]
[% IF ! data.only_show_over_quota; breadcrumburl = '/scripts/quotalistsel'; END -%]
[% WRAPPER 'master_templates/master.tmpl' theme="yui"
scripts = ['/js/sorttable.js']
app_key = data.only_show_over_quota == 1 ? 'show_accounts_over_quota' : 'quota_modification'
extrastyle = '
input.quota {
text-align: right;
width: 5em;
}
table.brick {
width: 100%;
}
.brickcontainer {
margin-left: 20px;
}
tr.tdredshade {
background-color: #ffaaaa;
font-size: inherit;
}
.form-group {
margin-bottom: 5px;
}
.align-numbers {
text-align: right;
}
html[dir=rtl] .callout-info {
border-left-color: transparent;
border-right-color: #2980b9;
}
.callout-info {
background-color: #d7edf9;
border-left-color: #2980b9;
}
'
-%]
[%- IF Whostmgr.template_vars.envtype == 'virtuozzo' || Whostmgr.template_vars.envtype == 'vzcontainer' %]
<div class="callout callout-info">
Your system uses Virtuozzo containers. For disk quotas to work, your hosting provider may need to enable quotas on the host node. More information is
available in our <a target="_blank" href="https://go.cpanel.net/vzquotas">documentation</a>.
</div>
[%- END %]
[% IF data.quotas_enabled -%]
[% SET DEFAULT_QUOTA = 250; #Do we have a setting for this? -%]
[% PROCESS '_ajaxapp_styles.tmpl' -%]
[% PROCESS '_ajaxapp_header.tmpl' -%]
<br />
<script>
function form_changed() {
var quota = this.quota;
if ( this.quota_control ) {
var changed = this.quota_control[0].defaultChecked
? ( (quota.value !== quota.defaultValue) || !this.quota_control[0].checked )
: this.quota_control[0].checked
;
}
else {
var changed = (quota.value !== quota.defaultValue)
}
var valid = true;
if (changed && !quota.disabled) {
valid = !!parseInt(quota.value.trim());
}
this.getElementsByTagName("button")[0].disabled = !changed || !valid;
return changed && valid;
};
var ERROR_NOTICE;
function save_quota(form) {
if ( form_changed.call(form) ) {
var progress = new CPANEL.ajax.Progress_Panel( null, {
status_html: '[% locale.maketext('Updating quota for “[output,class,_1,code]” …','{user}') %]'.replace( "{user}", form.user.value.html_encode() )
} );
var button = form.getElementsByTagName("button")[0];
var source = document.activeElement;
progress.show_from_source( source );
var quota = form.quota.disabled ? 'unlimited' : parseInt(form.quota.value.trim());
var call = CPANEL.api( {
func: "editquota",
data: { user: form.user.value, quota:quota },
callback: {
failure: function(o) {
progress.hide_to_point(source);
var err = String(o.cpanel_error || o.error || o);
if (ERROR_NOTICE) {
ERROR_NOTICE.cfg.setProperty("content", err.html_encode());
}
else {
ERROR_NOTICE = new CPANEL.widgets.Page_Notice({level:"error", content:err.html_encode(), replaces:ERROR_NOTICE});
}
},
success: function(o) {
progress.hide_to_point(source);
if (ERROR_NOTICE && ERROR_NOTICE.element) {
var old_notice = ERROR_NOTICE;
ERROR_NOTICE = null;
CPANEL.animate.slide_up(old_notice.element)
.onComplete.subscribe( old_notice.destroy, old_notice, true );
}
CPANEL.dom.set_form_defaults(form);
button.disabled = true;
DOM.getAncestorByTagName(form,"td").setAttribute("sorttable_customkey",quota);
new CPANEL.ajax.Dynamic_Notice({level:"success", content:"[% locale.maketext('Success!') %]"});
if (form.user.value in USER_USED_KIB) {
var row = DOM.getAncestorByTagName(form, "tr");
if (USER_USED_KIB[form.user.value] < (quota * 1024) || quota === 'unlimited') {
DOM.removeClass( row, "tdredshade" );
}
else {
DOM.addClass( row, "tdredshade" );
}
}
}
}
} );
}
};
var USER_USED_KIB = {};
</script>
<div id="cjt_pagenotice_container"></div>
<div class="brickcontainer">
<div class="brickcontainer2">
<table class="sortable brick" id="qlist">
<thead>
<tr class="cellheader">
<th class="heavybg"> User </th>
<th class="sorttable_space heavybg"> Space Used </th>
<th class="sorttable_numeric heavybg"> Quota </th>
</tr>
</thead>
<tbody>
[%
SET totalused = 0;
SET anyone_over_quota = 0;
SET tclass = '';
FOR userdata IN data.users.sort('domain');
SET tclass = (loop.index % 2) ? 'tdshade2' : 'tdshade1';
IF userdata.over_quota;
tclass = tclass _ ' tdredshade';
END;
SET used_disp = CPScalar.sprintf('%.2f', (userdata.used || 0) / 1024) _ ' MB';
SET limit_disp = userdata.limit
? ((userdata.limit || 0) div 1024)
: DEFAULT_QUOTA
;
-%]
<tr class="[% tclass %]">
<td>
[% userdata.domain %] [[% userdata.name %]]
[% IF (data.showres != userdata.name) && Whostmgr.hasroot() && userdata.is_reseller %]<br /><a href="[% cp_security_token %]/scripts/quotalist?showres=[% userdata.name FILTER uri %]">Show only this reseller's accounts</a>[% END %]
<td class="align-numbers">[% used_disp %] </td>
<td sorttable_customkey="[% userdata.limit ? (userdata.limit div 1024) : 'unlimited' -%]">
<form id="[% userdata.name FILTER html %]_form" action="javascript:void(0)" onsubmit="save_quota(this)">
<input type="hidden" name="user" value="[% userdata.name FILTER html %]" />
[% IF data.can_set_unlimited || !userdata.limit -%]
<div class="form-group">
<input type="radio" name="quota_control" value="custom" [% IF userdata.limit %]checked="checked"[% END %] />
<input type="text" class="quota" name="quota" value="[% limit_disp %]" [% IF !userdata.limit %]disabled="disabled"[% END %] /> MB
</div>
<div class="form-group">
<label><input type="radio" name="quota_control" value="unlimited" [% IF !userdata.limit %]checked="checked"[% END %] [% IF !data.can_set_unlimited %]disabled="disabled"[% END %] /> [% locale.maketext('Unlimited') %]</label>
</div>
[% ELSE -%]
<div class="form-group">
<input type="text" class="quota" name="quota" value="[% limit_disp %]" [% IF !userdata.limit %]disabled="disabled"[% END %] /> MB
</div>
[% END -%]
<button type="submit" disabled="disabled" class="btn-primary">[% locale.maketext('Save') %]</button>
</form>
<script>EVENT.onDOMReady(function() {
var form = DOM.get([% userdata.name.json() %] + "_form");
[% IF data.can_set_unlimited || !userdata.limit -%]
var gis = new CPANEL.ajax.Grouped_Input_Set( form, form.quota_control[0], form.quota_control[1] );
[% END -%]
EVENT.on( form, "click", form_changed );
EVENT.on( form, "keyup", form_changed );
USER_USED_KIB[[% userdata.name.json() %]] = [% userdata.used || 0 %];
});</script>
</td>
</tr>
[% END -%]
</tbody><tfoot>
[% IF ! data.only_show_over_quota -%]
<tr><td class="mediumbg"><b> Total Space Used </td><td class="align-numbers"><b> [% CPScalar.sprintf('%.2f', data.total_used / 1024) %] MB </td><td> </td></tr>
[% ELSIF !data.anyone_over_quota -%]
<tr><td class="mediumbg" colspan="4"><b>No users are over their quota.</td></tr>
[% END -%]
</tfoot>
</table>
<br />
[% IF Whostmgr.hasroot() && data.showres -%]
[% WRAPPER '_brick.tmpl' bricktitle='Limited Output' -%]
Only accounts belonging to [% data.showres %] are being shown. If you wish to see all accounts,
<a href='[% cp_security_token %]/scripts/quotalist'>click here</a>.
[% END -%]
[% END -%]
[% IF ! data.only_show_over_quota && (totalused > 0) -%]
[% WRAPPER '_brick.tmpl' bricktitle='Hints' -%]
If all users are listed having 0 disk space used and this is incorrect, please
<a href='[% cp_security_token %]/scripts/newquota'>click here</a> to rebuild your quota files.
[% END -%]
[% END -%]
</div></div>
[% PROCESS '_ajaxapp_footer.tmpl' -%]
[% ELSE -%]
No quotas are enabled on this system.
[% END -%]
[% END #wrapper -%]
Back to Directory
File Manager