parent
60d1025069
commit
1942167c0f
After Width: | Height: | Size: 90 B |
@ -0,0 +1,662 @@ |
||||
/* |
||||
FCBKcomplete 2.6 |
||||
- Jquery version required: 1.2.x, 1.3.x |
||||
|
||||
Changelog: |
||||
|
||||
- 2.00 new version of fcbkcomplete |
||||
|
||||
- 2.01 fixed bugs & added features |
||||
fixed filter bug for preadded items |
||||
focus on the input after selecting tag |
||||
the element removed pressing backspace when the element is selected |
||||
input tag in the control has a border in IE7 |
||||
added iterate over each match and apply the plugin separately |
||||
set focus on the input after selecting tag |
||||
|
||||
- 2.02 fixed fist element selected bug |
||||
fixed defaultfilter error bug |
||||
|
||||
- 2.5 removed selected="selected" attribute due ie bug |
||||
element search algorithm changed |
||||
better performance fix added |
||||
fixed many small bugs |
||||
onselect event added |
||||
onremove event added |
||||
|
||||
- 2.6 ie6/7 support fix added |
||||
added new public method addItem due request |
||||
added new options "firstselected" that you can set true/false to select first element on dropdown list |
||||
autoexpand input element added |
||||
removeItem bug fixed |
||||
and many more bug fixed |
||||
|
||||
*/ |
||||
|
||||
/* Coded by: emposha <admin@emposha.com> */ |
||||
/* Copyright: Emposha.com <http://www.emposha.com/> - Distributed under MIT - Keep this message! */ |
||||
/* |
||||
* json_url - url to fetch json object |
||||
* cache - use cache |
||||
* height - maximum number of element shown before scroll will apear |
||||
* newel - show typed text like a element |
||||
* firstselected - automaticly select first element from dropdown |
||||
* filter_case - case sensitive filter |
||||
* filter_selected - filter selected items from list |
||||
* complete_text - text for complete page |
||||
* maxshownitems - maximum numbers that will be shown at dropdown list (less better performance) |
||||
* onselect - fire event on item select |
||||
* onremove - fire event on item remove |
||||
*/ |
||||
|
||||
jQuery( |
||||
function ($)
|
||||
{ |
||||
$.fn.fcbkcomplete = function (opt)
|
||||
{ |
||||
return this.each(function() |
||||
{ |
||||
function init() |
||||
{ |
||||
createFCBK();
|
||||
preSet(); |
||||
addInput(0);
|
||||
} |
||||
|
||||
function createFCBK() |
||||
{
|
||||
element.hide(); |
||||
element.attr("multiple","multiple"); |
||||
if (element.attr("name").indexOf("[]") == -1) |
||||
{ |
||||
element.attr("name",element.attr("name")+"[]"); |
||||
} |
||||
|
||||
holder = $(document.createElement("ul")); |
||||
holder.attr("class", "holder"); |
||||
element.after(holder); |
||||
|
||||
complete = $(document.createElement("div")); |
||||
complete.addClass("facebook-auto"); |
||||
complete.append('<div class="default">'+ options.complete_text +"</div>"); |
||||
|
||||
if (browser_msie) |
||||
{ |
||||
complete.append('<iframe class="ie6fix" scrolling="no" frameborder="0"></iframe>'); |
||||
browser_msie_frame = complete.children('.ie6fix'); |
||||
//$("input:checkbox").parent().css("z-index","-1");
|
||||
} |
||||
|
||||
feed = $(document.createElement("ul")); |
||||
feed.attr("id", elemid + "_feed"); |
||||
|
||||
complete.prepend(feed); |
||||
holder.after(complete); |
||||
feed.css("width",complete.width()); |
||||
} |
||||
|
||||
function preSet() |
||||
{
|
||||
element.children("option").each(
|
||||
function(i,option)
|
||||
{
|
||||
option = $(option);
|
||||
if (option.hasClass("selected")) |
||||
{
|
||||
addItem (option.text(), option.val(), true); |
||||
option.attr("selected","selected"); |
||||
}
|
||||
else |
||||
{ |
||||
option.removeAttr("selected");
|
||||
} |
||||
|
||||
cache.push({ |
||||
caption: option.text(), |
||||
value: option.val() |
||||
}); |
||||
search_string += "" + (cache.length - 1) + ":" + option.text() + ";";
|
||||
} |
||||
); |
||||
} |
||||
|
||||
//public method to add new item
|
||||
this.addItem = function(title, value) |
||||
{ |
||||
addItem(title, value); |
||||
} |
||||
|
||||
function addItem (title, value, preadded) |
||||
{ |
||||
var li = document.createElement("li"); |
||||
var txt = document.createTextNode(title); |
||||
var aclose = document.createElement("a");
|
||||
|
||||
$(li).attr({"class": "bit-box","rel": value}); |
||||
$(li).prepend(txt);
|
||||
$(aclose).attr({"class": "closebutton","href": "#"}); |
||||
|
||||
li.appendChild(aclose); |
||||
holder.append(li); |
||||
|
||||
$(aclose).click( |
||||
function(){ |
||||
$(this).parent("li").fadeOut("fast",
|
||||
function(){ |
||||
removeItem($(this));
|
||||
} |
||||
); |
||||
return false; |
||||
} |
||||
); |
||||
|
||||
if (!preadded)
|
||||
{
|
||||
$("#"+elemid + "_annoninput").remove(); |
||||
var _item; |
||||
addInput(1);
|
||||
if (element.children("option[value=" + value + "]").length) |
||||
{
|
||||
_item = element.children("option[value=" + value + "]");
|
||||
_item.get(0).setAttribute("selected", "selected"); |
||||
if (!_item.hasClass("selected"))
|
||||
{ |
||||
_item.addClass("selected"); |
||||
} |
||||
} |
||||
else |
||||
{ |
||||
var _item = $(document.createElement("option"));
|
||||
_item.attr("value", value).get(0).setAttribute("selected", "selected"); |
||||
_item.attr("value", value).addClass("selected");
|
||||
_item.text(title);
|
||||
element.append(_item); |
||||
} |
||||
if (options.onselect.length) |
||||
{ |
||||
funCall(options.onselect,_item) |
||||
}
|
||||
}
|
||||
holder.children("li.bit-box.deleted").removeClass("deleted"); |
||||
feed.hide(); |
||||
browser_msie?browser_msie_frame.hide():''; |
||||
} |
||||
|
||||
function removeItem(item) |
||||
{
|
||||
if (options.onremove.length) |
||||
{ |
||||
var _item = element.children("option[value=" + item.attr("rel") + "]"); |
||||
funCall(options.onremove,_item) |
||||
} |
||||
element.children("option[value=" + item.attr("rel") + "]").removeAttr("selected"); |
||||
element.children("option[value=" + item.attr("rel") + "]").removeClass("selected"); |
||||
item.remove();
|
||||
deleting = 0;
|
||||
} |
||||
|
||||
function addInput(focusme) |
||||
{ |
||||
var li = $(document.createElement("li")); |
||||
var input = $(document.createElement("input")); |
||||
|
||||
li.attr({"class": "bit-input","id": elemid + "_annoninput"});
|
||||
input.attr({"type": "text","class": "maininput","size": "1"});
|
||||
holder.append(li.append(input)); |
||||
|
||||
input.focus( |
||||
function() |
||||
{ |
||||
complete.fadeIn("fast"); |
||||
} |
||||
); |
||||
|
||||
input.blur( |
||||
function() |
||||
{ |
||||
complete.fadeOut("fast"); |
||||
} |
||||
); |
||||
|
||||
holder.click( |
||||
function() |
||||
{ |
||||
input.focus(); |
||||
if (feed.length && input.val().length)
|
||||
{ |
||||
feed.show(); |
||||
} |
||||
else
|
||||
{
|
||||
feed.hide(); |
||||
browser_msie?browser_msie_frame.hide():''; |
||||
complete.children(".default").show(); |
||||
} |
||||
} |
||||
); |
||||
|
||||
input.keypress( |
||||
function(event) |
||||
{
|
||||
if (event.keyCode == 13) |
||||
{ |
||||
return false; |
||||
} |
||||
//auto expand input
|
||||
input.attr("size",input.val().length + 1);
|
||||
} |
||||
); |
||||
|
||||
input.keydown( |
||||
function(event) |
||||
{
|
||||
//prevent to enter some bad chars when input is empty
|
||||
if(event.keyCode == 191) |
||||
{
|
||||
event.preventDefault(); |
||||
return false; |
||||
}
|
||||
} |
||||
); |
||||
|
||||
input.keyup( |
||||
function(event) |
||||
{ |
||||
var etext = xssPrevent(input.val()); |
||||
|
||||
if (event.keyCode == 8 && etext.length == 0) |
||||
{
|
||||
feed.hide(); |
||||
browser_msie?browser_msie_frame.hide():'';
|
||||
if (holder.children("li.bit-box.deleted").length == 0)
|
||||
{ |
||||
holder.children("li.bit-box:last").addClass("deleted"); |
||||
return false; |
||||
} |
||||
else
|
||||
{ |
||||
if (deleting) |
||||
{ |
||||
return; |
||||
} |
||||
deleting = 1; |
||||
holder.children("li.bit-box.deleted").fadeOut("fast", function() |
||||
{ |
||||
removeItem($(this)); |
||||
return false; |
||||
}); |
||||
} |
||||
} |
||||
|
||||
if (event.keyCode != 40 && event.keyCode != 38 && etext.length != 0)
|
||||
{ |
||||
counter = 0;
|
||||
|
||||
if (options.json_url)
|
||||
{ |
||||
if (options.cache && json_cache)
|
||||
{ |
||||
addMembers(etext); |
||||
bindEvents(); |
||||
} |
||||
else
|
||||
{ |
||||
//search texts > 1 fix by >J.montoya
|
||||
if (etext.length > 0) { |
||||
$.getJSON(options.json_url + "&tag=" + etext, null, function(data){ |
||||
addMembers(etext, data); |
||||
json_cache = true; |
||||
bindEvents(); |
||||
}); |
||||
} |
||||
} |
||||
} |
||||
else
|
||||
{ |
||||
addMembers(etext); |
||||
bindEvents(); |
||||
} |
||||
complete.children(".default").hide(); |
||||
feed.show(); |
||||
} |
||||
} |
||||
); |
||||
if (focusme) |
||||
{ |
||||
setTimeout(function(){ |
||||
input.focus(); |
||||
complete.children(".default").show(); |
||||
},1); |
||||
}
|
||||
} |
||||
|
||||
function addMembers(etext, data) |
||||
{ |
||||
feed.html(''); |
||||
|
||||
if (!options.cache)
|
||||
{ |
||||
cache = new Array(); |
||||
search_string = ""; |
||||
} |
||||
|
||||
addTextItem(etext); |
||||
|
||||
if (data != null && data.length) |
||||
{ |
||||
$.each(data,
|
||||
function(i, val) |
||||
{ |
||||
cache.push ( |
||||
{ |
||||
caption: val.caption, |
||||
value: val.value |
||||
} |
||||
); |
||||
search_string += "" + (cache.length - 1) + ":" + val.caption + ";"; |
||||
} |
||||
);
|
||||
} |
||||
|
||||
var maximum = options.maxshownitems<cache.length?options.maxshownitems:cache.length; |
||||
var filter = "i"; |
||||
if (options.filter_case) |
||||
{ |
||||
filter = "";
|
||||
} |
||||
|
||||
var myregexp, match; |
||||
try { |
||||
myregexp = eval('/(?:^|;)\\s*(\\d+)\\s*:[^;]*?' + etext + '[^;]*/g' + filter); |
||||
match = myregexp.exec(search_string); |
||||
} catch(ex){}; |
||||
|
||||
var content = ''; |
||||
while (match != null && maximum > 0)
|
||||
{ |
||||
var id = match[1];
|
||||
var object = cache[id];
|
||||
if (options.filter_selected && element.children("option[value=" + object.value + "]").hasClass("selected"))
|
||||
{ |
||||
//nothing here...
|
||||
} |
||||
else
|
||||
{ |
||||
content += '<li rel="' + object.value + '">' + itemIllumination(object.caption, etext) + '</li>'; |
||||
counter++; |
||||
maximum--; |
||||
}
|
||||
match = myregexp.exec(search_string); |
||||
} |
||||
feed.append(content); |
||||
|
||||
if (options.firstselected) |
||||
{ |
||||
focuson = feed.children("li:visible:first"); |
||||
focuson.addClass("auto-focus"); |
||||
} |
||||
|
||||
if (counter > options.height)
|
||||
{ |
||||
feed.css({"height": (options.height * 24) + "px","overflow": "auto"}); |
||||
if (browser_msie) |
||||
{ |
||||
browser_msie_frame.css({"height": (options.height * 24) + "px", "width": feed.width() + "px"}).show(); |
||||
} |
||||
} |
||||
else
|
||||
{ |
||||
feed.css("height", "auto"); |
||||
if (browser_msie) |
||||
{ |
||||
browser_msie_frame.css({"height": feed.height() + "px", "width": feed.width() + "px"}).show(); |
||||
} |
||||
}
|
||||
} |
||||
|
||||
function itemIllumination(text, etext) |
||||
{ |
||||
if (options.filter_case)
|
||||
{
|
||||
try { |
||||
eval("var text = text.replace(/(.*)(" + etext + ")(.*)/gi,'$1<em>$2</em>$3');"); |
||||
} catch(ex){}; |
||||
} |
||||
else
|
||||
{
|
||||
try { |
||||
eval("var text = text.replace(/(.*)(" + etext.toLowerCase() + ")(.*)/gi,'$1<em>$2</em>$3');"); |
||||
}catch(ex){}; |
||||
}
|
||||
return text; |
||||
} |
||||
|
||||
function bindFeedEvent()
|
||||
{
|
||||
feed.children("li").mouseover( |
||||
function() |
||||
{ |
||||
feed.children("li").removeClass("auto-focus"); |
||||
$(this).addClass("auto-focus"); |
||||
focuson = $(this); |
||||
} |
||||
); |
||||
|
||||
feed.children("li").mouseout( |
||||
function() |
||||
{ |
||||
$(this).removeClass("auto-focus"); |
||||
focuson = null; |
||||
} |
||||
); |
||||
} |
||||
|
||||
function removeFeedEvent()
|
||||
{
|
||||
feed.children("li").unbind("mouseover");
|
||||
feed.children("li").unbind("mouseout"); |
||||
feed.mousemove( |
||||
function ()
|
||||
{ |
||||
bindFeedEvent(); |
||||
feed.unbind("mousemove"); |
||||
} |
||||
);
|
||||
} |
||||
|
||||
function bindEvents() |
||||
{ |
||||
var maininput = $("#"+elemid + "_annoninput").children(".maininput");
|
||||
bindFeedEvent();
|
||||
feed.children("li").unbind("mousedown");
|
||||
feed.children("li").mousedown(
|
||||
function() |
||||
{ |
||||
//click in the list
|
||||
var option = $(this);
|
||||
addItem(option.text(),option.attr("rel")); |
||||
feed.hide(); |
||||
browser_msie?browser_msie_frame.hide():''; |
||||
complete.hide(); |
||||
} |
||||
); |
||||
|
||||
maininput.unbind("keydown"); |
||||
maininput.keydown( |
||||
function(event) |
||||
{
|
||||
if(event.keyCode == 191) |
||||
{
|
||||
event.preventDefault(); |
||||
return false; |
||||
} |
||||
|
||||
if (event.keyCode != 8)
|
||||
{ |
||||
holder.children("li.bit-box.deleted").removeClass("deleted"); |
||||
} |
||||
|
||||
if (event.keyCode == 13 && checkFocusOn())
|
||||
{ |
||||
var option = focuson; |
||||
addItem(option.text(), option.attr("rel")); |
||||
complete.hide(); |
||||
event.preventDefault(); |
||||
focuson = null; |
||||
return false; |
||||
} |
||||
|
||||
if (event.keyCode == 13 && !checkFocusOn())
|
||||
{ |
||||
if (options.newel)
|
||||
{ |
||||
var value = xssPrevent($(this).val()); |
||||
addItem(value, value); |
||||
complete.hide(); |
||||
event.preventDefault(); |
||||
focuson = null; |
||||
} |
||||
return false;
|
||||
} |
||||
|
||||
if (event.keyCode == 40)
|
||||
{
|
||||
removeFeedEvent(); |
||||
if (focuson == null || focuson.length == 0)
|
||||
{ |
||||
focuson = feed.children("li:visible:first"); |
||||
feed.get(0).scrollTop = 0; |
||||
} |
||||
else
|
||||
{ |
||||
focuson.removeClass("auto-focus"); |
||||
focuson = focuson.nextAll("li:visible:first"); |
||||
var prev = parseInt(focuson.prevAll("li:visible").length,10); |
||||
var next = parseInt(focuson.nextAll("li:visible").length,10); |
||||
if ((prev > Math.round(options.height /2) || next <= Math.round(options.height /2)) && typeof(focuson.get(0)) != "undefined")
|
||||
{ |
||||
feed.get(0).scrollTop = parseInt(focuson.get(0).scrollHeight,10) * (prev - Math.round(options.height /2)); |
||||
} |
||||
} |
||||
feed.children("li").removeClass("auto-focus"); |
||||
focuson.addClass("auto-focus"); |
||||
} |
||||
if (event.keyCode == 38)
|
||||
{ |
||||
removeFeedEvent(); |
||||
if (focuson == null || focuson.length == 0)
|
||||
{ |
||||
focuson = feed.children("li:visible:last"); |
||||
feed.get(0).scrollTop = parseInt(focuson.get(0).scrollHeight,10) * (parseInt(feed.children("li:visible").length,10) - Math.round(options.height /2)); |
||||
} |
||||
else
|
||||
{ |
||||
focuson.removeClass("auto-focus"); |
||||
focuson = focuson.prevAll("li:visible:first"); |
||||
var prev = parseInt(focuson.prevAll("li:visible").length,10); |
||||
var next = parseInt(focuson.nextAll("li:visible").length,10); |
||||
if ((next > Math.round(options.height /2) || prev <= Math.round(options.height /2)) && typeof(focuson.get(0)) != "undefined")
|
||||
{ |
||||
feed.get(0).scrollTop = parseInt(focuson.get(0).scrollHeight,10) * (prev - Math.round(options.height /2)); |
||||
} |
||||
} |
||||
feed.children("li").removeClass("auto-focus"); |
||||
focuson.addClass("auto-focus"); |
||||
}
|
||||
} |
||||
); |
||||
} |
||||
|
||||
function addTextItem(value) |
||||
{
|
||||
if (options.newel)
|
||||
{
|
||||
feed.children("li[fckb=1]").remove(); |
||||
if (value.length == 0) |
||||
{ |
||||
return; |
||||
} |
||||
var li = $(document.createElement("li")); |
||||
li.attr({"rel": value,"fckb": "1"}).html(value); |
||||
feed.prepend(li); |
||||
counter++; |
||||
} else
|
||||
{ |
||||
return; |
||||
} |
||||
} |
||||
|
||||
function funCall(func,item) |
||||
{
|
||||
var _object = "";
|
||||
for(i=0;i < item.get(0).attributes.length;i++) |
||||
{
|
||||
if (item.get(0).attributes[i].nodeValue != null)
|
||||
{ |
||||
_object += "\"_" + item.get(0).attributes[i].nodeName + "\": \"" + item.get(0).attributes[i].nodeValue + "\","; |
||||
} |
||||
} |
||||
_object = "{"+ _object + " notinuse: 0}"; |
||||
try { |
||||
eval(func + "(" + _object + ")"); |
||||
}catch(ex){}; |
||||
} |
||||
|
||||
function checkFocusOn() |
||||
{ |
||||
if (focuson == null) |
||||
{ |
||||
return false; |
||||
} |
||||
if (focuson.length == 0) |
||||
{ |
||||
return false; |
||||
} |
||||
return true; |
||||
} |
||||
|
||||
function xssPrevent(string) |
||||
{
|
||||
string = string.replace(/[\"\'][\s]*javascript:(.*)[\"\']/g, "\"\""); |
||||
string = string.replace(/script(.*)/g, "");
|
||||
string = string.replace(/eval\((.*)\)/g, ""); |
||||
string = string.replace('/([\x00-\x08,\x0b-\x0c,\x0e-\x19])/', ''); |
||||
return string; |
||||
} |
||||
|
||||
var options = $.extend({ |
||||
json_url: null, |
||||
cache: false, |
||||
height: "10", |
||||
newel: false, |
||||
firstselected: false, |
||||
filter_case: false, |
||||
filter_hide: false, |
||||
complete_text: "Start to type...", |
||||
maxshownitems: 30, |
||||
onselect: "", |
||||
onremove: "" |
||||
}, opt); |
||||
|
||||
//system variables
|
||||
var holder = null; |
||||
var feed = null; |
||||
var complete = null; |
||||
var counter = 0; |
||||
var cache = new Array(); |
||||
var json_cache = false; |
||||
var search_string = ""; |
||||
var focuson = null; |
||||
var deleting = 0; |
||||
var browser_msie = "\v"=="v"; |
||||
var browser_msie_frame; |
||||
|
||||
var element = $(this); |
||||
var elemid = element.attr("id"); |
||||
init(); |
||||
|
||||
return this; |
||||
}); |
||||
}; |
||||
} |
||||
); |
File diff suppressed because one or more lines are too long
After Width: | Height: | Size: 1.7 KiB |
@ -0,0 +1,51 @@ |
||||
/* TextboxList sample CSS */ |
||||
ul.holder { margin: 0; border: 1px solid #999; overflow: hidden; height: auto !important; height: 1%; padding: 4px 5px 0; } |
||||
*:first-child+html ul.holder { padding-bottom: 2px; } * html ul.holder { padding-bottom: 2px; } /* ie7 and below */ |
||||
ul.holder li { float: left; list-style-type: none; margin: 0 5px 4px 0; white-space:nowrap;} |
||||
ul.holder li.bit-box, ul.holder li.bit-input input { font: 11px "Lucida Grande", "Verdana"; } |
||||
ul.holder li.bit-box { -moz-border-radius: 6px; -webkit-border-radius: 6px; border-radius: 6px; border: 1px solid #CAD8F3; background: #DEE7F8; padding: 1px 5px 2px; } |
||||
ul.holder li.bit-box-focus { border-color: #598BEC; background: #598BEC; color: #fff; } |
||||
ul.holder li.bit-input input { width: auto; overflow:visible; margin: 0; border: 0px; outline: 0; padding: 3px 0px 2px; } /* no left/right padding here please */ |
||||
ul.holder li.bit-input input.smallinput { width: 20px; } |
||||
|
||||
/* Facebook demo CSS */ |
||||
#add { border: 1px solid #999; width: 550px; margin: 50px; padding: 20px 30px 10px; } |
||||
form ol li { list-style-type: none; } |
||||
form ol { font: 11px "Lucida Grande", "Verdana"; margin: 0; padding: 0; } |
||||
form ol li.input-text { margin-bottom: 10px; list-style-type: none; padding-bottom: 10px; } |
||||
form ol li.input-text label { font-weight: bold; cursor: pointer; display: block; font-size: 13px; margin-bottom: 10px; } |
||||
form ol li.input-text input { background-image:none; width: 500px; padding: 5px 5px 6px; font: 11px "Lucida Grande", "Verdana"; border: 1px solid #999; } |
||||
|
||||
/* This hide the shadow.gid image of dokeos*/ |
||||
ul.holder input[type="text"]:focus, ul.holder input-text input[type="password"]:focus { |
||||
background-image:none; |
||||
} |
||||
|
||||
|
||||
|
||||
|
||||
form ul.holder { width: 500px; } |
||||
form ul { margin: 0 !important } |
||||
ul.holder li.bit-box, #apple-list ul.holder li.bit-box { padding-right: 15px; position: relative; z-index:1000;} |
||||
#apple-list ul.holder li.bit-input { margin: 0; } |
||||
#apple-list ul.holder li.bit-input input.smallinput { width: 5px; } |
||||
ul.holder li.bit-hover { background: #BBCEF1; border: 1px solid #6D95E0; } |
||||
ul.holder li.bit-box-focus { border-color: #598BEC; background: #598BEC; color: #fff; } |
||||
ul.holder li.bit-box a.closebutton { position: absolute; right: 4px; top: 5px; display: block; width: 7px; height: 7px; font-size: 1px; background: url('close.gif'); } |
||||
ul.holder li.bit-box a.closebutton:hover { background-position: 7px; } |
||||
ul.holder li.bit-box-focus a.closebutton, ul.holder li.bit-box-focus a.closebutton:hover { background-position: bottom; } |
||||
|
||||
/* Autocompleter */ |
||||
|
||||
.facebook-auto { z-index:2000; display: none; position: absolute; width: 512px; background: #eee; } |
||||
.facebook-auto .default { z-index:2000; padding: 5px 7px; border: 1px solid #ccc; border-width: 0 1px 1px;font-family:"Lucida Grande","Verdana"; font-size:11px; } |
||||
.facebook-auto ul { display: none; margin: 0; padding: 0; overflow: auto; position:absolute; z-index:9999} |
||||
.facebook-auto ul li { padding: 5px 12px; z-index: 1000; cursor: pointer; margin: 0; list-style-type: none; border: 1px solid #ccc; border-width: 0 1px 1px; font: 11px "Lucida Grande", "Verdana"; background-color: #eee } |
||||
.facebook-auto ul li em { font-weight: bold; font-style: normal; background: #ccc; } |
||||
.facebook-auto ul li.auto-focus { background: #4173CC; color: #fff; } |
||||
.facebook-auto ul li.auto-focus em { background: none; } |
||||
.deleted { background-color:#4173CC !important; color:#ffffff !important;} |
||||
.hidden { display:none;} |
||||
|
||||
#demo ul.holder li.bit-input input { padding: 2px 0 1px; border: 1px solid #999; } |
||||
.ie6fix {height:1px;width:1px; position:absolute;top:0px;left:0px;z-index:1;} |
@ -0,0 +1,285 @@ |
||||
<?php |
||||
/* For licensing terms, see /dokeos_license.txt */ |
||||
|
||||
// name of the language file that needs to be included |
||||
$language_file = array ('registration','admin'); |
||||
|
||||
require_once '../inc/global.inc.php'; |
||||
|
||||
require_once (api_get_path(LIBRARY_PATH).'sortabletable.class.php'); |
||||
require_once (api_get_path(LIBRARY_PATH).'formvalidator/FormValidator.class.php'); |
||||
require_once (api_get_path(LIBRARY_PATH).'security.lib.php'); |
||||
require_once (api_get_path(LIBRARY_PATH).'usermanager.lib.php'); |
||||
|
||||
$tool_name = get_lang('SearchAUser'); |
||||
Display :: display_header($tool_name); |
||||
|
||||
|
||||
// Build search-form |
||||
$form = new FormValidator('search_user', 'get', '', '', null, false); |
||||
$renderer = & $form->defaultRenderer(); |
||||
$renderer->setElementTemplate('<span>{element}</span> '); |
||||
$form->add_textfield('keyword', '', false); |
||||
$form->addElement('style_submit_button', 'submit', get_lang('SearchButton'), 'class="search"'); |
||||
$form->addElement('static', 'additionalactions', null, $actions); |
||||
$form->display(); |
||||
|
||||
|
||||
if (isset ($_GET['keyword'])) { |
||||
if (isset ($_GET['keyword'])) { |
||||
$parameters = array ('keyword' => Security::remove_XSS($_GET['keyword'])); |
||||
} |
||||
// Create a sortable table with user-data |
||||
$parameters['sec_token'] = Security::get_token(); |
||||
|
||||
$table = new SortableTable('users', 'get_number_of_users', 'get_user_data', (api_is_western_name_order() xor api_sort_by_first_name()) ? 3 : 2); |
||||
$table->set_additional_parameters($parameters); |
||||
$table->set_header(0, '', false); |
||||
$table->set_header(1, get_lang('OfficialCode')); |
||||
if (api_is_western_name_order()) { |
||||
$table->set_header(2, get_lang('FirstName')); |
||||
$table->set_header(3, get_lang('LastName')); |
||||
} else { |
||||
$table->set_header(2, get_lang('LastName')); |
||||
$table->set_header(3, get_lang('FirstName')); |
||||
} |
||||
$table->set_header(4, get_lang('LoginName')); |
||||
$table->set_header(5, get_lang('Email')); |
||||
|
||||
//tag |
||||
$table_tag = new SortableTable('tags', 'get_number_of_user_tags', 'get_user_tag_data'); |
||||
$table_tag->set_additional_parameters($parameters); |
||||
$table_tag->set_header(0, '', false); |
||||
$table->set_header(1, get_lang('OfficialCode')); |
||||
if (api_is_western_name_order()) { |
||||
$table_tag->set_header(2, get_lang('FirstName')); |
||||
$table_tag->set_header(3, get_lang('LastName')); |
||||
} else { |
||||
$table_tag->set_header(2, get_lang('LastName')); |
||||
$table_tag->set_header(3, get_lang('FirstName')); |
||||
} |
||||
/* |
||||
//groups |
||||
$table_tag = new SortableTable('groups', 'get_number_of_user_tags', 'get_user_tag_data'); |
||||
$table_tag->set_additional_parameters($parameters); |
||||
$table_tag->set_header(0, '', false); |
||||
$table->set_header(1, get_lang('OfficialCode')); |
||||
if (api_is_western_name_order()) { |
||||
$table_tag->set_header(2, get_lang('FirstName')); |
||||
$table_tag->set_header(3, get_lang('LastName')); |
||||
} else { |
||||
$table_tag->set_header(2, get_lang('LastName')); |
||||
$table_tag->set_header(3, get_lang('FirstName')); |
||||
} |
||||
*/ |
||||
echo get_lang('Users'); |
||||
$table->display_grid(); |
||||
|
||||
echo get_lang('Tags'); |
||||
$table_tag->display_grid(); |
||||
/* |
||||
echo get_lang('Groups'); |
||||
$table_group->display_grid(); |
||||
*/ |
||||
} |
||||
|
||||
/** |
||||
* Get the users to display on the current page (fill the sortable-table) |
||||
* @param int offset of first user to recover |
||||
* @param int Number of users to get |
||||
* @param int Column to sort on |
||||
* @param string Order (ASC,DESC) |
||||
* @see SortableTable#get_table_data($from) |
||||
*/ |
||||
function get_user_tag_data($from, $number_of_items, $column, $direction) |
||||
{ |
||||
if (isset ($_GET['keyword'])) { |
||||
$keyword = Database::escape_string($_GET['keyword']); |
||||
} |
||||
$user_tags = UserManager::get_all_user_tags($keyword,'5',$from, $number_of_items); |
||||
return $user_tags; |
||||
} |
||||
|
||||
|
||||
|
||||
/** |
||||
* Get the total number of users on the platform |
||||
* @see SortableTable#get_total_number_of_items() |
||||
*/ |
||||
function get_number_of_user_tags() |
||||
{ |
||||
$tag_table = Database :: get_main_table(TABLE_MAIN_USER_TAG); |
||||
$sql = "SELECT COUNT(tag) AS total_number_of_items FROM $tag_table u"; |
||||
if (isset ($_GET['keyword'])) { |
||||
$keyword = Database::escape_string($_GET['keyword']); |
||||
$sql .= " WHERE (tag LIKE '%".$keyword."%' )"; |
||||
} |
||||
$res = Database::query($sql, __FILE__, __LINE__); |
||||
$obj = Database::fetch_object($res); |
||||
return $obj->total_number_of_items; |
||||
} |
||||
|
||||
|
||||
/** |
||||
* Get the users to display on the current page (fill the sortable-table) |
||||
* @param int offset of first user to recover |
||||
* @param int Number of users to get |
||||
* @param int Column to sort on |
||||
* @param string Order (ASC,DESC) |
||||
* @see SortableTable#get_table_data($from) |
||||
*/ |
||||
function get_user_data($from, $number_of_items, $column, $direction) |
||||
{ |
||||
$user_table = Database :: get_main_table(TABLE_MAIN_USER); |
||||
$sql = "SELECT |
||||
u.user_id AS col0, |
||||
u.official_code AS col1, |
||||
".(api_is_western_name_order() |
||||
? "u.firstname AS col2, |
||||
u.lastname AS col3," |
||||
: "u.lastname AS col2, |
||||
u.firstname AS col3,")." |
||||
u.username AS col4, |
||||
u.email AS col5 |
||||
FROM $user_table u "; |
||||
|
||||
// adding the filter to see the user's only of the current access_url |
||||
global $_configuration; |
||||
if ((api_is_platform_admin() || api_is_session_admin()) && $_configuration['multiple_access_urls']==true && api_get_current_access_url_id()!=-1) { |
||||
$access_url_rel_user_table= Database :: get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER); |
||||
$sql.= " INNER JOIN $access_url_rel_user_table url_rel_user ON (u.user_id=url_rel_user.user_id)"; |
||||
} |
||||
|
||||
if (isset ($_GET['keyword'])) { |
||||
$keyword = Database::escape_string($_GET['keyword']); |
||||
$sql .= " WHERE (u.firstname LIKE '%".$keyword."%' OR u.lastname LIKE '%".$keyword."%' OR u.username LIKE '%".$keyword."%' OR u.official_code LIKE '%".$keyword."%' OR u.email LIKE '%".$keyword."%' )"; |
||||
} elseif (isset ($_GET['keyword_firstname'])) { |
||||
$admin_table = Database :: get_main_table(TABLE_MAIN_ADMIN); |
||||
$keyword_firstname = Database::escape_string($_GET['keyword_firstname']); |
||||
$keyword_lastname = Database::escape_string($_GET['keyword_lastname']); |
||||
$keyword_email = Database::escape_string($_GET['keyword_email']); |
||||
$keyword_officialcode = Database::escape_string($_GET['keyword_officialcode']); |
||||
$keyword_username = Database::escape_string($_GET['keyword_username']); |
||||
$keyword_status = Database::escape_string($_GET['keyword_status']); |
||||
$query_admin_table = ''; |
||||
$keyword_admin = ''; |
||||
|
||||
if ($keyword_status == SESSIONADMIN) { |
||||
$keyword_status = '%'; |
||||
$query_admin_table = " , $admin_table a "; |
||||
$keyword_admin = ' AND a.user_id = u.user_id '; |
||||
} |
||||
$keyword_active = isset($_GET['keyword_active']); |
||||
$keyword_inactive = isset($_GET['keyword_inactive']); |
||||
$sql .= $query_admin_table." WHERE (u.firstname LIKE '%".$keyword_firstname."%' " . |
||||
"AND u.lastname LIKE '%".$keyword_lastname."%' " . |
||||
"AND u.username LIKE '%".$keyword_username."%' " . |
||||
"AND u.email LIKE '%".$keyword_email."%' " . |
||||
"AND u.official_code LIKE '%".$keyword_officialcode."%' " . |
||||
"AND u.status LIKE '".$keyword_status."'" . |
||||
$keyword_admin; |
||||
|
||||
if ($keyword_active && !$keyword_inactive) { |
||||
$sql .= " AND u.active='1'"; |
||||
} elseif($keyword_inactive && !$keyword_active) { |
||||
$sql .= " AND u.active='0'"; |
||||
} |
||||
$sql .= " ) "; |
||||
} |
||||
|
||||
// adding the filter to see the user's only of the current access_url |
||||
if ((api_is_platform_admin() || api_is_session_admin()) && $_configuration['multiple_access_urls']==true && api_get_current_access_url_id()!=-1) { |
||||
$sql.= " AND url_rel_user.access_url_id=".api_get_current_access_url_id(); |
||||
} |
||||
|
||||
if (!in_array($direction, array('ASC','DESC'))) { |
||||
$direction = 'ASC'; |
||||
} |
||||
$column = intval($column); |
||||
$from = intval($from); |
||||
$number_of_items = intval($number_of_items); |
||||
|
||||
$sql .= " ORDER BY col$column $direction "; |
||||
$sql .= " LIMIT $from,$number_of_items"; |
||||
$res = Database::query($sql, __FILE__, __LINE__); |
||||
|
||||
$users = array (); |
||||
$t = time(); |
||||
while ($user = Database::fetch_row($res)) { |
||||
if ($user[7] == 1 && $user[9] != '0000-00-00 00:00:00') { |
||||
// check expiration date |
||||
$expiration_time = convert_mysql_date($user[9]); |
||||
// if expiration date is passed, store a special value for active field |
||||
if ($expiration_time < $t) { |
||||
$user[7] = '-1'; |
||||
} |
||||
} |
||||
// forget about the expiration date field |
||||
$users[] = array($user[0],$user[1],$user[2],$user[3],$user[4],$user[5]); |
||||
} |
||||
return $users; |
||||
} |
||||
|
||||
|
||||
|
||||
/** |
||||
* Get the total number of users on the platform |
||||
* @see SortableTable#get_total_number_of_items() |
||||
*/ |
||||
function get_number_of_users() |
||||
{ |
||||
$user_table = Database :: get_main_table(TABLE_MAIN_USER); |
||||
$sql = "SELECT COUNT(u.user_id) AS total_number_of_items FROM $user_table u"; |
||||
|
||||
// adding the filter to see the user's only of the current access_url |
||||
global $_configuration; |
||||
if ((api_is_platform_admin() || api_is_session_admin()) && $_configuration['multiple_access_urls']==true && api_get_current_access_url_id()!=-1) { |
||||
$access_url_rel_user_table= Database :: get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER); |
||||
$sql.= " INNER JOIN $access_url_rel_user_table url_rel_user ON (u.user_id=url_rel_user.user_id)"; |
||||
} |
||||
|
||||
if ( isset ($_GET['keyword'])) { |
||||
$keyword = Database::escape_string($_GET['keyword']); |
||||
$sql .= " WHERE (u.firstname LIKE '%".$keyword."%' OR u.lastname LIKE '%".$keyword."%' OR u.username LIKE '%".$keyword."%' OR u.email LIKE '%".$keyword."%' OR u.official_code LIKE '%".$keyword."%') "; |
||||
} elseif (isset ($_GET['keyword_firstname'])) { |
||||
$admin_table = Database :: get_main_table(TABLE_MAIN_ADMIN); |
||||
$keyword_firstname = Database::escape_string($_GET['keyword_firstname']); |
||||
$keyword_lastname = Database::escape_string($_GET['keyword_lastname']); |
||||
$keyword_email = Database::escape_string($_GET['keyword_email']); |
||||
$keyword_officialcode = Database::escape_string($_GET['keyword_officialcode']); |
||||
$keyword_username = Database::escape_string($_GET['keyword_username']); |
||||
$keyword_status = Database::escape_string($_GET['keyword_status']); |
||||
$query_admin_table = ''; |
||||
$keyword_admin = ''; |
||||
if ($keyword_status == SESSIONADMIN) { |
||||
$keyword_status = '%'; |
||||
$query_admin_table = " , $admin_table a "; |
||||
$keyword_admin = ' AND a.user_id = u.user_id '; |
||||
} |
||||
$keyword_active = isset($_GET['keyword_active']); |
||||
$keyword_inactive = isset($_GET['keyword_inactive']); |
||||
$sql .= $query_admin_table . |
||||
" WHERE (u.firstname LIKE '%".$keyword_firstname."%' " . |
||||
"AND u.lastname LIKE '%".$keyword_lastname."%' " . |
||||
"AND u.username LIKE '%".$keyword_username."%' " . |
||||
"AND u.email LIKE '%".$keyword_email."%' " . |
||||
"AND u.official_code LIKE '%".$keyword_officialcode."%' " . |
||||
"AND u.status LIKE '".$keyword_status."'" . |
||||
$keyword_admin; |
||||
if($keyword_active && !$keyword_inactive) { |
||||
$sql .= " AND u.active='1'"; |
||||
} elseif($keyword_inactive && !$keyword_active) { |
||||
$sql .= " AND u.active='0'"; |
||||
} |
||||
$sql .= " ) "; |
||||
} |
||||
|
||||
// adding the filter to see the user's only of the current access_url |
||||
if ((api_is_platform_admin() || api_is_session_admin()) && $_configuration['multiple_access_urls']==true && api_get_current_access_url_id()!=-1) { |
||||
$sql.= " AND url_rel_user.access_url_id=".api_get_current_access_url_id(); |
||||
} |
||||
|
||||
$res = Database::query($sql, __FILE__, __LINE__); |
||||
$obj = Database::fetch_object($res); |
||||
return $obj->total_number_of_items; |
||||
} |
@ -0,0 +1,7 @@ |
||||
<?php |
||||
/* For licensing terms, see /dokeos_license.txt */ |
||||
require_once '../inc/global.inc.php'; |
||||
require_once api_get_path(LIBRARY_PATH).'usermanager.lib.php'; |
||||
$field_id = intval($_GET['field_id']); |
||||
$tag = $_GET['tag']; |
||||
echo UserManager::get_tags($tag, $field_id,'json','10'); |
@ -0,0 +1,7 @@ |
||||
<?php |
||||
/* For licensing terms, see /dokeos_license.txt */ |
||||
require_once '../inc/global.inc.php'; |
||||
require_once api_get_path(LIBRARY_PATH).'usermanager.lib.php'; |
||||
$field_id = intval($_GET['field_id']); |
||||
$tag = $_GET['tag']; |
||||
echo UserManager::get_tags($tag,$field_id,'json'); |
Loading…
Reference in new issue