Revisión 76
Añadido por Manu Mora Gordillo hace alrededor de 14 años
controlies/Utils/Utils.py | ||
---|---|---|
##############################################################################
|
||
# -*- coding: utf-8 -*-
|
||
# Project: ControlIES
|
||
# Module: Groups.py
|
||
# Purpose: Groups class
|
||
# Language: Python 2.5
|
||
# Date: 7-Feb-2011.
|
||
# Ver: 7-Feb-2011.
|
||
# Author: Manuel Mora Gordillo
|
||
# Francisco Mendez Palma
|
||
# Copyright: 2011 - Manuel Mora Gordillo <manuito @no-spam@ gmail.com>
|
||
# 2011 - Francisco Mendez Palma <fmendezpalma @no-spam@ gmail.com>
|
||
#
|
||
# ControlIES is free software: you can redistribute it and/or modify
|
||
# it under the terms of the GNU General Public License as published by
|
||
# the Free Software Foundation, either version 3 of the License, or
|
||
# (at your option) any later version.
|
||
# ControlIES is distributed in the hope that it will be useful,
|
||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||
# GNU General Public License for more details.
|
||
# You should have received a copy of the GNU General Public License
|
||
# along with ControlIES. If not, see <http://www.gnu.org/licenses/>.
|
||
#
|
||
##############################################################################
|
||
|
||
def cmpLists(list1, list2):
|
||
|
||
onlyInList1 = set(list1).difference(list2)
|
||
onlyInList2 = set(list2).difference(set(list1))
|
||
inTwoLists = set(list1) & set(list2)
|
||
|
||
return { 'onlyInList1':onlyInList1, 'onlyInList2':onlyInList2, 'inTwoLists':inTwoLists }
|
controlies/Plugins/Users.py | ||
---|---|---|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||
# GNU General Public License for more details.
|
||
# You should have received a copy of the GNU General Public License
|
||
# along with ControlAula. If not, see <http://www.gnu.org/licenses/>.
|
||
# along with ControlIES. If not, see <http://www.gnu.org/licenses/>.
|
||
#
|
||
##############################################################################
|
||
|
||
... | ... | |
|
||
rows = []
|
||
for u in result:
|
||
rows.append({ 'value':u[0][1]['uid'][0] , 'caption':u[0][1]['cn'][0] });
|
||
rows.append([u[0][1]['uid'][0] , u[0][1]['cn'][0] ]);
|
||
|
||
return rows
|
controlies/Plugins/Groups.py | ||
---|---|---|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||
# GNU General Public License for more details.
|
||
# You should have received a copy of the GNU General Public License
|
||
# along with ControlAula. If not, see <http://www.gnu.org/licenses/>.
|
||
# along with ControlIES. If not, see <http://www.gnu.org/licenses/>.
|
||
#
|
||
##############################################################################
|
||
|
||
... | ... | |
import logging
|
||
from math import ceil
|
||
from operator import itemgetter
|
||
from Utils import Utils
|
||
|
||
class Groups(object):
|
||
|
||
def __init__(self):
|
||
pass
|
||
|
||
def __init__(self,ldap,type,name):
|
||
def __init__(self,ldap,type,name,users):
|
||
self.ldap = ldap
|
||
self.type = type
|
||
self.name = name
|
||
|
||
self.users = users
|
||
|
||
def validation(self,action):
|
||
|
||
if action == "add":
|
||
... | ... | |
|
||
if self.name == "":
|
||
return "name"
|
||
|
||
|
||
if self.users == "":
|
||
return "users"
|
||
|
||
return "OK"
|
||
|
||
def process(self,action):
|
||
... | ... | |
|
||
if action == "modify":
|
||
val = self.validation(action)
|
||
|
||
|
||
if val != "OK":
|
||
return val
|
||
else:
|
||
... | ... | |
def add(self):
|
||
maxID = str(self.getMaxID())
|
||
|
||
members = []
|
||
for m in self.users.split(','):
|
||
members.append("uid=" + m + ",ou=People,dc=instituto,dc=extremadura,dc=es")
|
||
|
||
attr = [
|
||
('objectclass', ['top','posixGroup','lisGroup','lisAclGroup']),
|
||
#('objectclass', ['top','posixGroup','lisGroup']),
|
||
('grouptype', [self.type] ),
|
||
('gidnumber', [maxID] ),
|
||
('cn', [self.name] ),
|
||
('description', [self.name+' department group']),
|
||
('memberuid', ['manuprofe']),
|
||
('member', ['uid=manuprofe,ou=People,dc=instituto,dc=extremadura,dc=es'])
|
||
('memberuid', self.users.split(',')),
|
||
('member', members)
|
||
]
|
||
|
||
self.ldap.add("cn="+self.name+",ou=Group", attr)
|
||
|
||
return "OK"
|
||
|
||
|
||
def modify(self):
|
||
print "llego"
|
||
mod_attrs = [
|
||
(ldap.MOD_ADD, 'description', 'Author of New Organon'),
|
||
(ldap.MOD_ADD, 'description', 'British empiricist')
|
||
(ldap.MOD_REPLACE, 'memberuid', 'Author of New Organon'),
|
||
(ldap.MOD_REPLACE, 'member', 'British empiricist')
|
||
]
|
||
self.ldap.modify_s('uid='+ uid +',ou=Group', mod_attrs)
|
||
|
||
#self.ldap.modify_s('uid='+ self.name +',ou=Group', mod_attrs)
|
||
|
||
currentUsers = self.getGroupUsers()
|
||
print currentUsers
|
||
|
||
|
||
def delete(self):
|
||
self.ldap.delete('cn='+ self.name +',ou=Group')
|
||
|
||
... | ... | |
maxID = numbers[len(numbers)-1] + 1
|
||
|
||
return maxID
|
||
|
||
|
||
def getGroupUsers(self):
|
||
result = self.ldap.search("ou=Group","cn="+self.name,["cn","memberUid"])
|
||
|
||
members = []
|
||
for m in result:
|
||
members.append(m[0][1]["memberUid"][0])
|
||
|
||
members.sort()
|
||
|
||
return members
|
controlies/www/js/autocomplete/GrowingInput.js | ||
---|---|---|
/*
|
||
Script: GrowingInput.js
|
||
Alters the size of an input depending on its content
|
||
|
||
License:
|
||
MIT-style license.
|
||
|
||
Authors:
|
||
Guillermo Rauch
|
||
*/
|
||
|
||
(function($){
|
||
|
||
$.GrowingInput = function(element, options){
|
||
|
||
var value, lastValue, calc;
|
||
|
||
options = $.extend({
|
||
min: 0,
|
||
max: null,
|
||
startWidth: 15,
|
||
correction: 15
|
||
}, options);
|
||
|
||
element = $(element).data('growing', this);
|
||
|
||
var self = this;
|
||
var init = function(){
|
||
calc = $('<span></span>').css({
|
||
'float': 'left',
|
||
'display': 'inline-block',
|
||
'position': 'absolute',
|
||
'left': -1000
|
||
}).insertAfter(element);
|
||
$.each(['font-size', 'font-family', 'padding-left', 'padding-top', 'padding-bottom',
|
||
'padding-right', 'border-left', 'border-right', 'border-top', 'border-bottom',
|
||
'word-spacing', 'letter-spacing', 'text-indent', 'text-transform'], function(i, p){
|
||
calc.css(p, element.css(p));
|
||
});
|
||
element.blur(resize).keyup(resize).keydown(resize).keypress(resize);
|
||
resize();
|
||
};
|
||
|
||
var calculate = function(chars){
|
||
calc.text(chars);
|
||
var width = calc.width();
|
||
return (width ? width : options.startWidth) + options.correction;
|
||
};
|
||
|
||
var resize = function(){
|
||
lastValue = value;
|
||
value = element.val();
|
||
var retValue = value;
|
||
if(chk(options.min) && value.length < options.min){
|
||
if(chk(lastValue) && (lastValue.length <= options.min)) return;
|
||
retValue = str_pad(value, options.min, '-');
|
||
} else if(chk(options.max) && value.length > options.max){
|
||
if(chk(lastValue) && (lastValue.length >= options.max)) return;
|
||
retValue = value.substr(0, options.max);
|
||
}
|
||
element.width(calculate(retValue));
|
||
return self;
|
||
};
|
||
|
||
this.resize = resize;
|
||
init();
|
||
};
|
||
|
||
var chk = function(v){ return !!(v || v === 0); };
|
||
var str_repeat = function(str, times){ return new Array(times + 1).join(str); };
|
||
var str_pad = function(self, length, str, dir){
|
||
if (self.length >= length) return this;
|
||
str = str || ' ';
|
||
var pad = str_repeat(str, length - self.length).substr(0, length - self.length);
|
||
if (!dir || dir == 'right') return self + pad;
|
||
if (dir == 'left') return pad + self;
|
||
return pad.substr(0, (pad.length / 2).floor()) + self + pad.substr(0, (pad.length / 2).ceil());
|
||
};
|
||
|
||
})(jQuery);
|
controlies/www/js/autocomplete/TextboxList.Autocomplete.Binary.js | ||
---|---|---|
/*
|
||
Script: TextboxList.Autocomplete.Binary.js
|
||
TextboxList Autocomplete binary search extension
|
||
|
||
Authors:
|
||
Guillermo Rauch
|
||
|
||
Note:
|
||
TextboxList is not priceless for commercial use. See <http://devthought.com/projects/jquery/textboxlist/>
|
||
Purchase to remove this message.
|
||
*/
|
||
|
||
$.TextboxList.Autocomplete.Methods.binary = {
|
||
filter: function(values, search, insensitive, max){
|
||
var method = insensitive ? 'toLowerCase' : 'toString', low = 0, high = values.length - 1, lastTry;
|
||
search = search[method]();
|
||
while (high >= low){
|
||
var mid = parseInt((low + high) / 2);
|
||
var curr = values[mid][1].substr(0, search.length)[method]();
|
||
var result = ((search == curr) ? 0 : ((search > curr) ? 1 : -1));
|
||
if (result < 0) { high = mid - 1; continue; }
|
||
if (result > 0) { low = mid + 1; continue; }
|
||
if (result === 0) break;
|
||
}
|
||
if (high < low) return [];
|
||
var newvalues = [values[mid]], checkNext = true, checkPrev = true, v1, v2;
|
||
for (var i = 1; i <= values.length - mid; i++){
|
||
if (newvalues.length === max) break;
|
||
if (checkNext) v1 = values[mid + i] ? values[mid + i][1].substr(0, search.length)[method]() : false;
|
||
if (checkPrev) v2 = values[mid - i] ? values[mid - i][1].substr(0, search.length)[method]() : false;
|
||
checkNext = checkPrev = false;
|
||
if (v1 === search) { newvalues.push(values[mid + i]); checkNext = true; }
|
||
if (v2 === search) { newvalues.unshift(values[mid - i]); checkPrev = true; }
|
||
if (! (checkNext || checkPrev)) break;
|
||
}
|
||
return newvalues;
|
||
},
|
||
|
||
highlight: function(element, search, insensitive, klass){
|
||
var regex = new RegExp('(<[^>]*>)|(\\b'+ search.replace(/([-.*+?^${}()|[\]\/\\])/g,"\\$1") +')', insensitive ? 'ig' : 'g');
|
||
return element.html(element.html().replace(regex, function(a, b, c, d){
|
||
return (a.charAt(0) == '<') ? a : '<strong class="'+ klass +'">' + c + '</strong>';
|
||
}));
|
||
}
|
||
};
|
controlies/www/js/autocomplete/TextboxList.Autocomplete.css | ||
---|---|---|
/*
|
||
This stylesheet belongs to TextboxList - Copyright Guillermo Rauch <http://devthought.com> 2009
|
||
TextboxList is not priceless for commercial use. See <http://devthought.com/projects/jquery/textboxlist/>
|
||
Purchase to remove copyright
|
||
*/
|
||
|
||
.textboxlist-autocomplete { position: absolute; }
|
||
.textboxlist-autocomplete-placeholder, .textboxlist-autocomplete-results { opacity: 0.9; filter: alpha(opacity=90); background: #eee; -webkit-box-shadow: 0 3px 3px #ccc; -moz-box-shadow: 0 3px 3px #ccc; box-shadow: 0 3px 3px #ccc; border: 1px solid #999; border-top: none; display: none; }
|
||
.textboxlist-autocomplete-placeholder { padding: 5px 7px; }
|
||
.textboxlist-autocomplete-results { margin: 0; padding: 0; }
|
||
.textboxlist-autocomplete-result { margin: 0; padding: 5px; list-style-type: none; background: #fff; }
|
||
.textboxlist-autocomplete-result-focus { background: #C6D9E4; }
|
||
.textboxlist-autocomplete-highlight { background: #54D6F4; font-weight: bold; }
|
||
|
||
/* TextboxList.Autocomplete Style guidelines
|
||
Try to keep .textboxlist-autocomplete {} as it is now
|
||
If you apply custom styles to placeholder, also apply them to results, like it is now.
|
||
.textboxlist-autocomplete-result {} needs a background for IE.
|
||
*/
|
controlies/www/js/autocomplete/TextboxList.css | ||
---|---|---|
/*
|
||
This stylesheet belongs to TextboxList - Copyright Guillermo Rauch <http://devthought.com> 2009
|
||
TextboxList is not priceless for commercial use. See <http://devthought.com/projects/jquery/textboxlist/>
|
||
Purchase to remove copyright
|
||
*/
|
||
|
||
.textboxlist { font: 11px "Lucida Grande", Verdana; cursor: text; }
|
||
.textboxlist-bits { zoom: 1; overflow: hidden; margin: 0; padding: 3px 4px 0; border: 1px solid #999; *padding-bottom: 3px; }
|
||
.textboxlist-bit { list-style-type: none; float: left; display: block; padding: 0; margin: 0 5px 3px 0; cursor: default; }
|
||
.textboxlist-bit-editable { border: 1px solid #fff; }
|
||
.textboxlist-bit-editable-input { border: 0; padding: 2px 0; *padding-bottom: 0; height: 14px; font: 11px "Lucida Grande", Verdana; }
|
||
.textboxlist-bit-editable-input:focus { outline: 0; }
|
||
.textboxlist-bit-box { position: relative; line-height: 18px; padding: 0 5px; -moz-border-radius: 9px; -webkit-border-radius: 9px; border-radius: 9px; border: 1px solid #E78F08; background: #F6AF39; cursor: default; color:white; font-weight:bold; }
|
||
.textboxlist-bit-box-deletable { padding-right: 15px; }
|
||
.textboxlist-bit-box-deletebutton { position: absolute; right: 4px; top: 6px; display: block; width: 7px; height: 7px; font-size: 1px; background: url('close.gif'); }
|
||
.textboxlist-bit-box-deletebutton:hover { border: none; background-position: 7px; text-decoration: none; }
|
||
.textboxlist-bit-box-hover { background: #BBCEF1; border: 1px solid #6D95E0; }
|
||
.textboxlist-bit-box-focus { border-color: #598BEC; background: #598BEC; color: #fff; }
|
||
.textboxlist-bit-box-focus .textboxlist-bit-box-deletebutton { background-position: bottom; }
|
||
|
||
/* TextboxList Style guidelines
|
||
This style doesn't necessarily have to be in a separate file.
|
||
It's advisable not to set widths and margins from here, but instead apply it to a particular object or class (#id .textboxlist { width: xxx } or .class .textboxlist { width: xxx })
|
||
The padding-top + padding-left + height of ".textboxlist-bit-editable-input {}" has to match the line-height of ".textboxlist-bit-box {}" for UI consistency.
|
||
The font configuration has to be present in .textboxlist and .textboxlist-bit-editable-input (for IE reasons)
|
||
The *padding-bottom (notice the *) property of .textboxlist-bits {} has to be equal to the margin-bottom of .textboxlist-bit {} for IE reasons.
|
||
The padding-top of .textboxlist ul {} has to match the margin-bottom of .textboxlist-bit, and the padding-bottom has to be null.
|
||
Make sure the border-width of the .textboxlist-bit-editable {} is equal to the border-width of the box (a border that matches the background is advisable for the input)
|
||
Feel free to edit the borders, fonts, backgrounds and radius.
|
||
*/
|
controlies/www/js/autocomplete/TextboxList.Autocomplete.js | ||
---|---|---|
/*
|
||
Script: TextboxList.Autocomplete.js
|
||
TextboxList Autocomplete plugin
|
||
|
||
Authors:
|
||
Guillermo Rauch
|
||
|
||
Note:
|
||
TextboxList is not priceless for commercial use. See <http://devthought.com/projects/jquery/textboxlist/>
|
||
Purchase to remove this message.
|
||
*/
|
||
|
||
(function(){
|
||
|
||
$.TextboxList.Autocomplete = function(textboxlist, _options){
|
||
|
||
var index, prefix, method, container, list, values = [], searchValues = [], results = [], placeholder = false, current, currentInput, hidetimer, doAdd, currentSearch, currentRequest;
|
||
var options = $.extend(true, {
|
||
minLength: 1,
|
||
maxResults: 10,
|
||
insensitive: true,
|
||
highlight: true,
|
||
highlightSelector: null,
|
||
mouseInteraction: true,
|
||
onlyFromValues: false,
|
||
queryRemote: false,
|
||
remote: {
|
||
url: '',
|
||
param: 'search',
|
||
extraParams: {},
|
||
loadPlaceholder: 'Please wait...'
|
||
},
|
||
method: 'standard',
|
||
placeholder: 'Type to receive suggestions'
|
||
}, _options);
|
||
|
||
var init = function(){
|
||
textboxlist.addEvent('bitEditableAdd', setupBit)
|
||
.addEvent('bitEditableFocus', search)
|
||
.addEvent('bitEditableBlur', hide)
|
||
.setOptions({bitsOptions: {editable: {addKeys: false, stopEnter: false}}});
|
||
if ($.browser.msie) textboxlist.setOptions({bitsOptions: {editable: {addOnBlur: false}}});
|
||
prefix = textboxlist.getOptions().prefix + '-autocomplete';
|
||
method = $.TextboxList.Autocomplete.Methods[options.method];
|
||
container = $('<div class="'+ prefix +'" />').width(textboxlist.getContainer().width()).appendTo(textboxlist.getContainer());
|
||
if (chk(options.placeholder)) placeholder = $('<div class="'+ prefix +'-placeholder" />').html(options.placeholder).appendTo(container);
|
||
list = $('<ul class="'+ prefix +'-results" />').appendTo(container).click(function(ev){
|
||
ev.stopPropagation(); ev.preventDefault();
|
||
});
|
||
};
|
||
|
||
var setupBit = function(bit){
|
||
bit.toElement().keydown(navigate).keyup(function(){ search(); });
|
||
};
|
||
|
||
var search = function(bit){
|
||
if (bit) currentInput = bit;
|
||
if (!options.queryRemote && !values.length) return;
|
||
var search = $.trim(currentInput.getValue()[1]);
|
||
if (search.length < options.minLength) showPlaceholder();
|
||
if (search == currentSearch) return;
|
||
currentSearch = search;
|
||
list.css('display', 'none');
|
||
if (search.length < options.minLength) return;
|
||
if (options.queryRemote){
|
||
if (searchValues[search]){
|
||
values = searchValues[search];
|
||
} else {
|
||
var data = options.remote.extraParams;
|
||
data[options.remote.param] = search;
|
||
if (currentRequest) currentRequest.abort();
|
||
currentRequest = $.ajax({
|
||
url: options.remote.url,
|
||
data: data,
|
||
type: "POST",
|
||
dataType: 'json',
|
||
success: function(r){
|
||
searchValues[search] = r;
|
||
values = r;
|
||
showResults(search);
|
||
}
|
||
});
|
||
}
|
||
}
|
||
showResults(search);
|
||
};
|
||
|
||
var showResults = function(search){
|
||
var results = method.filter(values, search, options.insensitive, options.maxResults);
|
||
if (textboxlist.getOptions().unique){
|
||
results = $.grep(results, function(v){ return textboxlist.isDuplicate(v) == -1; });
|
||
}
|
||
hidePlaceholder();
|
||
if (!results.length) return;
|
||
blur();
|
||
list.empty().css('display', 'block');
|
||
$.each(results, function(i, r){ addResult(r, search); });
|
||
if (options.onlyFromValues) focusFirst();
|
||
results = results;
|
||
};
|
||
|
||
var addResult = function(r, searched){
|
||
var element = $('<li class="'+ prefix +'-result" />').html(r[3] ? r[3] : r[1]).data('textboxlist:auto:value', r);
|
||
element.appendTo(list);
|
||
if (options.highlight) $(options.highlightSelector ? element.find(options.highlightSelector) : element).each(function(){
|
||
if ($(this).html()) method.highlight($(this), searched, options.insensitive, prefix + '-highlight');
|
||
});
|
||
if (options.mouseInteraction){
|
||
element.css('cursor', 'pointer').hover(function(){ focus(element); }).mousedown(function(ev){
|
||
ev.stopPropagation();
|
||
ev.preventDefault();
|
||
clearTimeout(hidetimer);
|
||
doAdd = true;
|
||
}).mouseup(function(){
|
||
if (doAdd){
|
||
addCurrent();
|
||
currentInput.focus();
|
||
search();
|
||
doAdd = false;
|
||
}
|
||
});
|
||
if (!options.onlyFromValues) element.mouseleave(function(){ if (current && (current.get(0) == element.get(0))) blur(); });
|
||
}
|
||
};
|
||
|
||
var hide = function(){
|
||
hidetimer = setTimeout(function(){
|
||
hidePlaceholder();
|
||
list.css('display', 'none');
|
||
currentSearch = null;
|
||
}, $.browser.msie ? 150 : 0);
|
||
};
|
||
|
||
var showPlaceholder = function(){
|
||
if (placeholder) placeholder.css('display', 'block');
|
||
};
|
||
|
||
var hidePlaceholder = function(){
|
||
if (placeholder) placeholder.css('display', 'none');
|
||
};
|
||
|
||
var focus = function(element){
|
||
if (!element || !element.length) return;
|
||
blur();
|
||
current = element.addClass(prefix + '-result-focus');
|
||
};
|
||
|
||
var blur = function(){
|
||
if (current && current.length){
|
||
current.removeClass(prefix + '-result-focus');
|
||
current = null;
|
||
}
|
||
};
|
||
|
||
var focusFirst = function(){
|
||
return focus(list.find(':first'));
|
||
};
|
||
|
||
var focusRelative = function(dir){
|
||
if (!current || !current.length) return self;
|
||
return focus(current[dir]());
|
||
};
|
||
|
||
var addCurrent = function(){
|
||
var value = current.data('textboxlist:auto:value');
|
||
var b = textboxlist.create('box', value.slice(0, 3));
|
||
if (b){
|
||
b.autoValue = value;
|
||
if ($.isArray(index)) index.push(value);
|
||
currentInput.setValue([null, '', null]);
|
||
b.inject(currentInput.toElement(), 'before');
|
||
}
|
||
blur();
|
||
return self;
|
||
};
|
||
|
||
var navigate = function(ev){
|
||
var evStop = function(){ ev.stopPropagation(); ev.preventDefault(); };
|
||
switch (ev.which){
|
||
case 38:
|
||
evStop();
|
||
(!options.onlyFromValues && current && current.get(0) === list.find(':first').get(0)) ? blur() : focusRelative('prev');
|
||
break;
|
||
case 40:
|
||
evStop();
|
||
(current && current.length) ? focusRelative('next') : focusFirst();
|
||
break;
|
||
case 13:
|
||
evStop();
|
||
if (current && current.length) addCurrent();
|
||
else if (!options.onlyFromValues){
|
||
var value = currentInput.getValue();
|
||
var b = textboxlist.create('box', value);
|
||
if (b){
|
||
b.inject(currentInput.toElement(), 'before');
|
||
currentInput.setValue([null, '', null]);
|
||
}
|
||
}
|
||
}
|
||
};
|
||
|
||
this.setValues = function(v){
|
||
values = v;
|
||
};
|
||
|
||
init();
|
||
};
|
||
|
||
$.TextboxList.Autocomplete.Methods = {
|
||
|
||
standard: {
|
||
filter: function(values, search, insensitive, max){
|
||
var newvals = [], regexp = new RegExp('\\b' + escapeRegExp(search), insensitive ? 'i' : '');
|
||
for (var i = 0; i < values.length; i++){
|
||
if (newvals.length === max) break;
|
||
if (regexp.test(values[i][1])) newvals.push(values[i]);
|
||
}
|
||
return newvals;
|
||
},
|
||
|
||
highlight: function(element, search, insensitive, klass){
|
||
var regex = new RegExp('(<[^>]*>)|(\\b'+ escapeRegExp(search) +')', insensitive ? 'ig' : 'g');
|
||
return element.html(element.html().replace(regex, function(a, b, c){
|
||
return (a.charAt(0) == '<') ? a : '<strong class="'+ klass +'">' + c + '</strong>';
|
||
}));
|
||
}
|
||
}
|
||
|
||
};
|
||
|
||
var chk = function(v){ return !!(v || v === 0); };
|
||
var escapeRegExp = function(str){ return str.replace(/([-.*+?^${}()|[\]\/\\])/g, "\\$1"); };
|
||
|
||
})();
|
controlies/www/js/autocomplete/TextboxList.js | ||
---|---|---|
/*
|
||
Script: TextboxList.js
|
||
Displays a textbox as a combination of boxes an inputs (eg: facebook tokenizer)
|
||
|
||
Authors:
|
||
Guillermo Rauch
|
||
|
||
Note:
|
||
TextboxList is not priceless for commercial use. See <http://devthought.com/projects/jquery/textboxlist/>.
|
||
Purchase to remove this message.
|
||
*/
|
||
|
||
(function($){
|
||
|
||
$.TextboxList = function(element, _options){
|
||
|
||
var original, container, list, current, focused = false, index = [], blurtimer, events = {};
|
||
var options = $.extend(true, {
|
||
prefix: 'textboxlist',
|
||
max: null,
|
||
unique: false,
|
||
uniqueInsensitive: true,
|
||
endEditableBit: true,
|
||
startEditableBit: true,
|
||
hideEditableBits: true,
|
||
inBetweenEditableBits: true,
|
||
keys: {previous: 37, next: 39},
|
||
bitsOptions: {editable: {}, box: {}},
|
||
plugins: {},
|
||
// tip: you can change encode/decode with JSON.stringify and JSON.parse
|
||
encode: function(o){
|
||
return $.grep($.map(o, function(v){
|
||
v = (chk(v[0]) ? v[0] : v[1]);
|
||
return chk(v) ? v.toString().replace(/,/, '') : null;
|
||
}), function(o){ return o != undefined; }).join(',');
|
||
},
|
||
decode: function(o){ return o.split(','); }
|
||
}, _options);
|
||
|
||
element = $(element);
|
||
|
||
var self = this;
|
||
var init = function(){
|
||
original = element.css('display', 'none').attr('autocomplete', 'off').focus(focusLast);
|
||
container = $('<div class="'+options.prefix+'" />')
|
||
.insertAfter(element)
|
||
.click(function(e){
|
||
if ((e.target == list.get(0) || e.target == container.get(0)) && (!focused || (current && current.toElement().get(0) != list.find(':last-child').get(0)))) focusLast();
|
||
});
|
||
list = $('<ul class="'+ options.prefix +'-bits" />').appendTo(container);
|
||
for (var name in options.plugins) enablePlugin(name, options.plugins[name]);
|
||
afterInit();
|
||
};
|
||
|
||
var enablePlugin = function(name, options){
|
||
self.plugins[name] = new $.TextboxList[camelCase(capitalize(name))](self, options);
|
||
};
|
||
|
||
var afterInit = function(){
|
||
if (options.endEditableBit) create('editable', null, {tabIndex: original.tabIndex}).inject(list);
|
||
addEvent('bitAdd', update, true);
|
||
addEvent('bitRemove', update, true);
|
||
$(document).click(function(e){
|
||
if (!focused) return;
|
||
if (e.target.className.indexOf(options.prefix) != -1){
|
||
if (e.target == $(container).get(0)) return;
|
||
var parent = $(e.target).parents('div.' + options.prefix);
|
||
if (parent.get(0) == container.get(0)) return;
|
||
}
|
||
blur();
|
||
}).keydown(function(ev){
|
||
if (!focused || !current) return;
|
||
var caret = current.is('editable') ? current.getCaret() : null;
|
||
var value = current.getValue()[1];
|
||
var special = !!$.map(['shift', 'alt', 'meta', 'ctrl'], function(e){ return ev[e]; }).length;
|
||
var custom = special || (current.is('editable') && current.isSelected());
|
||
var evStop = function(){ ev.stopPropagation(); ev.preventDefault(); };
|
||
switch (ev.which){
|
||
case 8:
|
||
if (current.is('box')){
|
||
evStop();
|
||
return current.remove();
|
||
}
|
||
case options.keys.previous:
|
||
if (current.is('box') || ((caret == 0 || !value.length) && !custom)){
|
||
evStop();
|
||
focusRelative('prev');
|
||
}
|
||
break;
|
||
case 46:
|
||
if (current.is('box')){
|
||
evStop();
|
||
return current.remove();
|
||
}
|
||
case options.keys.next:
|
||
if (current.is('box') || (caret == value.length && !custom)){
|
||
evStop();
|
||
focusRelative('next');
|
||
}
|
||
}
|
||
});
|
||
setValues(options.decode(original.val()));
|
||
};
|
||
|
||
var create = function(klass, value, opt){
|
||
if (klass == 'box'){
|
||
if (chk(options.max) && list.children('.' + options.prefix + '-bit-box').length + 1 > options.max) return false;
|
||
if (options.unique && $.inArray(uniqueValue(value), index) != -1) return false;
|
||
}
|
||
return new $.TextboxListBit(klass, value, self, $.extend(true, options.bitsOptions[klass], opt));
|
||
};
|
||
|
||
var uniqueValue = function(value){
|
||
return chk(value[0]) ? value[0] : (options.uniqueInsensitive ? value[1].toLowerCase() : value[1]);
|
||
}
|
||
|
||
var add = function(plain, id, html, afterEl){
|
||
var b = create('box', [id, plain, html]);
|
||
if (b){
|
||
if (!afterEl || !afterEl.length) afterEl = list.find('.' + options.prefix + '-bit-box').filter(':last');
|
||
b.inject(afterEl.length ? afterEl : list, afterEl.length ? 'after' : 'top');
|
||
}
|
||
return self;
|
||
};
|
||
|
||
var focusRelative = function(dir, to){
|
||
var el = getBit(to && $(to).length ? to : current).toElement();
|
||
var b = getBit(el[dir]());
|
||
if (b) b.focus();
|
||
return self;
|
||
};
|
||
|
||
var focusLast = function(){
|
||
var lastElement = list.children().filter(':last');
|
||
if (lastElement) getBit(lastElement).focus();
|
||
return self;
|
||
};
|
||
|
||
var blur = function(){
|
||
if (! focused) return self;
|
||
if (current) current.blur();
|
||
focused = false;
|
||
return fireEvent('blur');
|
||
};
|
||
|
||
var getBit = function(obj){
|
||
return (obj.type && (obj.type == 'editable' || obj.type == 'box')) ? obj : $(obj).data('textboxlist:bit');
|
||
};
|
||
|
||
var getValues = function(){
|
||
var values = [];
|
||
list.children().each(function(){
|
||
var bit = getBit(this);
|
||
if (!bit.is('editable')) values.push(bit.getValue());
|
||
});
|
||
return values;
|
||
};
|
||
|
||
var setValues = function(values){
|
||
if (!values) return;
|
||
$.each(values, function(i, v){
|
||
if (v) add.apply(self, $.isArray(v) ? [v[1], v[0], v[2]] : [v]);
|
||
});
|
||
};
|
||
|
||
var update = function(){
|
||
original.val(options.encode(getValues()));
|
||
};
|
||
|
||
var addEvent = function(type, fn){
|
||
if (events[type] == undefined) events[type] = [];
|
||
var exists = false;
|
||
$.each(events[type], function(f){
|
||
if (f === fn){
|
||
exists = true;
|
||
return;
|
||
};
|
||
});
|
||
if (!exists) events[type].push(fn);
|
||
return self;
|
||
};
|
||
|
||
var fireEvent = function(type, args, delay){
|
||
if (!events || !events[type]) return self;
|
||
$.each(events[type], function(i, fn){
|
||
(function(){
|
||
args = (args != undefined) ? splat(args) : Array.prototype.slice.call(arguments);
|
||
var returns = function(){
|
||
return fn.apply(self || null, args);
|
||
};
|
||
if (delay) return setTimeout(returns, delay);
|
||
return returns();
|
||
})();
|
||
});
|
||
return self;
|
||
};
|
||
|
||
var removeEvent = function(type, fn){
|
||
if (events[type]){
|
||
for (var i = events[type].length; i--; i){
|
||
if (events[type][i] === fn) events[type].splice(i, 1);
|
||
}
|
||
}
|
||
return self;
|
||
};
|
||
|
||
var isDuplicate = function(v){
|
||
return $.inArray(uniqueValue(v), index);
|
||
};
|
||
|
||
this.onFocus = function(bit){
|
||
if (current) current.blur();
|
||
clearTimeout(blurtimer);
|
||
current = bit;
|
||
container.addClass(options.prefix + '-focus');
|
||
if (!focused){
|
||
focused = true;
|
||
fireEvent('focus', bit);
|
||
}
|
||
};
|
||
|
||
this.onAdd = function(bit){
|
||
if (options.unique && bit.is('box')) index.push(uniqueValue(bit.getValue()));
|
||
if (bit.is('box')){
|
||
var prior = getBit(bit.toElement().prev());
|
||
if ((prior && prior.is('box') && options.inBetweenEditableBits) || (!prior && options.startEditableBit)){
|
||
var priorEl = prior && prior.toElement().length ? prior.toElement() : false;
|
||
var b = create('editable').inject(priorEl || list, priorEl ? 'after' : 'top');
|
||
if (options.hideEditableBits) b.hide();
|
||
}
|
||
}
|
||
};
|
||
|
||
this.onRemove = function(bit){
|
||
if (!focused) return;
|
||
if (options.unique && bit.is('box')){
|
||
var i = isDuplicate(bit.getValue());
|
||
if (i != -1) index = index.splice(i + 1, 1);
|
||
}
|
||
var prior = getBit(bit.toElement().prev());
|
||
if (prior && prior.is('editable')) prior.remove();
|
||
focusRelative('next', bit);
|
||
};
|
||
|
||
this.onBlur = function(bit, all){
|
||
current = null;
|
||
container.removeClass(options.prefix + '-focus');
|
||
blurtimer = setTimeout(blur, all ? 0 : 200);
|
||
};
|
||
|
||
this.setOptions = function(opt){
|
||
options = $.extend(true, options, opt);
|
||
};
|
||
|
||
this.getOptions = function(){
|
||
return options;
|
||
};
|
||
|
||
this.getContainer = function(){
|
||
return container;
|
||
};
|
||
|
||
this.isDuplicate = isDuplicate;
|
||
this.addEvent = addEvent;
|
||
this.removeEvent = removeEvent;
|
||
this.fireEvent = fireEvent;
|
||
this.create = create;
|
||
this.add = add;
|
||
this.getValues = getValues;
|
||
this.plugins = [];
|
||
init();
|
||
};
|
||
|
||
$.TextboxListBit = function(type, value, textboxlist, _options){
|
||
|
||
var element, bit, prefix, typeprefix, close, hidden, focused = false, name = capitalize(type);
|
||
var options = $.extend(true, type == 'box' ? {
|
||
deleteButton: true
|
||
} : {
|
||
tabIndex: null,
|
||
growing: true,
|
||
growingOptions: {},
|
||
stopEnter: true,
|
||
addOnBlur: false,
|
||
addKeys: [13]
|
||
}, _options);
|
||
|
||
this.type = type;
|
||
this.value = value;
|
||
|
||
var self = this;
|
||
var init = function(){
|
||
prefix = textboxlist.getOptions().prefix + '-bit';
|
||
typeprefix = prefix + '-' + type;
|
||
bit = $('<li />').addClass(prefix).addClass(typeprefix)
|
||
.data('textboxlist:bit', self)
|
||
.hover(function(){
|
||
bit.addClass(prefix + '-hover').addClass(typeprefix + '-hover');
|
||
}, function(){
|
||
bit.removeClass(prefix + '-hover').removeClass(typeprefix + '-hover');
|
||
});
|
||
if (type == 'box'){
|
||
bit.html(chk(self.value[2]) ? self.value[2] : self.value[1]).click(focus);
|
||
if (options.deleteButton){
|
||
bit.addClass(typeprefix + '-deletable');
|
||
close = $('<a href="#" class="'+ typeprefix +'-deletebutton" />').click(remove).appendTo(bit);
|
||
}
|
||
bit.children().click(function(e){ e.stopPropagation(); e.preventDefault(); });
|
||
} else {
|
||
element = $('<input type="text" class="'+ typeprefix +'-input" autocomplete="off" />').val(self.value ? self.value[1] : '').appendTo(bit);
|
||
if (chk(options.tabIndex)) element.tabIndex = options.tabIndex;
|
||
if (options.growing) new $.GrowingInput(element, options.growingOptions);
|
||
element.focus(function(){ focus(true); }).blur(function(){
|
||
blur(true);
|
||
if (options.addOnBlur) toBox();
|
||
});
|
||
if (options.addKeys || options.stopEnter){
|
||
element.keydown(function(ev){
|
||
if (!focused) return;
|
||
var evStop = function(){ ev.stopPropagation(); ev.preventDefault(); };
|
||
if (options.stopEnter && ev.which === 13) evStop();
|
||
if ($.inArray(ev.which, splat(options.addKeys)) != -1){
|
||
evStop();
|
||
toBox();
|
||
}
|
||
});
|
||
}
|
||
}
|
||
};
|
||
|
||
var inject = function(el, where){
|
||
switch(where || 'bottom'){
|
||
case 'top': bit.prependTo(el); break;
|
||
case 'bottom': bit.appendTo(el); break;
|
||
case 'before': bit.insertBefore(el); break;
|
||
case 'after': bit.insertAfter(el); break;
|
||
}
|
||
textboxlist.onAdd(self);
|
||
return fireBitEvent('add');
|
||
};
|
||
|
||
var focus = function(noReal){
|
||
if (focused) return self;
|
||
show();
|
||
focused = true;
|
||
textboxlist.onFocus(self);
|
||
bit.addClass(prefix + '-focus').addClass(prefix + '-' + type + '-focus');
|
||
fireBitEvent('focus');
|
||
if (type == 'editable' && !noReal) element.focus();
|
||
return self;
|
||
};
|
||
|
||
var blur = function(noReal){
|
||
if (!focused) return self;
|
||
focused = false;
|
||
textboxlist.onBlur(self);
|
||
bit.removeClass(prefix + '-focus').removeClass(prefix + '-' + type + '-focus');
|
||
fireBitEvent('blur');
|
||
if (type == 'editable'){
|
||
if (!noReal) element.blur();
|
||
if (hidden && !element.val().length) hide();
|
||
}
|
||
return self;
|
||
};
|
||
|
||
var remove = function(){
|
||
blur();
|
||
textboxlist.onRemove(self);
|
||
bit.remove();
|
||
return fireBitEvent('remove');
|
||
};
|
||
|
||
var show = function(){
|
||
bit.css('display', 'block');
|
||
return self;
|
||
};
|
||
|
||
var hide = function(){
|
||
bit.css('display', 'none');
|
||
hidden = true;
|
||
return self;
|
||
};
|
||
|
||
var fireBitEvent = function(type){
|
||
type = capitalize(type);
|
||
textboxlist.fireEvent('bit' + type, self).fireEvent('bit' + name + type, self);
|
||
return self;
|
||
};
|
||
|
||
this.is = function(t){
|
||
return type == t;
|
||
};
|
||
|
||
this.setValue = function(v){
|
||
if (type == 'editable'){
|
||
element.val(chk(v[0]) ? v[0] : v[1]);
|
||
if (options.growing) element.data('growing').resize();
|
||
} else value = v;
|
||
return self;
|
||
};
|
||
|
||
this.getValue = function(){
|
||
return type == 'editable' ? [null, element.val(), null] : value;
|
||
};
|
||
|
||
if (type == 'editable'){
|
||
this.getCaret = function(){
|
||
var el = element.get(0);
|
||
if (el.createTextRange){
|
||
var r = document.selection.createRange().duplicate();
|
||
r.moveEnd('character', el.value.length);
|
||
if (r.text === '') return el.value.length;
|
||
return el.value.lastIndexOf(r.text);
|
||
} else return el.selectionStart;
|
||
};
|
||
|
||
this.getCaretEnd = function(){
|
||
var el = element.get(0);
|
||
if (el.createTextRange){
|
||
var r = document.selection.createRange().duplicate();
|
||
r.moveStart('character', -el.value.length);
|
||
return r.text.length;
|
||
} else return el.selectionEnd;
|
||
};
|
||
|
||
this.isSelected = function(){
|
||
return focused && (self.getCaret() !== self.getCaretEnd());
|
||
};
|
||
|
||
var toBox = function(){
|
||
var value = self.getValue();
|
||
var b = textboxlist.create('box', value);
|
||
if (b){
|
||
b.inject(bit, 'before');
|
||
self.setValue([null, '', null]);
|
||
return b;
|
||
}
|
||
return null;
|
||
};
|
||
|
||
this.toBox = toBox;
|
||
}
|
||
|
||
this.toElement = function(){
|
||
return bit;
|
||
};
|
||
|
||
this.focus = focus;
|
||
this.blur = blur;
|
||
this.remove = remove;
|
||
this.inject = inject;
|
||
this.show = show;
|
||
this.hide = hide;
|
||
this.fireBitEvent = fireBitEvent;
|
||
init();
|
||
};
|
||
|
||
var chk = function(v){ return !!(v || v === 0); };
|
||
var splat = function(a){ return $.isArray(a) ? a : [a]; };
|
||
var camelCase = function(str){ return str.replace(/-\D/g, function(match){ return match.charAt(1).toUpperCase(); }); };
|
||
var capitalize = function(str){ return str.replace(/\b[a-z]/g, function(A){ return A.toUpperCase(); }); };
|
||
|
||
$.fn.extend({
|
||
|
||
textboxlist: function(options){
|
||
return this.each(function(){
|
||
new $.TextboxList(this, options);
|
||
});
|
||
}
|
||
|
||
});
|
||
|
||
})(jQuery);
|
controlies/www/groups/form.html | ||
---|---|---|
$('#message').html("Se produjo un error").effect("highlight", {"color":"yellow"}, 1000);
|
||
break;
|
||
}
|
||
case "users":{
|
||
$('#'+result.response+"Tag").css("color","red");
|
||
$('#message').html("Debe seleccionar al menos un usuario").effect("slide");
|
||
break;
|
||
}
|
||
default:{
|
||
$('#'+result.response+"Tag").css("color","red");
|
||
$('#'+result.response).effect("highlight", {"color":"yellow"}, 1000).focus();
|
||
... | ... | |
</p>
|
||
<p><span id="nameTag">Nombre </span><br><input type="text" id="name" name="name"/></p>
|
||
|
||
<input type="text" value="" id="facebook-demo" />
|
||
<ul id="preadded" style="display:none"></ul>
|
||
<div id="facebook-auto">
|
||
<div class="default">Escribe el nombre de la persona a buscar</div>
|
||
<ul id="feed"></ul>
|
||
</div>
|
||
|
||
<p><span id="typeTag">Usuarios</span><br>
|
||
<select id="users" name="users[]" size="15" multiple style="width:480px;"></select>
|
||
</p>
|
||
<p><span id="usersTag">Usuarios</span>
|
||
<div class="form_users"><input type="text" name="users" value="" id="users" /></div>
|
||
</p>
|
||
<p style="margin-bottom:300px;"></p>
|
||
<div id="message" style="text-align:center; font-weight:bold; color:red; padding:3px; "></div>
|
||
<div style="text-align:center;"><button id="saveButton" type="submit" style="width:100px;">Guardar</button> <button type="button" id="cancelButton" style="width:100px;">Cancelar</button></div>
|
||
</form>
|
controlies/www/groups/index.html | ||
---|---|---|
<script type="text/javascript" src="js/multiselect2/ui.multiselect.js"></script>
|
||
|
||
<!-- Libreria Facebook -->
|
||
<link rel="stylesheet" href="js/fcbkcomplete/style.css" type="text/css" media="screen" title="Test Stylesheet" charset="utf-8" />
|
||
<script src="js/fcbkcomplete/fcbkcomplete.js" type="text/javascript" charset="utf-8"></script>
|
||
<!-- <link rel="stylesheet" href="js/fcbkcomplete/style.css" type="text/css" media="screen" title="Test Stylesheet" charset="utf-8" />
|
||
<script src="js/fcbkcomplete/fcbkcomplete.js" type="text/javascript" charset="utf-8"></script> -->
|
||
|
||
<link rel="stylesheet" href="js/autocomplete/TextboxList.css" type="text/css" media="screen" charset="utf-8" />
|
||
<link rel="stylesheet" href="/js/autocomplete/TextboxList.Autocomplete.css" type="text/css" media="screen" charset="utf-8" />
|
||
<script src="js/autocomplete/GrowingInput.js" type="text/javascript" charset="utf-8"></script>
|
||
<script src="js/autocomplete/TextboxList.js" type="text/javascript" charset="utf-8"></script>
|
||
<script src="js/autocomplete/TextboxList.Autocomplete.js" type="text/javascript" charset="utf-8"></script>
|
||
<script src="js/autocomplete/TextboxList.Autocomplete.Binary.js" type="text/javascript" charset="utf-8"></script>
|
||
|
||
|
||
<script language="javascript">
|
||
$(function() {
|
||
$("#dialog-confirm").dialog({ autoOpen: false });
|
||
... | ... | |
$("#dialog-form").load("groups/form.html", function() {
|
||
$("#form_data #action").val("add");
|
||
$("#form_data #messageForm").html("Todos los campos son obligatorios");
|
||
|
||
var autoComplete = new $.TextboxList('#users', {unique: true, plugins: {autocomplete: {
|
||
minLength: 2,
|
||
queryRemote: true,
|
||
remote: {url: 'users?action=getAllUsers'}
|
||
}}});
|
||
});
|
||
|
||
x = ($(window).width()-250)/2;
|
||
y = ($(window).height()-400)/2;
|
||
x = ($(window).width()-500)/2;
|
||
y = ($(window).height()-500)/2;
|
||
|
||
$("#dialog-form").dialog({
|
||
resizable: false,
|
||
position: top,
|
||
modal: true,
|
||
width: 500,
|
||
title: "Añadir Grupo"
|
||
}).dialog('option', 'position', [x, y]);
|
||
}
|
||
... | ... | |
$("#dialog-form").html("");
|
||
$("#dialog-form").load("groups/form.html", function() {
|
||
|
||
$.facebooklist('#facebook-demo', '#preadded', '#facebook-auto',{url:'users',cache:1}, 10, {userfilter:1,casesensetive:0});
|
||
getAllUsers();
|
||
/*
|
||
$("#form_data #action").val("modify");
|
||
$("#form_data #user").attr("readonly","true");
|
||
$("#form_data #user").css("background-color","#DDD");
|
||
$("#form_data #messageForm").html("Todos los campos son obligatorios");
|
||
// Autocomplete with poll the server as you type
|
||
var autoComplete = new $.TextboxList('#users', {unique: true, plugins: {autocomplete: {
|
||
minLength: 2,
|
||
queryRemote: true,
|
||
remote: {url: 'users?action=getAllUsers'}
|
||
}}});
|
||
|
||
$.post('users', 'action=getUserData&user='+uid, function(data) {
|
||
var result = $.parseJSON(data);
|
||
... | ... | |
var dep = Array(result.response['groups']['departments']);
|
||
|
||
$("#form_data #type").replaceWith(textType+"<input type='hidden' id='type' name='type' value='"+result.response['type']+"'/>");
|
||
$("#form_data #name").val(result.response['name']);
|
||
}); */
|
||
$("#form_data #name").val(result.response['name']);
|
||
$("#form_data #nif").val(result.response['nif']);
|
||
$("#form_data #user").val(result.response['user']);
|
||
$("#form_data #surname").val(result.response['surname']);
|
||
|
||
$.each(result.response['groups']['departments'], function(i, l){
|
||
$('#form_data input:checkbox[value='+l+']').attr('checked', true);
|
||
});
|
||
|
||
$.each(result.response['groups']['classrooms'], function(i, l){
|
||
$('#form_data input:checkbox[value='+l+']').attr('checked', true);
|
||
});
|
||
});
|
||
//t5.add('John Doe').add('Jane Roe');
|
||
|
||
});
|
||
|
||
x = ($(window).width()-500)/2;
|
controlies/MainLoop.py | ||
---|---|---|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||
# GNU General Public License for more details.
|
||
# You should have received a copy of the GNU General Public License
|
||
# along with ControlAula. If not, see <http://www.gnu.org/licenses/>.
|
||
# along with ControlIES. If not, see <http://www.gnu.org/licenses/>.
|
||
#
|
||
##############################################################################
|
||
|
||
... | ... | |
classrooms = request.args['multiselect_classrooms']
|
||
except:
|
||
pass
|
||
|
||
u = Users(l,request.args['type'][0],request.args['name'][0],request.args['surname'][0],request.args['nif'][0],request.args['user'][0],request.args['password'][0],request.args['password2'][0],departments,classrooms)
|
||
response = u.process(request.args['action'][0])
|
||
return json.dumps({"response" : response})
|
||
... | ... | |
from Plugins.Groups import Groups
|
||
|
||
if request.args['action'][0] == "list":
|
||
g = Groups(l,"","")
|
||
g = Groups(l,"","","")
|
||
response = g.list(request.args)
|
||
return json.dumps(response)
|
||
|
||
elif request.args['action'][0] == "getAllGroups":
|
||
g = Groups(l,"","")
|
||
g = Groups(l,"","","")
|
||
response = g.getAllGroups()
|
||
return json.dumps(response)
|
||
|
||
elif request.args['action'][0] == "delete":
|
||
g = Groups(l,"",request.args['name'][0])
|
||
g = Groups(l,"",request.args['name'][0],"")
|
||
response = g.delete()
|
||
return json.dumps({"response" : response})
|
||
|
||
else:
|
||
g = Groups(l,request.args['type'][0],request.args['name'][0])
|
||
g = Groups(l,request.args['type'][0], request.args['name'][0], request.args['users'][0])
|
||
response = g.process(request.args['action'][0])
|
||
return json.dumps({"response" : response})
|
||
|
controlies/Server.py | ||
---|---|---|
|
||
# Start up the web service.
|
||
Root = MainLoop.ControlIESProtocol() #Resource object
|
||
#Root.PageDir='/home/manu/proyectos/controlies/www/'
|
||
Root.PageDir='/home/chisco/Proyectos/controlies/www'
|
||
Root.PageDir='/home/manu/proyectos/controlies/www/'
|
||
#Root.PageDir='/home/chisco/Proyectos/controlies/www'
|
||
site = server.Site(Root)
|
||
|
||
#my_server = static.File('/home/chisco/workspace/adminies/www/')
|
Exportar a: Unified diff
Sigo con los grupos