##// END OF EJS Templates
#56 added ajax removal of users groups,...
#56 added ajax removal of users groups, fixed permission edition templates by regular non admin users found bugfixes in forms for users groups

File last commit:

r1015:65129c33 beta
r1015:65129c33 beta
Show More
repo_edit.html
338 lines | 12.9 KiB | text/html | HtmlLexer
## -*- coding: utf-8 -*-
<%inherit file="/base/base.html"/>
<%def name="title()">
${_('Edit repository')} ${c.repo_info.repo_name} - ${c.rhodecode_name}
</%def>
<%def name="breadcrumbs_links()">
${h.link_to(_('Admin'),h.url('admin_home'))}
&raquo;
${h.link_to(_('Repositories'),h.url('repos'))}
&raquo;
${_('edit')} "${c.repo_name}"
</%def>
<%def name="page_nav()">
${self.menu('admin')}
</%def>
<%def name="main()">
<div class="box box-left">
<!-- box / title -->
<div class="title">
${self.breadcrumbs()}
</div>
${h.form(url('repo', repo_name=c.repo_info.repo_name),method='put')}
<div class="form">
<!-- fields -->
<div class="fields">
<div class="field">
<div class="label">
<label for="repo_name">${_('Name')}:</label>
</div>
<div class="input">
${h.text('repo_name',class_="medium")}
</div>
</div>
<div class="field">
<div class="label">
<label for="repo_type">${_('Type')}:</label>
</div>
<div class="input">
${h.select('repo_type','hg',c.backends,class_="medium")}
</div>
</div>
<div class="field">
<div class="label label-textarea">
<label for="description">${_('Description')}:</label>
</div>
<div class="textarea text-area editor">
${h.textarea('description',cols=23,rows=5)}
</div>
</div>
<div class="field">
<div class="label label-checkbox">
<label for="private">${_('Private')}:</label>
</div>
<div class="checkboxes">
${h.checkbox('private',value="True")}
</div>
</div>
<div class="field">
<div class="label label-checkbox">
<label for="enable_statistics">${_('Enable statistics')}:</label>
</div>
<div class="checkboxes">
${h.checkbox('enable_statistics',value="True")}
</div>
</div>
<div class="field">
<div class="label label-checkbox">
<label for="enable_downloads">${_('Enable downloads')}:</label>
</div>
<div class="checkboxes">
${h.checkbox('enable_downloads',value="True")}
</div>
</div>
<div class="field">
<div class="label">
<label for="user">${_('Owner')}:</label>
</div>
<div class="input input-small ac">
<div class="perm_ac">
${h.text('user',class_='yui-ac-input')}
<div id="owner_container"></div>
</div>
</div>
</div>
<div class="field">
<div class="label">
<label for="input">${_('Permissions')}:</label>
</div>
<div class="input">
<%include file="repo_edit_perms.html"/>
</div>
<div class="buttons">
${h.submit('save','Save',class_="ui-button")}
${h.reset('reset','Reset',class_="ui-button")}
</div>
</div>
</div>
</div>
${h.end_form()}
<script type="text/javascript">
YAHOO.util.Event.onDOMReady(function(){
var D = YAHOO.util.Dom;
if(!D.hasClass('perm_new_member_name','error')){
D.setStyle('add_perm_input','display','none');
}
YAHOO.util.Event.addListener('add_perm','click',function(){
D.setStyle('add_perm_input','display','');
D.setStyle('add_perm','opacity','0.6');
D.setStyle('add_perm','cursor','default');
});
});
</script>
<script type="text/javascript">
YAHOO.example.FnMultipleFields = function(){
var myUsers = ${c.users_array|n};
var myGroups = ${c.users_groups_array|n};
// Define a custom search function for the DataSource of users
var matchUsers = function(sQuery) {
// Case insensitive matching
var query = sQuery.toLowerCase();
var i=0;
var l=myUsers.length;
var matches = [];
// Match against each name of each contact
for(; i<l; i++) {
contact = myUsers[i];
if((contact.fname.toLowerCase().indexOf(query) > -1) ||
(contact.lname.toLowerCase().indexOf(query) > -1) ||
(contact.nname && (contact.nname.toLowerCase().indexOf(query) > -1))) {
matches[matches.length] = contact;
}
}
return matches;
};
// Define a custom search function for the DataSource of usersGroups
var matchGroups = function(sQuery) {
// Case insensitive matching
var query = sQuery.toLowerCase();
var i=0;
var l=myGroups.length;
var matches = [];
// Match against each name of each contact
for(; i<l; i++) {
matched_group = myGroups[i];
if(matched_group.grname.toLowerCase().indexOf(query) > -1) {
matches[matches.length] = matched_group;
}
}
return matches;
};
//match all
var matchAll = function(sQuery){
u = matchUsers(sQuery);
g = matchGroups(sQuery);
return u.concat(g);
};
// DataScheme for members
var memberDS = new YAHOO.util.FunctionDataSource(matchAll);
memberDS.responseSchema = {
fields: ["id", "fname", "lname", "nname", "grname", "grmembers"]
};
// DataScheme for owner
var ownerDS = new YAHOO.util.FunctionDataSource(matchUsers);
ownerDS.responseSchema = {
fields: ["id", "fname", "lname", "nname"]
};
// Instantiate AutoComplete for perms
var membersAC = new YAHOO.widget.AutoComplete("perm_new_member_name", "perm_container", memberDS);
membersAC.useShadow = false;
membersAC.resultTypeList = false;
// Instantiate AutoComplete for owner
var ownerAC = new YAHOO.widget.AutoComplete("user", "owner_container", ownerDS);
ownerAC.useShadow = false;
ownerAC.resultTypeList = false;
// Helper highlight function for the formatter
var highlightMatch = function(full, snippet, matchindex) {
return full.substring(0, matchindex) +
"<span class='match'>" +
full.substr(matchindex, snippet.length) +
"</span>" +
full.substring(matchindex + snippet.length);
};
// Custom formatter to highlight the matching letters
var custom_formatter = function(oResultData, sQuery, sResultMatch) {
var query = sQuery.toLowerCase();
if (oResultData.grname != undefined){
var grname = oResultData.grname;
var grmembers = oResultData.grmembers;
var grnameMatchIndex = grname.toLowerCase().indexOf(query);
var grprefix = "${_('Group')}: ";
var grsuffix = " ("+grmembers+" ${_('members')})";
if (grnameMatchIndex > -1){
return grprefix+highlightMatch(grname,query,grnameMatchIndex)+grsuffix;
}
return grprefix+oResultData.grname+grsuffix;
}
else if(oResultData.fname != undefined){
var fname = oResultData.fname,
lname = oResultData.lname,
nname = oResultData.nname || "", // Guard against null value
fnameMatchIndex = fname.toLowerCase().indexOf(query),
lnameMatchIndex = lname.toLowerCase().indexOf(query),
nnameMatchIndex = nname.toLowerCase().indexOf(query),
displayfname, displaylname, displaynname;
if(fnameMatchIndex > -1) {
displayfname = highlightMatch(fname, query, fnameMatchIndex);
}
else {
displayfname = fname;
}
if(lnameMatchIndex > -1) {
displaylname = highlightMatch(lname, query, lnameMatchIndex);
}
else {
displaylname = lname;
}
if(nnameMatchIndex > -1) {
displaynname = "(" + highlightMatch(nname, query, nnameMatchIndex) + ")";
}
else {
displaynname = nname ? "(" + nname + ")" : "";
}
return displayfname + " " + displaylname + " " + displaynname;
}
else{
return '';
}
};
membersAC.formatResult = custom_formatter;
ownerAC.formatResult = custom_formatter;
var myHandler = function(sType, aArgs) {
var myAC = aArgs[0]; // reference back to the AC instance
var elLI = aArgs[1]; // reference to the selected LI element
var oData = aArgs[2]; // object literal of selected item's result data
//fill the autocomplete with value
if(oData.nname != undefined){
//users
myAC.getInputEl().value = oData.nname;
YUD.get('perm_new_member_type').value = 'user';
}
else{
//groups
myAC.getInputEl().value = oData.grname;
YUD.get('perm_new_member_type').value = 'users_group';
}
};
membersAC.itemSelectEvent.subscribe(myHandler);
ownerAC.itemSelectEvent.subscribe(myHandler);
return {
memberDS: memberDS,
ownerDS: ownerDS,
membersAC: membersAC,
ownerAC: ownerAC,
};
}();
</script>
</div>
<div class="box box-right">
<div class="title">
<h5>${_('Administration')}</h5>
</div>
<h3>${_('Statistics')}</h3>
${h.form(url('repo_stats', repo_name=c.repo_info.repo_name),method='delete')}
<div class="form">
<div class="fields">
${h.submit('reset_stats_%s' % c.repo_info.repo_name,_('Reset current statistics'),class_="refresh_icon action_button",onclick="return confirm('Confirm to remove current statistics');")}
<div class="field">
<ul>
<li>${_('Fetched to rev')}: ${c.stats_revision}/${c.repo_last_rev}</li>
<li>${_('Percentage of stats gathered')}: ${c.stats_percentage} %</li>
</ul>
</div>
</div>
</div>
${h.end_form()}
<h3>${_('Cache')}</h3>
${h.form(url('repo_cache', repo_name=c.repo_info.repo_name),method='delete')}
<div class="form">
<div class="fields">
${h.submit('reset_cache_%s' % c.repo_info.repo_name,_('Invalidate repository cache'),class_="refresh_icon action_button",onclick="return confirm('Confirm to invalidate repository cache');")}
</div>
</div>
${h.end_form()}
<h3>${_('Delete')}</h3>
${h.form(url('repo', repo_name=c.repo_info.repo_name),method='delete')}
<div class="form">
<div class="fields">
${h.submit('remove_%s' % c.repo_info.repo_name,_('Remove this repository'),class_="delete_icon action_button",onclick="return confirm('Confirm to delete this repository');")}
</div>
</div>
${h.end_form()}
</div>
</%def>