Short Description of the Project:
we developed a e-learning system for our students. each student has a unique username/password to view the modules he/she should view and nothing more. since we want to give them the opportunity to run these modules from home as well, we are trying to get the USERNAME/COMPUTERNAME as well, so the students, when they sign up for the modules, they can ONLY run the modules fromhome PC.
We found a nice JavaScript, that gives us opportunity to get these 2 values, but we are not able to retrieve these into PHP.
The JavaScript is as follow:
[code]
//~~Author~~. Curtis Riley
//~~Email_Address~~. curril@tristategt.org
//Gets the current user's name, domain, and PC name, then gets the global
//groups on the domain that the user is a member of, and then checks the
//local groups on the PC to see if the user is a member. All of the data is
//displayed as collected in an Internet Explorer window controled by the
//script.
//~~Script~~.
// WSH and ADSI demo program
// Gets global and local groups
// for the current user and machine
// and displays them in IE
// Requires: ADSI 2.5, WSH 2.0,
// Scripting 5.1, IE4
//Global ActiveX objects
//Creates an instance of IE
var ie = new ActiveXObject ("InternetExplorer.Application");
//Global variables
var gsUserName, gsUserDomain, gsComputerName;
var gaGlobalGroups = new Array();
var gaLocalGroups = new Array();
var gaMembershipFrom = new Array();
// Begin Main Program
BuildOutputWindow();
ShowStatus("Getting Information...");
gsUserName = Get_UserName();
gsUserDomain = Get_UserDomain();
gsComputerName = Get_ComputerName();
ShowUserData();
gaGlobalGroups = Get_UserGlobalGroups(gsUserName, gsUserDomain);
ShowGlobalGroupData(gaGlobalGroups);
gaLocalGroups = Get_UserLocalGroups(gsUserName, gsUserDomain, gsComputerName, gaGlobalGroups);
ShowLocalGroupData(gaLocalGroups);
ShowStatus("Group information retrieved.");
// End Main Program
// ADSI and WSH Functions
// Gets the PC Name from the WSH
function Get_ComputerName(){
ShowStatus("Getting Computer Name...");
var WshNetwork = new ActiveXObject ("WScript.Network");
return (WshNetwork.ComputerName);
}
// End function GetComputerName(){
// Gets the User Name from the WSH
function Get_UserName(){
ShowStatus("Getting User Name...");
var WshNetwork = new ActiveXObject ("WScript.Network");
return (WshNetwork.UserName);
}
// End function GetUserName(){
// Gets the Domain Name from the WSH
function Get_UserDomain(){
ShowStatus("Getting Domain Name...");
var WshNetwork = new ActiveXObject ("WScript.Network");
return (WshNetwork.UserDomain);
}
// End function Get_UserDomain(){
// Gets the global groups the user is a member of from ADSI
function Get_UserGlobalGroups(sUserName, sUserDomain){
ShowStatus("Getting User Global Group Membership...");
var oDomain; //Will hold the NT domain object
var eDomain; //an Enumerator that points to oDomain
var oGroup; //Will hold a group object
var i; //Counter variable
var VB_array; //a Dictionary object used to create a VBArray
var VBGroupFilter; //will hold the value "Group" in a VBArray
var aGroups = new Array(); //Holds the groups the user is a member of
// Create a VBarray to hold the filter value (yes, it is a kludge)
VB_array = new ActiveXObject("Scripting.Dictionary");
VB_array.add("Group", "");
VBGroupFilter = VB_array.Keys();
// Get the IADsContainer object for the domain
oDomain = GetObject("WinNT://" + sUserDomain);
//Filter the IADsContainer so that only objects that
//are groups show up when looking at it
oDomain.Filter = VBGroupFilter;
//Create an enumerator object so that we can step through all the groups
//in the domain
eDomain = new Enumerator(oDomain)
i = 0; //Initialize counter to step through array
for (;!eDomain.atEnd();eDomain.moveNext()){
//Since oDomain is filtered by group, each eDomain item is a group
oGroup = eDomain.item();
ShowStatus("Checking membership in group " + oGroup.Name + "....");
//Use the IsMember() method to find out if user is in the group
if ( oGroup.IsMember("WinNT://" + sUserDomain + "/" + sUserName) ){
//Store the group in the array, increment array counter
aGroups[i++] = oGroup;
//Show the groups as they come up
ShowGlobalGroupData(aGroups);
}
}
ShowStatus("Done getting global group membership");
return (aGroups);
}
// function Get_UserGlobalGroups(){
// Gets the local groups the user is a member of
function Get_UserLocalGroups(sUserName, sUserDomain, sComputerName, aGlobalGroups){
ShowStatus("Getting User Local Group Membership (may take a while)...");
var oDomain; //Will hold the NT local domain object
var eDomain; //an Enumerator that points to oDomain
var oGroup; //Will hold a group object
var i; //Counter variable
var VB_array; //a Dictionary object used to create a VBArray
var VBGroupFilter; //will hold the value "Group" in a VBArray
var aGroups = new Array(); //Holds the groups the user is a member of
// Create a VBarray to hold the filter value (yes, it is a kludge)
VB_array = new ActiveXObject("Scripting.Dictionary");
VB_array.add("Group", "");
VBGroupFilter = VB_array.Keys();
// Get the IADsContainer object for the computer
oDomain = GetObject("WinNT://" + sComputerName);
//Filter the IADsContainer so that only objects that
//are groups show up when looking at it
oDomain.Filter = VBGroupFilter;
//Create an enumerator object so that we can step through all the groups
//in the local domain
eDomain = new Enumerator(oDomain)
//Use a for loop to step through the enumerator and look at all the groups
i = 0; //Initialize counter to step through array
for (;!eDomain.atEnd();eDomain.moveNext()){
//Since oDomain is filtered by group, each eDomain item is a group
oGroup = eDomain.item();
ShowStatus("Checking membership in group " + oGroup.Name + "....");
//Use the IsMember() method to find out if user is in the group
if ( oGroup.IsMember("WinNT://" + sUserDomain + "/" + sUserName) ){
//Add a new property to indicate where the membership comes from
gaMembershipFrom[i] = sUserName;
//Store the group in the array, increment array counter
aGroups[i++] = oGroup;
//Show the groups as they come up
ShowLocalGroupData(aGroups);
}
//Now loop through all global groups that the user is a member of
//and check to see if those global groups belong to the local group
//Necessary since the .IsMember method doesn't check to see if a
//a user is in the global groups that are members of the local group
for (j =0; j < aGlobalGroups.length; j++){
ShowStatus("Checking membership in group " + oGroup.Name + "....");
if ( oGroup.IsMember("WinNT://" + sUserDomain + "/" + aGlobalGroups[j].Name) ){
//Now check against the last local group added to list to see if
//the user is already a member to prevent adding duplicate names
//since (i) was incremented, need to use (i-1) to get current group
if (aGroups[i-1].Name != oGroup.Name){
gaMembershipFrom[i] = aGlobalGroups[j].Name;
aGroups[i++] = oGroup;
} else {
//Add current global group name to the MembershipFrom list
gaMembershipFrom[i-1] += "<br>" + aGlobalGroups[j].Name;
}
ShowLocalGroupData(aGroups);
}
}
}
ShowStatus("Done getting local group membership");
return (aGroups);
} // End function Get_UserLocalGroups(){
// IE and display Functions
// Creates the IE window
// Require the object ie.
function BuildOutputWindow(){
var n = 0; //dummy variable while waiting for IE to start
var s = ""; //String that holds the HTML to build window
//Set window properties
ie.height = 480;
ie.width = 640;
ie.menubar = false;
ie.toolbar = false;
ie.statusbar = false;
ie.addressbar = false;
ie.resizable = true;
ie.navigate ("about:blank");
//Loop while IE is opening
while (ie.busy) {++n};
ie.document.body.innerHTML = "Building Document..." + "<br>load time= " + n;
ie.visible = true;
//Start building document. Each element is given an ID for DHTML use
//Single quotes are used to prevent having to escape double quotes
//Newlines are thrown in to make it easier to read if sent to a file
//The banner element
s += '<h3 id="Banner_id" onclick="tests()">Group Membership</h3>\n';
//The status element, not to be confused with the status bar
s += '<p id="Status_id">Building Document...</p>\n';
//The user data element (holds PC name, user name, domain)
s += '<p id="UserData_id">No user data</p>\n';
//The global groups element
s += '<p id="GlobalGroups_id">No global groups<p>\n';
//The local groups element
s += '<p id="LocalGroups_id">No local groups<p>\n';
//Show the HTML
ie.document.body.innerHTML = s;
}
//End function BuildOutputWindow(){
//Shows HTML text in IE window in element labeled "Status_id"
function ShowStatus(sCurrStatus){
ie.document.all.item("Status_id").innerHTML = sCurrStatus;
}
//End function ShowStatus("sCurrStatus")
Read this forum's guidelines and put you code between code, php or html tags,Read Posting Guidelines before you put code in forum!!! - Ronald