/**
* A�ade al dominio DomainNm un nuevo usuario con nickname NuevoNickName
@param NuevoNickName nickname del nuevo usuario
@param NuevoMainmail mail del nuevo usuario
@param NuevaPwd password del usuario
@param DomainNm nm_domain del dominio al que se a�ade
**/
import java.io.IOException;
import java.sql.SQLException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.util.Properties;
import com.knowgate.dataobjs.DB;
import com.knowgate.dataobjs.DBAudit;
import com.knowgate.dataobjs.DBBind;
import com.knowgate.dataobjs.DBSubset;
import com.knowgate.datacopy.DataStruct;
import com.knowgate.acl.*;
import com.knowgate.misc.Environment;
import com.knowgate.misc.Gadgets;
import com.knowgate.dfs.FileSystem;
//aqui faltar�a por pillar el usuario fuente
//dependiendo del dominio y de los permisos que se quieran dar
//ahora mismo se est� utilizando el superusuario del dominio profe (1050)
//gu_user de superusuario del dominio PROFE (1050)
String GU_USER_SUPER_USUARIO_1050 = "c0a80146f5691b9dbe10000eb39331dd";
//Recogida de par�metros del script y construccion de datos necesarios
String iSourceDomainNm = "PROFE";
String iSourceDomainId = "1050";
String iTargetDomainNm = DomainNm;
ReturnValue = new Properties();
if (0 == iTargetDomainNm.length())
iTargetDomainNm = "PROFE";
String NewUserNickName = NuevoNickName;
String NewUserPwd = NuevaPwd;
if (0 == NewUserPwd.length())
NewUserPwd = Gadgets.generateUUID().substring(1,7);
String NewUserId = Gadgets.generateUUID();
String NewUserMainMail = NuevoMainmail;
String NewUserNm = "MisApellidos";
//ReturnValue = "Usuario ('" + NewUserId + "','" + NewUserNickName + "','" + NewUserMainMail + "','" + NewUserNm + ") a�adido al dominio " + DomainNm + " con exito.";
//valor de retorno
ReturnValue.put("sCodError", "0");
ReturnValue.put("sMessage", "Usuario ('" + NewUserId + "','" + NewUserNickName + "','" + NewUserMainMail + "','" + NewUserNm + ") a�adido al dominio " + DomainNm + " con exito.");
ReturnValue.put("sIdObjetoOK", NewUserId);
String iSourceUser = new String(GU_USER_SUPER_USUARIO_1050);
String iTargetUser = new String(NewUserId);
Object[] oPKOr = {null};
Object[] oPKTr = {null };
String sStorage = Environment.getProfileVar("hipergate", "storage");
Properties oParams = new Properties();
DataStruct oDS = new DataStruct();
try {
DefaultConnection.setReadOnly(true);
DefaultConnection.setTransactionIsolation(Connection.TRANSACTION_READ_UNCOMMITTED);
// C�digo de acceso a datos
oDS.setOriginConnection(DefaultConnection);
oDS.setTargetConnection(AlternativeConnection);
AlternativeConnection.setAutoCommit (false);
//obtencion del id_domain a traves del nombre
DBSubset oDomains;
int iDomains;
oDomains = new DBSubset(DB.k_domains,
DB.id_domain + "," + DB.nm_domain,
"LOWER(" + DB.nm_domain + ")='" + iTargetDomainNm.toLowerCase() + "' " , 4);
iDomains = oDomains.load(AlternativeConnection);
String iTargetDomainId = oDomains.getString(0,0);
//ReturnValue = iTargetDomainId;
oParams.put("OldUserId", iSourceUser);
oParams.put("NewUserId", NewUserId);
oParams.put("NewUserNickName", NewUserNickName);
oParams.put("NewUserMainMail", NewUserMainMail);
oParams.put("NewUserNm", NewUserNm);
oParams.put("iTargetDomain", iTargetDomainId.toString());
oParams.put("iSourceDomainNm", iSourceDomainNm);
oParams.put("NewUserPwd", NewUserPwd);
// Inserta el nuevo usuario
oDS.parse(sStorage + "/scripts/domain_adduser.xml", oParams);
oDS.insert(oPKOr, oPKTr, 1);
oDS.clear();
// Inserta la nueva workarea
oDS.parse(sStorage + "/scripts/domain_addworkarea.xml", oParams);
oDS.insert(oPKOr, oPKTr, 1);
// *****************************************************
// C�digo para asignar ls categor�as home a cada usuario
PreparedStatement oStmt;
DBSubset oCategories;
int iCategories;
int iUnderscore;
String sCatName;
String sGuCategory;
String sNickName;
// Leer la categor�a padre del nuevo usuario
oCategories = new DBSubset(DB.k_categories,
DB.gu_category + "," + DB.nm_category,
DB.gu_owner + "='" + iTargetUser.toString() + "' AND " + DB.nm_category + " like '%" + NewUserNickName.toString() + "' ", 4);
iCategories = oCategories.load(AlternativeConnection);
// Para cada categor�a buscar un usuario cuyo nick coincida con el final del nombre de la categoria
// Es decir, el matching entre las categor�as creadas y los usuarios creados se hace usando el
// convenio del campo nm_category de tener la forma DOMINIO_usuario_categoria
oStmt = AlternativeConnection.prepareStatement("UPDATE " + DB.k_users + " SET " + DB.gu_category + "=? WHERE " + DB.id_domain + "=" + iTargetDomainId.toString() + " AND " + DB.tx_nickname + "=?");
for (int c=0; c<iCategories; c++) {
sCatName = oCategories.getString(1,c);
sGuCategory = oCategories.getString(0,c);
iUnderscore = sCatName.indexOf("_");
if (iUnderscore>0) {
sNickName = sCatName.substring(iUnderscore+1);
oStmt.setString(1, oCategories.getString(0,c));
oStmt.setString(2, NewUserNickName);
oStmt.executeUpdate();
} // fi()
} // next (c)
oStmt.close();
// *****************************************************
//crear la estructura de directorio para las aplicaciones
DBSubset oWorkAreas;
int iWorkAreas;
String iWorkAreaId;
oWorkAreas = new DBSubset(DB.k_workareas,
DB.gu_workarea + "," + DB.nm_workarea,
DB.id_domain + "=" + iTargetDomainId + " AND " + DB.gu_owner + "= '" + NewUserId + "'" , 4);
iWorkAreas = oWorkAreas.load(AlternativeConnection);
String iWorkAreaId = oWorkAreas.getString(0,0);
//pillar el gu_workarea source (workarea por defecto del user que se copia)
oWorkAreas = new DBSubset(DB.k_users,
DB.gu_workarea,
DB.gu_user + "='" + iSourceUser + "'" , 4);
iWorkAreas = oWorkAreas.load(AlternativeConnection);
String iWorkAreaSourceId = oWorkAreas.getString(0,0);
//////
java.io.File oFileDir;
String Base_path_A_crear = sStorage + "/domains/" + iTargetDomainId.toString() + "/workareas";
String Path_workarea_a_crear = Base_path_A_crear + "/" + iWorkAreaId + "/apps";
String Path_MailWireData_a_crear = Path_workarea_a_crear + "/Mailwire/data";
String Path_MailWireHtml_a_crear = Path_workarea_a_crear + "/Mailwire/html";
String Path_MailWireDataImages_a_crear = Path_workarea_a_crear + "/Mailwire/data/images/thumbs";
String Path_WebBuilderData_a_crear = Path_workarea_a_crear + "/WebBuilder/data/images/thumbs";
String Path_WebBuilderHtml_a_crear = Path_workarea_a_crear + "/WebBuilder/html";
//creaci�n de directorios
oFileDir = new File (Path_MailWireHtml_a_crear);
if (!oFileDir.exists()) oFileDir.mkdirs();
oFileDir = new File (Path_MailWireDataImages_a_crear);
if (!oFileDir.exists()) oFileDir.mkdirs();
oFileDir = new File (Path_WebBuilderData_a_crear);
if (!oFileDir.exists()) oFileDir.mkdirs();
oFileDir = new File (Path_WebBuilderHtml_a_crear);
if (!oFileDir.exists()) oFileDir.mkdirs();
oFileDir = null;
//////fin creacion de directorios
//copia de archivos
FileSystem oFileSystem;
oFileSystem = new FileSystem(Environment.getProfile("hipergate"));
oFileSystem.os(FileSystem.OS_UNIX);
/*
String Base_path_Source = Base_path_A_crear;
String Path_workarea_Source = Base_path_Source + "/" + iWorkAreaSourceId + "/apps";
String Path_MailWireData_Source = Path_workarea_Source + "/Mailwire/data";
String Path_MailWireHtml_Source = Path_workarea_Source + "/Mailwire/html";
String Path_MailWireDataImages_Source = Path_workarea_Source + "/Mailwire/data/images/thumbs";
*/
//pillar las pagesets de la workarea source para pillar los nombres de los archivos xml y copiarlos
//a la nueva workarea
DBSubset oPageSets, oPageSetTarget;
int iPageSets, iPageSetTarget;
String sNmPageset, sFile, sPathData, sPathDataNew, sGuPageSetSource, sGuPageSetTarget;
PreparedStatement oStmt;
oStmt = AlternativeConnection.prepareStatement("UPDATE " + DB.k_pagesets + " SET " + DB.path_data + "=? WHERE " + DB.gu_workarea + "=? AND " + DB.path_data + "=?");
oPageSets = new DBSubset(DB.k_pagesets,
DB.gu_pageset + "," + DB.nm_pageset + "," + DB.path_data,
DB.gu_workarea + "= '" + iWorkAreaSourceId + "'" , 4);
iPageSets = oPageSets.load(AlternativeConnection);
for (int c=0; c<iPageSets; c++) {
sGuPageSetSource = oPageSets.getString(0,c);
sNmPageset = oPageSets.getString(1,c);
sFile = sNmPageset + ".xml";
sPathData = oPageSets.getString(2,c);
//String sSourceURI = "file://" + Path_MailWireData_Source + "/" + sFile;
String sSourceURI = "file://" + sPathData;
//String sTargetURI = "file://" + Path_MailWireData_a_crear + "/" + sFile;
String sTargetURI = Gadgets.replace(sSourceURI,"([a-z]|[A-Z]|[0-9]){32}", iWorkAreaId);
String sTargetURI = Gadgets.replace(sTargetURI,"/" + iSourceDomainId + "/", "/" + iTargetDomainId + "/");
String sPathDataNew = Gadgets.replace(sTargetURI,"file://", "");
//obtenemos el nuevo gu_pageset
oPageSetTarget = new DBSubset(DB.k_pagesets,
DB.gu_pageset ,
DB.gu_workarea + "= '" + iWorkAreaId + "' AND " + DB.path_data + "='" + sPathData + "'" , 4);
iPageSetTarget = oPageSetTarget.load(AlternativeConnection);
sGuPageSetTarget = oPageSetTarget.getString(0,0);
//Leemos el fichero xml, sustituimos el guid=gu_pageset por el gu_pageset nuevo y escribimos el nuevo fichero
//esto peta despues de vacaciones
//lo comentamos por ahora
/*
File oFile = new File(sPathData);
File oFileOut = new File(sPathDataNew);
FileInputStream oStream = new FileInputStream(oFile);
FileOutputStream oStreamOut = new FileOutputStream(oFileOut);
Long lLength = new Long(oFile.length());
byte[] aBytes = new byte[lLength.intValue()];
oStream.read(aBytes);
String sPageSetSourceData = new String(aBytes);
sPageSetSourceData = Gadgets.replace(sPageSetSourceData, sGuPageSetSource , sGuPageSetTarget);
//sTemplateData = Gadgets.replace(sTemplateData,":gu_microsite",GU_MICROSITE);
oStreamOut.write(sPageSetSourceData.getBytes());
oStreamOut.close();
*/// fin comentario despues de vacaciones
//Actualizar el campo path_data de cada pageset nueva
oStmt.setString(1, sPathDataNew);
oStmt.setString(2, iWorkAreaId);
oStmt.setString(3, sPathData);
oStmt.executeUpdate();
//ReturnValue += "<br>" + sSourceURI + "--->" + sTargetURI;
/*
try {
//oFileSystem.copy (sPathWorkAreasPutSource,sPathWorkAreasPutTarget);
}
catch (IOException ioe) {
ReturnValue = "ERROR: " + ioe.getMessage() + " oFileSystem.copy (" + sSourceURI + "," + sTargetURI + ")";
}
*/
}
/////
oStmt.close();
//copiar imagenes por defecto
String sVarWorkAreasPut = "file://" + Environment.getProfileVar("hipergate", "workareasput");
String sPathWorkAreasPutSource = sVarWorkAreasPut + "/" + iWorkAreaSourceId + "/apps/Mailwire/data/images/";
String sPathWorkAreasPutTarget = sVarWorkAreasPut + "/" + iWorkAreaId + "/apps/Mailwire/data/";
try {
oFileSystem.copy (sPathWorkAreasPutSource,sPathWorkAreasPutTarget);
}
catch (IOException ioe) {
ReturnValue = "ERROR: " + ioe.getMessage() + " oFileSystem.copy (" + sPathWorkAreasPutSource + "," + sPathWorkAreasPutTarget + ")";
}
oFileSystem = null;
/////fin copia de archivos
//actualizar campo gu_workarea en k_users
oStmt = AlternativeConnection.prepareStatement("UPDATE " + DB.k_users + " SET " + DB.gu_workarea + "=? WHERE " + DB.gu_user + "=?");
oStmt.setString(1, iWorkAreaId);
oStmt.setString(2, NewUserId);
oStmt.executeUpdate();
oStmt.close();
//DBAudit.log(AlternativeConnection, ACLDomain.ClassId, "NDOM", "unknown", "0", null, 0, 0, null, null);
}
catch (SQLException e) {
//ReturnValue = "ERROR: " + e.getMessage();
ReturnValue.put("sCodError", "1");
ReturnValue.put("sMessage", "ERROR: " + e.getMessage());
ReturnValue.put("sIdObjetoOK", "");
}