Merged in paulis/processmaker/PM-1060 (pull request #2361)

PM-1060: LdapAdvanced Feature in core
This commit is contained in:
Julio Cesar Laura Avendaño
2015-06-25 10:58:10 -04:00
25 changed files with 6973 additions and 58 deletions

View File

@@ -0,0 +1,167 @@
<?php
try {
//Set variables
$osIsLinux = strtoupper(substr(PHP_OS, 0, 3)) != "WIN";
//Defines constants
define("PATH_SEP", ($osIsLinux)? "/" : "\\");
$arrayPathToCron = array();
$flagPathToCron = false;
if (!$flagPathToCron) {
//Path to CRON by __FILE__
$arrayAux = explode(PATH_SEP, str_replace("engine" . PATH_SEP . "bin", "", dirname(__FILE__)));
array_pop($arrayAux);
if (count($arrayAux) > 0 && $arrayAux[count($arrayAux) - 1] == "workflow") {
$arrayPathToCron = $arrayAux;
$flagPathToCron = true;
}
}
if (!$flagPathToCron) {
throw new Exception("Error: Unable to execute the LDAP Advanced CRON, the path is incorrect");
}
$pathHome = implode(PATH_SEP, $arrayPathToCron) . PATH_SEP;
array_pop($arrayPathToCron);
$pathTrunk = implode(PATH_SEP, $arrayPathToCron) . PATH_SEP;
array_pop($arrayPathToCron);
$pathOutTrunk = implode(PATH_SEP, $arrayPathToCron) . PATH_SEP;
define("PATH_HOME", $pathHome);
define("PATH_TRUNK", $pathTrunk);
define("PATH_OUTTRUNK", $pathOutTrunk);
//Check deprecated files
$fileBinDeprecated = PATH_HOME . "engine" . PATH_SEP . "bin" . PATH_SEP . "plugins" . PATH_SEP . "ldapadvanced.php";
if (file_exists($fileBinDeprecated)) {
@unlink($fileBinDeprecated);
if (file_exists($fileBinDeprecated)) {
throw new Exception("Error: LDAP Advanced CRON requires that the \"$fileBinDeprecated\" file has been deleted.");
}
}
//Include files
require_once(PATH_HOME . "engine" . PATH_SEP . "config" . PATH_SEP . "paths.php");
G::LoadClass("system");
$config = System::getSystemConfiguration();
ini_set("date.timezone", $config["time_zone"]);
//CRON command options
$arrayCommandOption = array(
"force" => "+force",
"debug" => "+debug"
);
//CRON status
$flagIsRunning = false;
$lastExecution = "";
$processcTimeProcess = 0;
$processcTimeStart = 0;
$force = in_array($arrayCommandOption["force"], $argv);
$debug = in_array($arrayCommandOption["debug"], $argv);
if (!$force && file_exists(PATH_DATA . "ldapcron")) {
//Windows flag
//Get data of CRON file
$arrayCron = unserialize(trim(file_get_contents(PATH_DATA . "ldapcron")));
$flagIsRunning = (boolean)($arrayCron["flagIsRunning"]);
$lastExecution = $arrayCron["lastExecution"];
$processcTimeProcess = (isset($arrayCron["processcTimeProcess"]))? (int)($arrayCron["processcTimeProcess"]) : 10; //Minutes
$processcTimeStart = (isset($arrayCron["processcTimeStart"]))? $arrayCron["processcTimeStart"] : 0;
}
if (!$force && $osIsLinux) {
//Linux flag
//Check if CRON it's running
exec("ps -fea | grep ldapcron.php | grep -v grep", $arrayOutput);
//This validation is when the CRON is called from a symlink
$count = 0;
foreach ($arrayOutput as $value) {
if (preg_match("/^.*ldapcron\.php.*$/", $value)) {
$count++;
}
}
if ($count > 1) {
$flagIsRunning = true;
}
}
if ($force || !$flagIsRunning) {
//Start CRON
$arrayCron = array("flagIsRunning" => "1", "lastExecution" => date("Y-m-d H:i:s"));
file_put_contents(PATH_DATA . "ldapcron", serialize($arrayCron));
try {
$ldapCronSinglePath = PATH_HOME . "engine" . PATH_SEP . "bin" . PATH_SEP . "ldapcron_single.php";
$workspace = "";
for ($i = 1; $i <= count($argv) - 1; $i++) {
if (preg_match("/^\+w(.+)$/", $argv[$i], $arrayMatch)) {
$workspace = $arrayMatch[1];
break;
}
}
$countw = 0;
if ($workspace == "") {
$d = dir(PATH_DB);
while (($entry = $d->read()) !== false) {
if ($entry != "" && $entry != "." && $entry != "..") {
if (is_dir(PATH_DB . $entry)) {
if (file_exists(PATH_DB . $entry . PATH_SEP . "db.php")) {
$countw++;
passthru("php -f \"$ldapCronSinglePath\" " . (($debug)? 1 : 0) . " $entry \"" . base64_encode(PATH_HOME) . "\" \"" . base64_encode(PATH_TRUNK) . "\" \"" . base64_encode(PATH_OUTTRUNK) . "\"");
}
}
}
}
} else {
if (!is_dir(PATH_DB . $workspace) || !file_exists(PATH_DB . $workspace . PATH_SEP . "db.php")) {
throw new Exception("Error: The workspace \"$workspace\" does not exist");
}
$countw++;
passthru("php -f \"$ldapCronSinglePath\" " . (($debug)? 1 : 0) . " $workspace \"" . base64_encode(PATH_HOME) . "\" \"" . base64_encode(PATH_TRUNK) . "\" \"" . base64_encode(PATH_OUTTRUNK) . "\"");
}
eprintln("Finished $countw workspaces processed");
} catch (Exception $e) {
throw $e;
}
//End CRON
$arrayCron = array("flagIsRunning" => "0", "lastExecution" => date("Y-m-d H:i:s"));
file_put_contents(PATH_DATA . "ldapcron", serialize($arrayCron));
} else {
eprintln("The LDAP Advanced CRON is running, please wait for it to finish\nStarted in $lastExecution");
eprintln("If do you want force the execution use the option \"" . $arrayCommandOption["force"] . "\", example: php -f ldapcron.php +wworkflow " . $arrayCommandOption["force"] ,"green");
}
echo "Done!\n";
} catch (Exception $e) {
echo $e->getMessage() . "\n";
}

View File

@@ -0,0 +1,489 @@
<?php
register_shutdown_function(
create_function(
"",
"
if (class_exists(\"Propel\")) {
Propel::close();
}
"
)
);
ini_set("memory_limit", "512M");
try {
//Verify data
if (count($argv) != 6) {
throw new Exception("Error: Invalid number of arguments");
}
for ($i = 3; $i <= count($argv) - 1; $i++) {
$argv[$i] = base64_decode($argv[$i]);
if (!is_dir($argv[$i])) {
throw new Exception("Error: The path \"" . $argv[$i] . "\" is invalid");
}
}
//Set variables
$osIsLinux = strtoupper(substr(PHP_OS, 0, 3)) != "WIN";
$pathHome = $argv[3];
$pathTrunk = $argv[4];
$pathOutTrunk = $argv[5];
//Defines constants
define("PATH_SEP", ($osIsLinux)? "/" : "\\");
define("PATH_HOME", $pathHome);
define("PATH_TRUNK", $pathTrunk);
define("PATH_OUTTRUNK", $pathOutTrunk);
define("PATH_CLASSES", PATH_HOME . "engine" . PATH_SEP . "classes" . PATH_SEP);
define("SYS_LANG", "en");
require_once(PATH_HOME . "engine" . PATH_SEP . "config" . PATH_SEP . "paths.php");
if (file_exists(PATH_TRUNK . "framework" . PATH_SEP . "src" . PATH_SEP . "Maveriks" . PATH_SEP . "Util" . PATH_SEP . "ClassLoader.php")) {
require_once(PATH_TRUNK . "framework" . PATH_SEP . "src" . PATH_SEP . "Maveriks" . PATH_SEP . "Util" . PATH_SEP . "ClassLoader.php");
}
G::LoadThirdParty("pear/json", "class.json");
G::LoadThirdParty("smarty/libs", "Smarty.class");
G::LoadSystem("error");
G::LoadSystem("dbconnection");
G::LoadSystem("dbsession");
G::LoadSystem("dbrecordset");
G::LoadSystem("dbtable");
G::LoadSystem("rbac" );
G::LoadSystem("publisher");
G::LoadSystem("templatePower");
G::LoadSystem("xmlDocument");
G::LoadSystem("xmlform");
G::LoadSystem("xmlformExtension");
G::LoadSystem("form");
G::LoadSystem("menu");
G::LoadSystem("xmlMenu");
G::LoadSystem("dvEditor");
G::LoadSystem("table");
G::LoadSystem("pagedTable");
G::LoadClass("system");
require_once("propel/Propel.php");
require_once("creole/Creole.php");
$config = System::getSystemConfiguration();
$e_all = (defined("E_DEPRECATED"))? E_ALL & ~E_DEPRECATED : E_ALL;
$e_all = (defined("E_STRICT"))? $e_all & ~E_STRICT : $e_all;
$e_all = ($config["debug"])? $e_all : $e_all & ~E_NOTICE;
//Do not change any of these settings directly, use env.ini instead
ini_set("display_errors", $config["debug"]);
ini_set("error_reporting", $e_all);
ini_set("short_open_tag", "On");
ini_set("default_charset", "UTF-8");
//ini_set("memory_limit", $config["memory_limit"]);
ini_set("soap.wsdl_cache_enabled", $config["wsdl_cache"]);
ini_set("date.timezone", $config["time_zone"]);
define("DEBUG_SQL_LOG", $config["debug_sql"]);
define("DEBUG_TIME_LOG", $config["debug_time"]);
define("DEBUG_CALENDAR_LOG", $config["debug_calendar"]);
define("MEMCACHED_ENABLED", $config["memcached"]);
define("MEMCACHED_SERVER", $config["memcached_server"]);
define("TIME_ZONE", $config["time_zone"]);
require_once(PATH_GULLIVER . PATH_SEP . "class.bootstrap.php");
//define("PATH_GULLIVER_HOME", PATH_TRUNK . "gulliver" . PATH_SEP);
spl_autoload_register(array("Bootstrap", "autoloadClass"));
//DATABASE propel classes used in "Cases" Options
if (file_exists(PATH_CLASSES . "class.licensedFeatures.php")) {
Bootstrap::registerClass("PMLicensedFeatures", PATH_CLASSES . "class.licensedFeatures.php");
}
Bootstrap::registerClass("serverConf", PATH_CLASSES . "class.serverConfiguration.php");
Bootstrap::registerClass("Entity_Base", PATH_HOME . "engine/classes/entities/Base.php");
Bootstrap::registerClass("BaseContent", PATH_HOME . "engine/classes/model/om/BaseContent.php");
Bootstrap::registerClass("Content", PATH_HOME . "engine/classes/model/Content.php");
Bootstrap::registerClass("BaseContentPeer", PATH_HOME . "engine/classes/model/om/BaseContentPeer.php");
Bootstrap::registerClass("ContentPeer", PATH_HOME . "engine/classes/model/ContentPeer.php");
//Bootstrap::registerClass("BaseApplication", PATH_HOME . "engine/classes/model/om/BaseApplication.php");
//Bootstrap::registerClass("ApplicationPeer", PATH_HOME . "engine/classes/model/ApplicationPeer.php");
//Bootstrap::registerClass("Application", PATH_HOME . "engine/classes/model/Application.php");
//
//Bootstrap::registerClass("BaseAppDelegation", PATH_HOME . "engine/classes/model/om/BaseAppDelegation.php");
//Bootstrap::registerClass("BaseHoliday", PATH_HOME . "engine/classes/model/om/BaseHoliday.php");
//Bootstrap::registerClass("BaseHolidayPeer", PATH_HOME . "engine/classes/model/om/BaseHolidayPeer.php");
//Bootstrap::registerClass("BaseTask", PATH_HOME . "engine/classes/model/om/BaseTask.php");
//Bootstrap::registerClass("BaseTaskPeer", PATH_HOME . "engine/classes/model/om/BaseTaskPeer.php");
//Bootstrap::registerClass("HolidayPeer", PATH_HOME . "engine/classes/model/HolidayPeer.php");
//Bootstrap::registerClass("Holiday", PATH_HOME . "engine/classes/model/Holiday.php");
//Bootstrap::registerClass("Task", PATH_HOME . "engine/classes/model/Task.php");
//Bootstrap::registerClass("TaskPeer", PATH_HOME . "engine/classes/model/TaskPeer.php");
//Bootstrap::registerClass("dates", PATH_HOME . "engine/classes/class.dates.php");
//Bootstrap::registerClass("calendar", PATH_HOME . "engine/classes/class.calendar.php");
//Bootstrap::registerClass("AppDelegation", PATH_HOME . "engine/classes/model/AppDelegation.php");
//Bootstrap::registerClass("BaseAppDelegationPeer", PATH_HOME . "engine/classes/model/om/BaseAppDelegationPeer.php");
//Bootstrap::registerClass("AppDelegationPeer", PATH_HOME . "engine/classes/model/AppDelegationPeer.php");
//Bootstrap::registerClass("BaseAppDelay", PATH_HOME . "engine/classes/model/om/BaseAppDelay.php");
//Bootstrap::registerClass("AppDelayPeer", PATH_HOME . "engine/classes/model/AppDelayPeer.php");
//Bootstrap::registerClass("AppDelay", PATH_HOME . "engine/classes/model/AppDelay.php");
//Bootstrap::registerClass("BaseAdditionalTables", PATH_HOME . "engine/classes/model/om/BaseAdditionalTables.php");
//Bootstrap::registerClass("AdditionalTables", PATH_HOME . "engine/classes/model/AdditionalTables.php");
//Bootstrap::registerClass("BaseAppCacheView", PATH_HOME . "engine/classes/model/om/BaseAppCacheView.php");
//Bootstrap::registerClass("AppCacheView", PATH_HOME . "engine/classes/model/AppCacheView.php");
//Bootstrap::registerClass("BaseAppCacheViewPeer", PATH_HOME . "engine/classes/model/om/BaseAppCacheViewPeer.php");
//Bootstrap::registerClass("AppCacheViewPeer", PATH_HOME . "engine/classes/model/AppCacheViewPeer.php");
//
//Bootstrap::registerClass("BaseAppTimeoutActionExecuted", PATH_HOME . "engine/classes/model/om/BaseAppTimeoutActionExecuted.php");
//Bootstrap::registerClass("AppTimeoutActionExecuted", PATH_HOME . "engine/classes/model/AppTimeoutActionExecuted.php");
//Bootstrap::registerClass("BaseAppTimeoutActionExecutedPeer", PATH_HOME . "engine/classes/model/om/BaseAppTimeoutActionExecutedPeer.php");
//Bootstrap::registerClass("AppTimeoutActionExecutedPeer", PATH_HOME . "engine/classes/model/AppTimeoutActionExecutedPeer.php");
//
//Bootstrap::registerClass("BaseInputDocument", PATH_HOME . "engine/classes/model/om/BaseInputDocument.php");
//Bootstrap::registerClass("InputDocument", PATH_HOME . "engine/classes/model/InputDocument.php");
//Bootstrap::registerClass("BaseAppDocument", PATH_HOME . "engine/classes/model/om/BaseAppDocument.php");
//Bootstrap::registerClass("AppDocument", PATH_HOME . "engine/classes/model/AppDocument.php");
//Bootstrap::registerClass("AppDocumentPeer", PATH_HOME . "engine/classes/model/AppDocumentPeer.php");
//
//Bootstrap::registerClass("BaseAppEvent", PATH_HOME . "engine/classes/model/om/BaseAppEvent.php");
//Bootstrap::registerClass("AppEvent", PATH_HOME . "engine/classes/model/AppEvent.php");
//Bootstrap::registerClass("AppEventPeer", PATH_HOME . "engine/classes/model/AppEventPeer.php");
//
//Bootstrap::registerClass("BaseAppHistory", PATH_HOME . "engine/classes/model/om/BaseAppHistory.php");
//Bootstrap::registerClass("AppHistory", PATH_HOME . "engine/classes/model/AppHistory.php");
//Bootstrap::registerClass("AppHistoryPeer", PATH_HOME . "engine/classes/model/AppHistoryPeer.php");
//
//Bootstrap::registerClass("BaseAppFolder", PATH_HOME . "engine/classes/model/om/BaseAppFolder.php");
//Bootstrap::registerClass("AppFolder", PATH_HOME . "engine/classes/model/AppFolder.php");
//Bootstrap::registerClass("AppFolderPeer", PATH_HOME . "engine/classes/model/AppFolderPeer.php");
//
//Bootstrap::registerClass("BaseAppMessage", PATH_HOME . "engine/classes/model/om/BaseAppMessage.php");
//Bootstrap::registerClass("AppMessage", PATH_HOME . "engine/classes/model/AppMessage.php");
//
//Bootstrap::registerClass("BaseAppMessagePeer", PATH_HOME . "engine/classes/model/om/BaseAppMessagePeer.php");
//Bootstrap::registerClass("AppMessagePeer", PATH_HOME . "engine/classes/model/AppMessagePeer.php");
//
//Bootstrap::registerClass("BaseAppNotesPeer", PATH_HOME . "engine/classes/model/om/BaseAppNotesPeer.php");
//Bootstrap::registerClass("AppNotesPeer", PATH_HOME . "engine/classes/model/AppNotesPeer.php");
//
//Bootstrap::registerClass("BaseAppNotes", PATH_HOME . "engine/classes/model/om/BaseAppNotes.php");
//Bootstrap::registerClass("AppNotes", PATH_HOME . "engine/classes/model/AppNotes.php");
//
//Bootstrap::registerClass("BaseAppOwner", PATH_HOME . "engine/classes/model/om/BaseAppOwner.php");
//Bootstrap::registerClass("AppOwner", PATH_HOME . "engine/classes/model/AppOwner.php");
//Bootstrap::registerClass("AppOwnerPeer", PATH_HOME . "engine/classes/model/AppOwnerPeer.php");
//
//Bootstrap::registerClass("BaseAppSolrQueue", PATH_HOME . "engine/classes/model/om/BaseAppSolrQueue.php");
//Bootstrap::registerClass("Entity_AppSolrQueue", PATH_HOME . "engine/classes/entities/AppSolrQueue.php");
//Bootstrap::registerClass("AppSolrQueue", PATH_HOME . "engine/classes/model/AppSolrQueue.php");
//Bootstrap::registerClass("AppSolrQueuePeer", PATH_HOME . "engine/classes/model/AppSolrQueuePeer.php");
//
//Bootstrap::registerClass("BaseAppThread", PATH_HOME . "engine/classes/model/om/BaseAppThread.php");
//Bootstrap::registerClass("AppThread", PATH_HOME . "engine/classes/model/AppThread.php");
//Bootstrap::registerClass("AppThreadPeer", PATH_HOME . "engine/classes/model/AppThreadPeer.php");
//
//Bootstrap::registerClass("BaseCaseScheduler", PATH_HOME . "engine/classes/model/om/BaseCaseScheduler.php");
//Bootstrap::registerClass("CaseScheduler", PATH_HOME . "engine/classes/model/CaseScheduler.php");
//
//Bootstrap::registerClass("BaseCaseSchedulerPeer",PATH_HOME . "engine/classes/model/om/BaseCaseSchedulerPeer.php");
//Bootstrap::registerClass("CaseSchedulerPeer", PATH_HOME . "engine/classes/model/CaseSchedulerPeer.php");
//
//Bootstrap::registerClass("BaseCaseTracker", PATH_HOME . "engine/classes/model/om/BaseCaseTracker.php");
//Bootstrap::registerClass("CaseTracker", PATH_HOME . "engine/classes/model/CaseTracker.php");
//
//Bootstrap::registerClass("BaseCaseTrackerPeer", PATH_HOME . "engine/classes/model/om/BaseCaseTrackerPeer.php");
//Bootstrap::registerClass("CaseTrackerPeer", PATH_HOME . "engine/classes/model/CaseTrackerPeer.php");
//
//Bootstrap::registerClass("BaseCaseTrackerObject",PATH_HOME . "engine/classes/model/om/BaseCaseTrackerObject.php");
//Bootstrap::registerClass("CaseTrackerObject", PATH_HOME . "engine/classes/model/CaseTrackerObject.php");
//
//Bootstrap::registerClass("BaseCaseTrackerObjectPeer",PATH_HOME . "engine/classes/model/om/BaseCaseTrackerObjectPeer.php");
//Bootstrap::registerClass("CaseTrackerObjectPeer", PATH_HOME . "engine/classes/model/CaseTrackerObjectPeer.php");
Bootstrap::registerClass("BaseDbSource", PATH_HOME . "engine/classes/model/om/BaseDbSource.php");
Bootstrap::registerClass("DbSource", PATH_HOME . "engine/classes/model/DbSource.php");
//Bootstrap::registerClass("XMLDB", PATH_HOME . "engine/classes/class.xmlDb.php");
//Bootstrap::registerClass("dynaFormHandler", PATH_GULLIVER . "class.dynaformhandler.php");
//Bootstrap::registerClass("DynaFormField", PATH_HOME . "engine/classes/class.dynaFormField.php");
//Bootstrap::registerClass("BaseDynaform", PATH_HOME . "engine/classes/model/om/BaseDynaform.php");
//Bootstrap::registerClass("Dynaform", PATH_HOME . "engine/classes/model/Dynaform.php");
//Bootstrap::registerClass("DynaformPeer", PATH_HOME . "engine/classes/model/DynaformPeer.php");
//
//Bootstrap::registerClass("BaseEvent", PATH_HOME . "engine/classes/model/om/BaseEvent.php");
//Bootstrap::registerClass("Event", PATH_HOME . "engine/classes/model/Event.php");
//
//Bootstrap::registerClass("BaseEventPeer", PATH_HOME . "engine/classes/model/om/BaseEventPeer.php");
//Bootstrap::registerClass("EventPeer", PATH_HOME . "engine/classes/model/EventPeer.php");
//
//Bootstrap::registerClass("BaseFields", PATH_HOME . "engine/classes/model/om/BaseFields.php");
//Bootstrap::registerClass("Fields", PATH_HOME . "engine/classes/model/Fields.php");
//
//Bootstrap::registerClass("BaseGateway", PATH_HOME . "engine/classes/model/om/BaseGateway.php");
//Bootstrap::registerClass("Gateway", PATH_HOME . "engine/classes/model/Gateway.php");
Bootstrap::registerClass("BaseGroupUser", PATH_HOME . "engine/classes/model/om/BaseGroupUser.php");
Bootstrap::registerClass("Groupwf", PATH_HOME . "engine/classes/model/Groupwf.php");
Bootstrap::registerClass("GroupUser", PATH_HOME . "engine/classes/model/GroupUser.php");
Bootstrap::registerClass("BaseGroupUserPeer", PATH_HOME . "engine/classes/model/om/BaseGroupUserPeer.php");
Bootstrap::registerClass("GroupUserPeer", PATH_HOME . "engine/classes/model/GroupUserPeer.php");
Bootstrap::registerClass("BaseGroupwfPeer", PATH_HOME . "engine/classes/model/om/BaseGroupwfPeer.php");
Bootstrap::registerClass("GroupwfPeer", PATH_HOME . "engine/classes/model/GroupwfPeer.php");
//Bootstrap::registerClass("BaseInputDocumentPeer", PATH_HOME . "engine/classes/model/om/BaseInputDocumentPeer.php");
//Bootstrap::registerClass("InputDocumentPeer", PATH_HOME . "engine/classes/model/InputDocumentPeer.php");
Bootstrap::registerClass("BaseIsoCountry", PATH_HOME . "engine/classes/model/om/BaseIsoCountry.php");
Bootstrap::registerClass("IsoCountry", PATH_HOME . "engine/classes/model/IsoCountry.php");
Bootstrap::registerClass("BaseTranslation", PATH_HOME . "engine/classes/model/om/BaseTranslation.php");
Bootstrap::registerClass("Translation", PATH_HOME . "engine/classes/model/Translation.php");
//Bootstrap::registerClass("BaseLogCasesScheduler", PATH_HOME . "engine/classes/model/om/BaseLogCasesScheduler.php");
//Bootstrap::registerClass("LogCasesScheduler", PATH_HOME . "engine/classes/model/LogCasesScheduler.php");
//
//Bootstrap::registerClass("BaseObjectPermission",PATH_HOME . "engine/classes/model/om/BaseObjectPermission.php");
//Bootstrap::registerClass("ObjectPermission", PATH_HOME . "engine/classes/model/ObjectPermission.php");
//Bootstrap::registerClass("ObjectPermissionPeer",PATH_HOME . "engine/classes/model/ObjectPermissionPeer.php");
//
//Bootstrap::registerClass("BaseOutputDocument", PATH_HOME . "engine/classes/model/om/BaseOutputDocument.php");
//Bootstrap::registerClass("OutputDocument", PATH_HOME . "engine/classes/model/OutputDocument.php");
//Bootstrap::registerClass("OutputDocumentPeer", PATH_HOME . "engine/classes/model/OutputDocumentPeer.php");
//
//Bootstrap::registerClass("BaseProcess", PATH_HOME . "engine/classes/model/om/BaseProcess.php");
//Bootstrap::registerClass("BaseProcessCategory", PATH_HOME . "engine/classes/model/om/BaseProcessCategory.php");
//Bootstrap::registerClass("ProcessCategory", PATH_HOME . "engine/classes/model/ProcessCategory.php");
//Bootstrap::registerClass("ProcessCategoryPeer", PATH_HOME . "engine/classes/model/ProcessCategoryPeer.php");
//Bootstrap::registerClass("ProcessPeer", PATH_HOME . "engine/classes/model/ProcessPeer.php");
//Bootstrap::registerClass("Process", PATH_HOME . "engine/classes/model/Process.php");
//
//Bootstrap::registerClass("BaseProcessUser", PATH_HOME . "engine/classes/model/om/BaseProcessUser.php");
//Bootstrap::registerClass("ProcessUser", PATH_HOME . "engine/classes/model/ProcessUser.php");
//
//Bootstrap::registerClass("BaseProcessUserPeer", PATH_HOME . "engine/classes/model/om/BaseProcessUserPeer.php");
//Bootstrap::registerClass("ProcessUserPeer", PATH_HOME . "engine/classes/model/ProcessUserPeer.php");
//
//Bootstrap::registerClass("BaseReportTable", PATH_HOME . "engine/classes/model/om/BaseReportTable.php");
//Bootstrap::registerClass("ReportTable", PATH_HOME . "engine/classes/model/ReportTable.php");
//Bootstrap::registerClass("ReportTablePeer", PATH_HOME . "engine/classes/model/ReportTablePeer.php");
//
//Bootstrap::registerClass("BaseReportVar", PATH_HOME . "engine/classes/model/om/BaseReportVar.php");
//Bootstrap::registerClass("ReportVar", PATH_HOME . "engine/classes/model/ReportVar.php");
//
//Bootstrap::registerClass("BaseReportVarPeer", PATH_HOME . "engine/classes/model/om/BaseReportVarPeer.php");
//Bootstrap::registerClass("ReportVarPeer", PATH_HOME . "engine/classes/model/ReportVarPeer.php");
//
//Bootstrap::registerClass("BaseRoute", PATH_HOME . "engine/classes/model/om/BaseRoute.php");
//Bootstrap::registerClass("Route", PATH_HOME . "engine/classes/model/Route.php");
//Bootstrap::registerClass("RoutePeer", PATH_HOME . "engine/classes/model/RoutePeer.php");
//
//Bootstrap::registerClass("BaseStep", PATH_HOME . "engine/classes/model/om/BaseStep.php");
//Bootstrap::registerClass("Step", PATH_HOME . "engine/classes/model/Step.php");
//Bootstrap::registerClass("StepPeer", PATH_HOME . "engine/classes/model/StepPeer.php");
//
//Bootstrap::registerClass("BaseStepSupervisor", PATH_HOME . "engine/classes/model/om/BaseStepSupervisor.php");
//Bootstrap::registerClass("StepSupervisor", PATH_HOME . "engine/classes/model/StepSupervisor.php");
//
//Bootstrap::registerClass("BaseStepSupervisorPeer", PATH_HOME . "engine/classes/model/om/BaseStepSupervisorPeer.php");
//Bootstrap::registerClass("StepSupervisorPeer", PATH_HOME . "engine/classes/model/StepSupervisorPeer.php");
//
//Bootstrap::registerClass("BaseStepTrigger", PATH_HOME . "engine/classes/model/om/BaseStepTrigger.php");
//Bootstrap::registerClass("StepTrigger", PATH_HOME . "engine/classes/model/StepTrigger.php");
//Bootstrap::registerClass("StepTriggerPeer", PATH_HOME . "engine/classes/model/StepTriggerPeer.php");
//
//Bootstrap::registerClass("SolrRequestData", PATH_HOME . "engine/classes/entities/SolrRequestData.php");
//
//Bootstrap::registerClass("SolrUpdateDocument", PATH_HOME . "engine/classes/entities/SolrUpdateDocument.php");
//
//Bootstrap::registerClass("BaseSwimlanesElements",PATH_HOME . "engine/classes/model/om/BaseSwimlanesElements.php");
//Bootstrap::registerClass("SwimlanesElements", PATH_HOME . "engine/classes/model/SwimlanesElements.php");
//Bootstrap::registerClass("BaseSwimlanesElementsPeer", PATH_HOME ."engine/classes/model/om/BaseSwimlanesElementsPeer.php");
//Bootstrap::registerClass("SwimlanesElementsPeer",PATH_HOME . "engine/classes/model/SwimlanesElementsPeer.php");
//
//Bootstrap::registerClass("BaseSubApplication", PATH_HOME . "engine/classes/model/om/BaseSubApplication.php");
//Bootstrap::registerClass("SubApplication", PATH_HOME . "engine/classes/model/SubApplication.php");
//Bootstrap::registerClass("SubApplicationPeer", PATH_HOME . "engine/classes/model/SubApplicationPeer.php");
//
//Bootstrap::registerClass("BaseSubProcess", PATH_HOME . "engine/classes/model/om/BaseSubProcess.php");
//Bootstrap::registerClass("SubProcess", PATH_HOME . "engine/classes/model/SubProcess.php");
//
//Bootstrap::registerClass("BaseSubProcessPeer", PATH_HOME . "engine/classes/model/om/BaseSubProcessPeer.php");
//Bootstrap::registerClass("SubProcessPeer", PATH_HOME . "engine/classes/model/SubProcessPeer.php");
//
//Bootstrap::registerClass("BaseTask", PATH_HOME . "engine/classes/model/om/BaseTask.php");
//Bootstrap::registerClass("Task", PATH_HOME . "engine/classes/model/Task.php");
//
//Bootstrap::registerClass("BaseTaskUser", PATH_HOME . "engine/classes/model/om/BaseTaskUser.php");
//Bootstrap::registerClass("TaskUserPeer", PATH_HOME . "engine/classes/model/TaskUserPeer.php");
//Bootstrap::registerClass("TaskUser", PATH_HOME . "engine/classes/model/TaskUser.php");
//
//Bootstrap::registerClass("BaseTriggers", PATH_HOME . "engine/classes/model/om/BaseTriggers.php");
//Bootstrap::registerClass("Triggers", PATH_HOME . "engine/classes/model/Triggers.php");
//Bootstrap::registerClass("BaseTriggersPeer", PATH_HOME . "engine/classes/model/om/BaseTriggersPeer.php");
//Bootstrap::registerClass("TriggersPeer", PATH_HOME . "engine/classes/model/TriggersPeer.php");
Bootstrap::registerClass("IsoCountry", PATH_HOME . "engine/classes/model/IsoCountry.php");
Bootstrap::registerClass("BaseIsoSubdivision", PATH_HOME . "engine/classes/model/om/BaseIsoSubdivision.php");
Bootstrap::registerClass("IsoSubdivision", PATH_HOME . "engine/classes/model/IsoSubdivision.php");
Bootstrap::registerClass("BaseIsoLocation", PATH_HOME . "engine/classes/model/om/BaseIsoLocation.php");
Bootstrap::registerClass("IsoLocation", PATH_HOME . "engine/classes/model/IsoLocation.php");
Bootstrap::registerClass("Users", PATH_HOME . "engine/classes/model/Users.php");
Bootstrap::registerClass("UsersPeer", PATH_HOME . "engine/classes/model/UsersPeer.php");
Bootstrap::registerClass("BaseUsers", PATH_HOME . "engine/classes/model/om/BaseUsers.php");
Bootstrap::registerClass("AuthenticationSourcePeer", PATH_RBAC . "model" . PATH_SEP . "AuthenticationSourcePeer.php");
Bootstrap::registerClass("BaseAuthenticationSource", PATH_RBAC . "model" . PATH_SEP . "om" . PATH_SEP . "BaseAuthenticationSource.php");
Bootstrap::registerClass("AuthenticationSource", PATH_RBAC . "model" . PATH_SEP . "AuthenticationSource.php");
Bootstrap::registerClass("RolesPeer", PATH_RBAC . "model" . PATH_SEP . "RolesPeer.php");
Bootstrap::registerClass("BaseRoles", PATH_RBAC . "model" . PATH_SEP . "om" . PATH_SEP . "BaseRoles.php");
Bootstrap::registerClass("Roles", PATH_RBAC . "model" . PATH_SEP . "Roles.php");
//Bootstrap::registerClass("UsersRolesPeer", PATH_RBAC . "model" . PATH_SEP . "UsersRolesPeer.php");
//Bootstrap::registerClass("BaseUsersRoles", PATH_RBAC . "model" . PATH_SEP . "om" . PATH_SEP . "BaseUsersRoles.php");
//Bootstrap::registerClass("UsersRoles", PATH_RBAC . "model" . PATH_SEP . "UsersRoles.php");
require_once(PATH_RBAC . "model" . PATH_SEP . "UsersRolesPeer.php");
require_once(PATH_RBAC . "model" . PATH_SEP . "om" . PATH_SEP . "BaseUsersRoles.php");
require_once(PATH_RBAC . "model" . PATH_SEP . "UsersRoles.php");
$arrayClass = array("Configuration", "Language");
if (file_exists(PATH_CORE . "classes" . PATH_SEP . "model" . PATH_SEP . "AddonsManager.php")) {
$arrayClass[] = "AddonsManager";
}
foreach ($arrayClass as $value) {
Bootstrap::registerClass("Base" . $value, PATH_HOME . "engine" . PATH_SEP . "classes" . PATH_SEP . "model" . PATH_SEP . "om" . PATH_SEP . "Base" . $value . ".php");
Bootstrap::registerClass($value, PATH_HOME . "engine" . PATH_SEP . "classes" . PATH_SEP . "model" . PATH_SEP . $value . ".php");
Bootstrap::registerClass("Base" . $value . "Peer", PATH_HOME . "engine" . PATH_SEP . "classes" . PATH_SEP . "model" . PATH_SEP . "om" . PATH_SEP . "Base" . $value . "Peer.php");
Bootstrap::registerClass($value . "Peer", PATH_HOME . "engine" . PATH_SEP . "classes" . PATH_SEP . "model" . PATH_SEP . $value . "Peer.php");
}
//Bootstrap::registerClass("Xml_Node", PATH_GULLIVER . "class.xmlDocument.php");
//
//Bootstrap::registerClass("wsResponse", PATH_HOME . "engine/classes/class.wsResponse.php");
//
//G::LoadClass("dates");
Bootstrap::registerClass("groups", PATH_CLASSES . "class.groups.php");
$workflow = $argv[2];
if (is_dir(PATH_DB . $workflow) && file_exists(PATH_DB . $workflow . PATH_SEP . "db.php")) {
define("SYS_SYS", $workflow);
include_once(PATH_HOME . "engine" . PATH_SEP . "config" . PATH_SEP . "paths_installed.php");
include_once(PATH_HOME . "engine" . PATH_SEP . "config" . PATH_SEP . "paths.php");
//PM Paths DATA
define("PATH_DATA_SITE", PATH_DATA . "sites/" . SYS_SYS . "/");
define("PATH_DOCUMENT", PATH_DATA_SITE . "files/");
define("PATH_DATA_MAILTEMPLATES", PATH_DATA_SITE . "mailTemplates/");
define("PATH_DATA_PUBLIC", PATH_DATA_SITE . "public/");
define("PATH_DATA_REPORTS", PATH_DATA_SITE . "reports/");
define("PATH_DYNAFORM", PATH_DATA_SITE . "xmlForms/");
define("PATH_IMAGES_ENVIRONMENT_FILES", PATH_DATA_SITE . "usersFiles" . PATH_SEP);
define("PATH_IMAGES_ENVIRONMENT_USERS", PATH_DATA_SITE . "usersPhotographies" . PATH_SEP);
if (is_file(PATH_DATA_SITE.PATH_SEP . ".server_info")) {
$SERVER_INFO = file_get_contents(PATH_DATA_SITE.PATH_SEP.".server_info");
$SERVER_INFO = unserialize($SERVER_INFO);
define("SERVER_NAME", $SERVER_INFO ["SERVER_NAME"]);
define("SERVER_PORT", $SERVER_INFO ["SERVER_PORT"]);
} else {
eprintln("WARNING! No server info found!", "red");
}
//DB
$phpCode = "";
$fileDb = fopen(PATH_DB . $workflow . PATH_SEP . "db.php", "r");
if ($fileDb) {
while (!feof($fileDb)) {
$buffer = fgets($fileDb, 4096); //Read a line
$phpCode .= preg_replace("/define\s*\(\s*[\x22\x27](.*)[\x22\x27]\s*,\s*(\x22.*\x22|\x27.*\x27)\s*\)\s*;/i", "\$$1 = $2;", $buffer);
}
fclose($fileDb);
}
$phpCode = str_replace(array("<?php", "<?", "?>"), array("", "", ""), $phpCode);
eval($phpCode);
$dsn = $DB_ADAPTER . "://" . $DB_USER . ":" . $DB_PASS . "@" . $DB_HOST . "/" . $DB_NAME;
$dsnRbac = $DB_ADAPTER . "://" . $DB_RBAC_USER . ":" . $DB_RBAC_PASS . "@" . $DB_RBAC_HOST . "/" . $DB_RBAC_NAME;
$dsnRp = $DB_ADAPTER . "://" . $DB_REPORT_USER . ":" . $DB_REPORT_PASS . "@" . $DB_REPORT_HOST . "/" . $DB_REPORT_NAME;
switch ($DB_ADAPTER) {
case "mysql":
$dsn .= "?encoding=utf8";
$dsnRbac .= "?encoding=utf8";
break;
case "mssql":
//$dsn .= "?sendStringAsUnicode=false";
//$dsnRbac .= "?sendStringAsUnicode=false";
break;
default:
break;
}
$pro = array();
$pro["datasources"]["workflow"]["connection"] = $dsn;
$pro["datasources"]["workflow"]["adapter"] = $DB_ADAPTER;
$pro["datasources"]["rbac"]["connection"] = $dsnRbac;
$pro["datasources"]["rbac"]["adapter"] = $DB_ADAPTER;
$pro["datasources"]["rp"]["connection"] = $dsnRp;
$pro["datasources"]["rp"]["adapter"] = $DB_ADAPTER;
//$pro["datasources"]["dbarray"]["connection"] = "dbarray://user:pass@localhost/pm_os";
//$pro["datasources"]["dbarray"]["adapter"] = "dbarray";
$oFile = fopen(PATH_CORE . "config" . PATH_SEP . "_databases_.php", "w");
fwrite($oFile, "<?php global \$pro; return \$pro; ?>");
fclose($oFile);
Propel::init(PATH_CORE . "config" . PATH_SEP . "_databases_.php");
//Creole::registerDriver("dbarray", "creole.contrib.DBArrayConnection");
//Enable RBAC
Bootstrap::LoadSystem("rbac");
$rbac = &RBAC::getSingleton(PATH_DATA, session_id());
$rbac->sSystem = "PROCESSMAKER";
eprintln("Processing workspace: " . $workflow, "green");
try {
require_once(PATH_HOME . "engine" . PATH_SEP . "classes" . PATH_SEP . "class.ldapAdvanced.php");
require_once(PATH_HOME . "engine" . PATH_SEP . "methods" . PATH_SEP . "services" . PATH_SEP . "ldapadvanced.php");
$obj = new ldapadvancedClassCron();
$obj->executeCron((bool)($argv[1]));
} catch (Exception $e) {
echo $e->getMessage() . "\n";
eprintln("Problem in workspace: " . $workflow . " it was omitted.", "red");
}
eprintln();
}
if (file_exists(PATH_CORE . "config" . PATH_SEP . "_databases_.php")) {
unlink(PATH_CORE . "config" . PATH_SEP . "_databases_.php");
}
} catch (Exception $e) {
echo $e->getMessage() . "\n";
}

File diff suppressed because it is too large Load Diff

View File

@@ -197,6 +197,40 @@ class PMLicensedFeatures
"type" => "features",
"url" => "",
"version" => ""
),
10 => array(
"description" => "This plugin will synchronize ProcessMaker with an LDAP or Active Directory server for user authentication.",
"enabled" => false,
"id" => "ldapAdvanced",
"latest_version" => "",
"log" => null,
"name" => "ldapAdvanced",
"nick" => "ldapAdvanced",
"progress" => 0,
"publisher" => "Colosa",
"release_type" => "localRegistry",
"status" => "ready",
"store" => "00000000000000000000000000010010",
"type" => "features",
"url" => "",
"version" => ""
),
11 => array(
"description" => "SSO with an LDAP provider.",
"enabled" => false,
"id" => "windowsSSO",
"latest_version" => "",
"log" => null,
"name" => "windowsSSO",
"nick" => "windowsSSO",
"progress" => 0,
"publisher" => "Colosa",
"release_type" => "localRegistry",
"status" => "ready",
"store" => "00000000000000000000000000010011",
"type" => "features",
"url" => "",
"version" => ""
)
);

View File

@@ -0,0 +1,61 @@
<?php
/**
* authSourcesSynchronize.php
*
* ProcessMaker Open Source Edition
* Copyright (C) 2004 - 2011 Colosa Inc.23
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program 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 Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* For more information, contact Colosa Inc, 2566 Le Jeune Rd.,
* Coral Gables, FL, 33134, USA, or email info@colosa.com.
*
**/
global $RBAC;
switch ($RBAC->userCanAccess("PM_USERS")) {
case - 2:
G::SendTemporalMessage("ID_USER_HAVENT_RIGHTS_SYSTEM", "error", "labels");
G::header("location: ../login/login");
die;
break;
case - 1:
G::SendTemporalMessage("ID_USER_HAVENT_RIGHTS_PAGE", "error", "labels");
G::header("location: ../login/login");
die;
break;
case -3:
G::SendTemporalMessage("ID_USER_HAVENT_RIGHTS_PAGE", "error", "labels");
G::header("location: ../login/login");
die;
break;
}
if (!isset($_REQUEST["tab"])) {
$_REQUEST["tab"] = "synchronizeDepartments";
}
$authenticationSource = array("AUTH_SOURCE_UID" => $_REQUEST["authUid"], "CURRENT_TAB" => ($_REQUEST["tab"] == "synchronizeDepartments" ? 0 : 1));
$oHeadPublisher =& headPublisher::getSingleton();
$oHeadPublisher->addExtJsScript("authSources/authSourcesSynchronize", false);
$oHeadPublisher->addContent("authSources/authSourcesSynchronize");
$oHeadPublisher->assign("AUTHENTICATION_SOURCE", $authenticationSource);
global $G_PUBLISH;
$G_PUBLISH = new Publisher();
G::RenderPage("publish", "extJs");

View File

@@ -0,0 +1,472 @@
<?php
/**
* authSourcesSynchronizeAjax.php
*
* ProcessMaker Open Source Edition
* Copyright (C) 2004 - 2011 Colosa Inc.23
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program 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 Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* For more information, contact Colosa Inc, 2566 Le Jeune Rd.,
* Coral Gables, FL, 33134, USA, or email info@colosa.com.
*
**/
class treeNode extends stdclass
{
public $text = "";
public $cls = "";
public $leaf = false;
public $checked = false;
public $children = array();
public $id = "";
}
try {
require_once ("classes" . PATH_SEP . "model" . PATH_SEP . "Department.php");
G::LoadThirdParty("pear" . PATH_SEP . "json", "class.json");
$json = new Services_JSON();
header("Content-Type: application/json;");
switch ($_REQUEST["m"]) {
case "loadDepartments":
global $ldapAdvanced;
global $departments;
global $terminatedOu;
global $baseDN;
$ldapAdvanced = getLDAPAdvanceInstance($_REQUEST["authUid"]);
$RBAC =& RBAC::getSingleton();
$authenticationSource = $RBAC->authSourcesObj->load($_REQUEST["authUid"]);
$baseDN = $authenticationSource["AUTH_SOURCE_BASE_DN"];
$departments = $ldapAdvanced->searchDepartments();
$terminatedOu = $ldapAdvanced->getTerminatedOu();
$nodes = lookForChildrenDeps("");
die($json->encode($nodes));
break;
case "saveDepartments":
$depsToCheck = explode("|", $_REQUEST["departmentsDN"]);
$depsToCheck = array_map("urldecode", $depsToCheck);
$depsToUncheck = getDepartmentsToUncheck($depsToCheck);
$RBAC =& RBAC::getSingleton();
$authenticationSource = $RBAC->authSourcesObj->load($_REQUEST["authUid"]);
$ldapAdvanced = getLDAPAdvanceInstance($_REQUEST["authUid"]);
foreach ($depsToCheck as $departmentDN) {
$baseDN = str_replace($authenticationSource["AUTH_SOURCE_BASE_DN"], "", $departmentDN);
$ous = custom_ldap_explode_dn($departmentDN);
$currentDep = array_shift($ous);
$parentDN = implode(",", $ous);
//$ous = custom_ldap_explode_dn($baseDN);
//$currentDep = array_shift($ous);
foreach ($ous as $key => $val) {
$aux = explode("=", $val);
if (isset($aux[0]) && strtolower(trim($aux[0])) != "ou") {
unset($ous[$key]);
}
}
if ($currentDep == "") {
$depTitle = "ROOT " . $authenticationSource["AUTH_SOURCE_BASE_DN"];
} else {
$depAux = explode("=", $currentDep);
$depTitle = trim($depAux[1]);
}
$departmentUID = $ldapAdvanced->getDepUidIfExistsDN($departmentDN);
if ($departmentUID == "") {
if (count($ous) == 0) {
$parentUid = "";
} else {
$parentUid = $ldapAdvanced->getDepUidIfExistsDN($parentDN);
if ($parentUid == "") {
$response = new stdclass();
$response->status = "ERROR";
$response->message = "Parent departments are needed before create this sub department " . $parentDN;
die($json->encode($response));
}
}
$department = new department();
$row["DEP_TITLE"] = stripslashes($depTitle);
$row["DEP_PARENT"] = $parentUid;
$row["DEP_LDAP_DN"] = $departmentDN;
$row["DEP_REF_CODE"] = "";
$departmentUID = $department->create($row);
if ($departmentUID == false) {
$response = new stdclass();
$response->status = "ERROR";
$response->message = "Error creating department";
die($json->encode($response));
}
}
}
if (count($depsToUncheck) > 0) {
foreach ($depsToUncheck as $departmentDN) {
$departmentUID = $ldapAdvanced->getDepUidIfExistsDN($departmentDN);
if ($departmentUID != "") {
$department = new department();
$departmentInfo = $department->Load($departmentUID);
$arrayAux1 = custom_ldap_explode_dn($departmentDN);
foreach ($arrayAux1 as $index => $value) {
$arrayAux2 = explode("=", $value);
if (isset($arrayAux2[0]) && strtolower(trim($arrayAux2[0])) == "ou") {
unset($arrayAux1[$index]);
}
}
$departmentBaseDn = implode(",", $arrayAux1);
if (strtolower($departmentBaseDn) == strtolower($authenticationSource["AUTH_SOURCE_BASE_DN"])) {
$departmentInfo["DEP_LDAP_DN"] = "";
$department->update($departmentInfo);
if (!isset($authenticationSource["AUTH_SOURCE_DATA"]["DEPARTMENTS_TO_UNASSIGN"])) {
$authenticationSource["AUTH_SOURCE_DATA"]["DEPARTMENTS_TO_UNASSIGN"] = array();
}
$authenticationSource["AUTH_SOURCE_DATA"]["DEPARTMENTS_TO_UNASSIGN"][] = $departmentUID;
}
}
}
$RBAC->authSourcesObj->update($authenticationSource);
}
$response = new stdclass();
$response->status = "OK";
die($json->encode($response));
break;
case "loadGroups":
global $ldapAdvanced;
global $groups;
$ldapAdvanced = getLDAPAdvanceInstance($_REQUEST["authUid"]);
$groups = $ldapAdvanced->searchGroups();
$nodes = lookForChildrenGroups();
die($json->encode($nodes));
break;
case "saveGroups":
$groupsToCheck = explode("|", $_REQUEST["groupsDN"]);
$groupsToCheck = array_map("urldecode", $groupsToCheck);
$groupsToUncheck = getGroupsToUncheck($groupsToCheck);
$RBAC =& RBAC::getSingleton();
$authenticationSource = $RBAC->authSourcesObj->load($_REQUEST["authUid"]);
$ldapAdvanced = getLDAPAdvanceInstance($_REQUEST["authUid"]);
foreach ($groupsToCheck as $groupDN) {
//$baseDN = str_replace($authenticationSource["AUTH_SOURCE_BASE_DN"], "", $groupDN);
$ous = custom_ldap_explode_dn($groupDN);
$currentGroup = array_shift($ous);
//$parentDN = implode(",", $ous);
//$ous = custom_ldap_explode_dn($baseDN);
//$currentGroup = array_shift($ous);
foreach ($ous as $key => $val) {
$aux = explode("=", $val);
if (isset($aux[0]) && strtolower(trim($aux[0]) != "ou")) {
unset($ous[$key]);
}
}
$groupAux = explode("=", $currentGroup);
$groupTitle = isset($groupAux[1]) ? trim($groupAux[1]) : "";
$groupUID = $ldapAdvanced->getGrpUidIfExistsDN($groupDN);
if ($groupUID == "") {
$group = new Groupwf();
$row["GRP_TITLE"] = stripslashes($groupTitle);
$row["GRP_LDAP_DN"] = $groupDN;
$groupUID = $group->create($row);
if ($groupUID == false) {
$response = new stdclass();
$response->status = "ERROR";
$response->message = "Error creating group";
die($json->encode($response));
}
}
}
if (count($groupsToUncheck) > 0) {
foreach ($groupsToUncheck as $groupDN) {
$groupUID = $ldapAdvanced->getGrpUidIfExistsDN($groupDN);
if ($groupUID != "") {
$group = new Groupwf();
$groupInfo = $group->Load($groupUID);
$groupInfo["GRP_LDAP_DN"] = "";
$group->update($groupInfo);
if (!isset($authenticationSource["AUTH_SOURCE_DATA"]["GROUPS_TO_UNASSIGN"])) {
$authenticationSource["AUTH_SOURCE_DATA"]["GROUPS_TO_UNASSIGN"] = array();
}
$authenticationSource["AUTH_SOURCE_DATA"]["GROUPS_TO_UNASSIGN"][] = $groupUID;
}
}
$RBAC->authSourcesObj->update($authenticationSource);
}
$response = new stdclass();
$response->status = "OK";
die($json->encode($response));
break;
}
} catch (Exception $error) {
$response = new stdclass();
$response->status = "ERROR";
$response->message = $error->getMessage();
die($json->encode($response));
}
function getLDAPAdvanceInstance($authUid)
{
$RBAC = &RBAC::getSingleton();
$ldapAdvanced = new ldapAdvanced();
$ldapAdvanced->sAuthSource = $authUid;
$ldapAdvanced->sSystem = $RBAC->sSystem;
return $ldapAdvanced;
}
function getDepartments($parent)
{
global $departments;
global $terminatedOu;
global $baseDN;
$parentDepartments = $departments;
$childDepartments = $departments;
$currentDepartments = array();
foreach ($parentDepartments as $key => $val) {
if (strtolower($val["dn"]) != strtolower($parent)) {
if ((strtolower($val["parent"]) == strtolower($parent)) && (strtolower($val["ou"]) != strtolower($terminatedOu))) {
$node = array();
$node["DEP_UID"] = $val["ou"];
$node["DEP_TITLE"] = $val["ou"];
$node["DEP_USERS"] = $val["users"];
$node["DEP_DN"] = $val["dn"];
$node["HAS_CHILDREN"] = false;
$departments[$key]["hasChildren"] = false;
foreach ($childDepartments as $key2 => $val2) {
if (strtolower($val2["parent"]) == strtolower($val["dn"])) {
$node["HAS_CHILDREN"] = true;
$departments[$key]["hasChildren"] = true;
break;
}
}
$node["DEP_LAST"] = false;
$currentDepartments[] = $node;
}
}
}
if (isset($currentDepartments[count($currentDepartments) - 1])) {
$currentDepartments[count($currentDepartments) - 1]["DEP_LAST"] = true;
}
return $currentDepartments;
}
function lookForChildrenDeps($parent)
{
global $ldapAdvanced;
global $departments;
$allDepartments = getDepartments($parent);
$departmentsObjects = array();
$arrayDepartmentNumberOfUsersFromDb = $ldapAdvanced->departmentsGetNumberOfUsersFromDb();
foreach ($allDepartments as $department) {
$departmentObject = new treeNode();
$departmentObject->text = htmlentities($department["DEP_TITLE"], ENT_QUOTES, "UTF-8");
$departmentUid = $ldapAdvanced->getDepUidIfExistsDN($department["DEP_DN"]);
if ($departmentUid != "") {
$departmentObject->text .= " (" . ((isset($arrayDepartmentNumberOfUsersFromDb[$departmentUid]))? $arrayDepartmentNumberOfUsersFromDb[$departmentUid] : 0) . ")";
$departmentObject->checked = true;
} else {
$departmentObject->checked = false;
}
if ($department["HAS_CHILDREN"] == 1) {
$departmentObject->children = lookForChildrenDeps($department["DEP_DN"]);
}
$departmentObject->id = urlencode($department["DEP_DN"]);
$departmentsObjects[] = $departmentObject;
}
return $departmentsObjects;
}
function getDepartmentsWithDN()
{
$arrayDepartmentLdapDn = array();
$criteria = new Criteria("workflow");
$criteria->addSelectColumn(DepartmentPeer::DEP_LDAP_DN);
$criteria->add(DepartmentPeer::DEP_LDAP_DN, "", Criteria::NOT_EQUAL);
$criteria->add(DepartmentPeer::DEP_LDAP_DN, null, Criteria::ISNOTNULL);
$rsCriteria = DepartmentPeer::doSelectRS($criteria);
$rsCriteria->setFetchmode(ResultSet::FETCHMODE_ASSOC);
while ($rsCriteria->next()) {
$row = $rsCriteria->getRow();
$arrayDepartmentLdapDn[] = $row;
}
return $arrayDepartmentLdapDn;
}
function getDepartmentsToUncheck($depsToCheck)
{
$departmentsWithDN = getDepartmentsWithDN();
$depsToUncheck = array();
foreach ($departmentsWithDN as $departmentWithDN) {
$found = false;
foreach ($depsToCheck as $depToCheck) {
if ($departmentWithDN["DEP_LDAP_DN"] == $depToCheck) {
$found = true;
}
}
if (!$found) {
$depsToUncheck[] = $departmentWithDN["DEP_LDAP_DN"];
}
}
return $depsToUncheck;
}
function getGroups()
{
global $groups;
$currentGroups = array();
foreach ($groups as $key => $val) {
$node = array();
$node["GRP_UID"] = $val["cn"];
$node["GRP_TITLE"] = $val["cn"];
$node["GRP_USERS"] = $val["users"];
$node["GRP_DN"] = $val["dn"];
$currentGroups[] = $node;
}
return $currentGroups;
}
function lookForChildrenGroups()
{
global $ldapAdvanced;
global $groups;
$allGroups = getGroups();
$groupsObjects = array();
$arrayGroupNumberOfUsersFromDb = $ldapAdvanced->groupsGetNumberOfUsersFromDb();
foreach ($allGroups as $group) {
$groupObject = new treeNode();
$groupObject->text = htmlentities($group["GRP_TITLE"], ENT_QUOTES, "UTF-8");
$groupUid = $ldapAdvanced->getGrpUidIfExistsDN($group["GRP_DN"]);
if ($groupUid != "") {
$groupObject->text .= " (" . ((isset($arrayGroupNumberOfUsersFromDb[$groupUid]))? $arrayGroupNumberOfUsersFromDb[$groupUid] : 0) . ")";
$groupObject->checked = true;
} else {
$groupObject->checked = false;
}
$groupObject->id = urlencode($group["GRP_DN"]);
$groupsObjects[] = $groupObject;
}
return $groupsObjects;
}
function getGroupsWithDN()
{
$groupInstance = new Groupwf();
$allGroups = $groupInstance->getAll()->data;
$groupsWithDN = array();
foreach ($allGroups as $group) {
if ($group["GRP_LDAP_DN"] != "") {
$groupsWithDN[] = $group;
}
}
return $groupsWithDN;
}
function getGroupsToUncheck($groupsToCheck)
{
$groupsWithDN = getGroupsWithDN();
$groupsToUncheck = array();
foreach ($groupsWithDN as $groupWithDN) {
$found = false;
foreach ($groupsToCheck as $groupToCheck) {
if ($groupWithDN["GRP_LDAP_DN"] == $groupToCheck) {
$found = true;
}
}
if (!$found) {
$groupsToUncheck[] = $groupWithDN["GRP_LDAP_DN"];
}
}
return $groupsToUncheck;
}
function custom_ldap_explode_dn($dn)
{
$result = ldap_explode_dn($dn, 0);
unset($result["count"]);
foreach ($result as $key => $value) {
$result[$key] = addcslashes(preg_replace("/\\\([0-9A-Fa-f]{2})/e", "''.chr(hexdec('\\1')).''", $value), '<>,"');
}
return($result);
}

View File

@@ -158,17 +158,15 @@ try {
if (($sObject != '.') && ($sObject != '..') && ($sObject != '.svn') && ($sObject != 'ldap')) {
if (is_file( PATH_RBAC . 'plugins' . PATH_SEP . $sObject )) {
$sType = trim(str_replace(array("class.", ".php"), "", $sObject));
$statusPlugin = $pluginRegistry->getStatusPlugin($sType);
$flagAdd = false;
if (preg_match("/^(?:enabled|disabled)$/", $statusPlugin)) {
if ($statusPlugin == "enabled") {
$flagAdd = true;
}
} else {
/*----------------------------------********---------------------------------*/
if (PMLicensedFeatures
::getSingleton()
->verifyfeature('zLhSk5TeEQrNFI2RXFEVktyUGpnczV1WEJNWVp6cjYxbTU3R29mVXVZNWhZQT0=')) {
$flagAdd = true;
}
/*----------------------------------********---------------------------------*/
if ($flagAdd) {
$arr[] = array("sType" => $sType, "sLabel" => $sType);

View File

@@ -83,17 +83,8 @@ if ($fields['AUTH_SOURCE_PROVIDER'] == 'ldap') {
$oHeadPublisher->assign( 'sUID', $_GET['sUID'] );
G::RenderPage( 'publish', 'extJs' );
} else {
if (file_exists( PATH_PLUGINS . $fields['AUTH_SOURCE_PROVIDER'] . PATH_SEP . $fields['AUTH_SOURCE_PROVIDER'] . 'Edit.xml' )) {
$pluginEnabled = 0;
if (file_exists(PATH_PLUGINS . $fields["AUTH_SOURCE_PROVIDER"] . ".php")) {
$pluginRegistry = &PMPluginRegistry::getSingleton();
$pluginDetail = $pluginRegistry->getPluginDetails($fields["AUTH_SOURCE_PROVIDER"] . ".php");
if ($pluginDetail && $pluginDetail->enabled) {
$pluginEnabled = 1;
}
}
if (file_exists( PATH_XMLFORM . 'ldapAdvanced/' . $fields['AUTH_SOURCE_PROVIDER'] . 'Edit.xml' )) {
$pluginEnabled = 1;
if ($pluginEnabled == 1) {
//The attributes the users
@@ -110,17 +101,17 @@ if ($fields['AUTH_SOURCE_PROVIDER'] == 'ldap') {
}
$fields["AUTH_SOURCE_ATTRIBUTE_IDS"] = $attributes;
if (file_exists(PATH_PLUGINS . $fields["AUTH_SOURCE_PROVIDER"] . PATH_SEP . $fields["AUTH_SOURCE_PROVIDER"] . 'Flag')) {
if (file_exists(PATH_XMLFORM . 'ldapAdvanced/' . $fields['AUTH_SOURCE_PROVIDER'] . 'Flag')) {
$oHeadPublisher = & headPublisher::getSingleton ();
$oHeadPublisher->assign("Fields", $fields);
$oHeadPublisher->addExtJsScript (PATH_PLUGINS . $fields["AUTH_SOURCE_PROVIDER"] . PATH_SEP . 'js' . PATH_SEP . 'library', false, true );
$oHeadPublisher->addExtJsScript (PATH_PLUGINS . $fields["AUTH_SOURCE_PROVIDER"] . PATH_SEP . 'js' . PATH_SEP . 'ldapAdvancedForm', false, true );
$oHeadPublisher->addExtJsScript (PATH_PLUGINS . $fields["AUTH_SOURCE_PROVIDER"] . PATH_SEP . 'js' . PATH_SEP . 'ldapAdvancedList', false, true );
$oHeadPublisher->addExtJsScript (PATH_TPL. 'ldapAdvanced/library', false, true );
$oHeadPublisher->addExtJsScript (PATH_TPL. 'ldapAdvanced/ldapAdvancedForm', false, true );
$oHeadPublisher->addExtJsScript (PATH_TPL. 'ldapAdvanced/ldapAdvancedList', false, true );
G::RenderPage ('publish', 'extJs');
die();
}
$G_PUBLISH->AddContent("xmlform", "xmlform", $fields["AUTH_SOURCE_PROVIDER"] . PATH_SEP . $fields["AUTH_SOURCE_PROVIDER"] . "Edit", "", $fields, "../authSources/authSources_Save");
$G_PUBLISH->AddContent("xmlform", "xmlform", 'ldapAdvanced/' . $fields['AUTH_SOURCE_PROVIDER'] . 'Edit', '', $fields, '../authSources/authSources_Save');
} else {
$G_PUBLISH->AddContent( 'xmlform', 'xmlform', 'login/showMessage', '', array ('MESSAGE' => G::LoadTranslation( 'ID_AUTH_SOURCE_MISSING' )
) );

View File

@@ -33,16 +33,21 @@ G::LoadClass( 'configuration' );
$c = new Configurations();
$configPage = $c->getConfiguration( 'authSourcesList', 'pageSize', '', $_SESSION['USER_LOGGED'] );
$Config['pageSize'] = isset( $configPage['pageSize'] ) ? $configPage['pageSize'] : 20;
$G_MAIN_MENU = 'processmaker';
$G_SUB_MENU = 'users';
$G_ID_MENU_SELECTED = 'USERS';
$G_ID_SUB_MENU_SELECTED = 'AUTH_SOURCES';
$G_PUBLISH = new Publisher();
$licensedFeatures = & PMLicensedFeatures::getSingleton();
$oHeadPublisher = & headPublisher::getSingleton();
$oHeadPublisher->addExtJsScript( 'authSources/authSourcesList', false ); //adding a javascript file .js
$oHeadPublisher->addExtJsScript( 'authSources/authSourcesList', false ); //adding a javascript file .js
/*----------------------------------********---------------------------------*/
if ($licensedFeatures->verifyfeature('sywN09PSzh1MVdOajZBdnhMbFhCSnpNT1lLTEFwVklmOTE=')) {
$oHeadPublisher->addExtJsScript( 'authSources/authSourcesListSyn', false ); //adding a javascript file .js
}
/*----------------------------------********---------------------------------*/
$oHeadPublisher->addContent( 'authSources/authSourcesList' ); //adding a html file .html.
$oHeadPublisher->assign( 'FORMATS', $c->getFormats() );
$oHeadPublisher->assign( 'CONFIG', $Config );

View File

@@ -37,19 +37,8 @@ $G_ID_SUB_MENU_SELECTED = 'AUTH_SOURCES';
$fields = array ('AUTH_SOURCE_PROVIDER' => $_REQUEST['AUTH_SOURCE_PROVIDER']);
$G_PUBLISH = new Publisher();
if (file_exists( PATH_PLUGINS . $fields['AUTH_SOURCE_PROVIDER'] . PATH_SEP . $fields['AUTH_SOURCE_PROVIDER'] . 'Edit.xml' )) {
$pluginEnabled = 0;
if (file_exists(PATH_PLUGINS . $fields["AUTH_SOURCE_PROVIDER"] . ".php")) {
$pluginRegistry = &PMPluginRegistry::getSingleton();
$pluginDetail = $pluginRegistry->getPluginDetails($fields["AUTH_SOURCE_PROVIDER"] . ".php");
if ($pluginDetail && $pluginDetail->enabled) {
$pluginEnabled = 1;
}
}
if (file_exists( PATH_XMLFORM . 'ldapAdvanced/' . $fields['AUTH_SOURCE_PROVIDER'] . 'Edit.xml' )) {
$pluginEnabled = 1;
if ($pluginEnabled == 1) {
//The attributes the users
G::LoadClass("pmFunctions");
@@ -64,17 +53,17 @@ if (file_exists( PATH_PLUGINS . $fields['AUTH_SOURCE_PROVIDER'] . PATH_SEP . $fi
}
}
$fields["AUTH_SOURCE_ATTRIBUTE_IDS"] = $attributes;
if (file_exists(PATH_PLUGINS . $fields["AUTH_SOURCE_PROVIDER"] . PATH_SEP . $fields["AUTH_SOURCE_PROVIDER"] . 'Flag')) {
if (file_exists(PATH_XMLFORM . 'ldapAdvanced/' . $fields['AUTH_SOURCE_PROVIDER'] . 'Flag')) {
$oHeadPublisher = & headPublisher::getSingleton ();
$oHeadPublisher->assign("Fields", $fields);
$oHeadPublisher->addExtJsScript (PATH_PLUGINS . $fields["AUTH_SOURCE_PROVIDER"] . PATH_SEP . 'js' . PATH_SEP . 'library', false, true );
$oHeadPublisher->addExtJsScript (PATH_PLUGINS . $fields["AUTH_SOURCE_PROVIDER"] . PATH_SEP . 'js' . PATH_SEP . 'ldapAdvancedForm', false, true );
$oHeadPublisher->addExtJsScript (PATH_PLUGINS . $fields["AUTH_SOURCE_PROVIDER"] . PATH_SEP . 'js' . PATH_SEP . 'ldapAdvancedList', false, true );
$oHeadPublisher->addExtJsScript (PATH_TPL. 'ldapAdvanced/library', false, true );
$oHeadPublisher->addExtJsScript (PATH_TPL. 'ldapAdvanced/ldapAdvancedForm', false, true );
$oHeadPublisher->addExtJsScript (PATH_TPL. 'ldapAdvanced/ldapAdvancedList', false, true );
G::RenderPage ('publish', 'extJs');
die();
}
$G_PUBLISH->AddContent("xmlform", "xmlform", $fields["AUTH_SOURCE_PROVIDER"] . PATH_SEP . $fields["AUTH_SOURCE_PROVIDER"] . "Edit", "", $fields, "../authSources/authSources_Save");
$G_PUBLISH->AddContent("xmlform", "xmlform", 'ldapAdvanced/' . $fields['AUTH_SOURCE_PROVIDER'] . 'Edit', '', $fields, '../authSources/authSources_Save');
} else {
$G_PUBLISH->AddContent( 'xmlform', 'xmlform', 'login/showMessage', '', array ('MESSAGE' => G::LoadTranslation( 'ID_AUTH_SOURCE_MISSING' )) );
}

View File

@@ -35,20 +35,16 @@ $G_ID_SUB_MENU_SELECTED = 'AUTH_SOURCES';
$G_PUBLISH = new Publisher();
$fields = $RBAC->getAuthSource( $_GET['sUID'] );
if (file_exists( PATH_PLUGINS . $fields['AUTH_SOURCE_PROVIDER'] . PATH_SEP . $fields['AUTH_SOURCE_PROVIDER'] . 'Edit.xml' )) {
if (file_exists( PATH_XMLFORM . 'ldapAdvanced/' . $fields['AUTH_SOURCE_PROVIDER'] . 'Edit.xml' )) {
$pluginEnabled = 0;
if (file_exists(PATH_PLUGINS . $fields["AUTH_SOURCE_PROVIDER"] . ".php")) {
$pluginRegistry = &PMPluginRegistry::getSingleton();
$pluginDetail = $pluginRegistry->getPluginDetails($fields["AUTH_SOURCE_PROVIDER"] . ".php");
if ($pluginDetail && $pluginDetail->enabled) {
$pluginEnabled = 1;
}
/*----------------------------------********---------------------------------*/
$licensedFeatures = & PMLicensedFeatures::getSingleton();
if ($licensedFeatures->verifyfeature('sywN09PSzh1MVdOajZBdnhMbFhCSnpNT1lLTEFwVklmOTE=')) {
$pluginEnabled = 1;
}
/*----------------------------------********---------------------------------*/
if ($pluginEnabled == 0) {
$G_PUBLISH->AddContent( 'xmlform', 'xmlform', 'login/showMessage', '', array ('MESSAGE' => G::LoadTranslation( 'ID_AUTH_SOURCE_MISSING' ) ) );
$G_PUBLISH->AddContent( 'xmlform', 'xmlform', 'login/showMessage', '', array ('MESSAGE' => G::LoadTranslation( 'ID_AUTH_SOURCE_FEATURE_MISSING' ) ) );
G::RenderPage( 'publish', 'blank' );
} else {
G::LoadClass('configuration');
@@ -61,12 +57,12 @@ if (file_exists( PATH_PLUGINS . $fields['AUTH_SOURCE_PROVIDER'] . PATH_SEP . $fi
$oHeadPublisher->assign("FORMATS", $c->getFormats());
$oHeadPublisher->assign("CONFIG", $Config);
if (file_exists(PATH_PLUGINS . $fields["AUTH_SOURCE_PROVIDER"] . PATH_SEP . $fields["AUTH_SOURCE_PROVIDER"] . 'Flag')) {
if (file_exists(PATH_XMLFORM . 'ldapAdvanced/' . $fields['AUTH_SOURCE_PROVIDER'] . 'Flag')) {
$oHeadPublisher = & headPublisher::getSingleton ();
$oHeadPublisher->assign("Fields", $fields);
$oHeadPublisher->addExtJsScript (PATH_PLUGINS . $fields["AUTH_SOURCE_PROVIDER"] . PATH_SEP . 'js' . PATH_SEP . 'library', false, true );
$oHeadPublisher->addExtJsScript (PATH_PLUGINS . $fields["AUTH_SOURCE_PROVIDER"] . PATH_SEP . 'js' . PATH_SEP . 'ldapAdvancedSearch', false, true );
$oHeadPublisher->addExtJsScript (PATH_TPL. 'ldapAdvanced/library', false, true );
$oHeadPublisher->addExtJsScript (PATH_TPL. 'ldapAdvanced/ldapAdvancedSearch', false, true );
G::RenderPage ('publish', 'extJs');
die();
}

View File

@@ -0,0 +1,348 @@
<?php
$function = $_REQUEST['functionAccion'];
switch ($function) {
case "ldapVerifyIfExistsRecordsInDb":
$response = array();
try {
$authenticationSourceUid = $_POST["authenticationSourceUid"];
$arrayAuthenticationSourceData = $RBAC->getAuthSource($authenticationSourceUid);
$flagUser = false;
$flagDepartment = false;
$flagGroup = false;
//Users
$criteria = new Criteria("rbac");
$criteria->addSelectColumn(RbacUsersPeer::USR_UID);
$criteria->add(RbacUsersPeer::USR_AUTH_USER_DN, "%" . $arrayAuthenticationSourceData["AUTH_SOURCE_BASE_DN"], Criteria::LIKE);
$criteria->setOffset(0); //Start
$criteria->setLimit(1); //Limit
$rsCriteria = RbacUsersPeer::doSelectRS($criteria);
$rsCriteria->setFetchmode(ResultSet::FETCHMODE_ASSOC);
if ($rsCriteria->next()) {
$flagUser = true;
}
//Departments
$criteria = new Criteria("workflow");
$criteria->addSelectColumn(DepartmentPeer::DEP_UID);
$criteria->add(DepartmentPeer::DEP_LDAP_DN, "%" . $arrayAuthenticationSourceData["AUTH_SOURCE_BASE_DN"], Criteria::LIKE);
$criteria->setOffset(0); //Start
$criteria->setLimit(1); //Limit
$rsCriteria = DepartmentPeer::doSelectRS($criteria);
$rsCriteria->setFetchmode(ResultSet::FETCHMODE_ASSOC);
if ($rsCriteria->next()) {
$flagDepartment = true;
}
//Groups
$criteria = new Criteria("workflow");
$criteria->addSelectColumn(GroupwfPeer::GRP_UID);
$criteria->add(GroupwfPeer::GRP_LDAP_DN, "%" . $arrayAuthenticationSourceData["AUTH_SOURCE_BASE_DN"], Criteria::LIKE);
$criteria->setOffset(0); //Start
$criteria->setLimit(1); //Limit
$rsCriteria = GroupwfPeer::doSelectRS($criteria);
$rsCriteria->setFetchmode(ResultSet::FETCHMODE_ASSOC);
if ($rsCriteria->next()) {
$flagGroup = true;
}
//Response
$response["status"] = "OK";
$response["existsRecords"] = ($flagUser || $flagDepartment || $flagGroup)? 1 : 0;
} catch (Exception $e) {
//Response
$response["status"] = "ERROR";
$response["message"] = $e->getMessage();
}
echo G::json_encode($response);
break;
case 'ldapGrid':
$data = array();
switch ($_REQUEST['tipo']) {
case 'crear':
$data = array('ID' => G::generateUniqueID());
break;
case 'read':
if (isset($_REQUEST['data']) && $_REQUEST['data'] != '') {
$dataValue = G::json_decode($_REQUEST['data']);
$data = array();
foreach ($dataValue as $value) {
$data[] = array(
'ID' => G::generateUniqueID(),
'ATTRIBUTE_LDAP' => $value->attributeLdap,
'ATTRIBUTE_USER' => $value->attributeUser
);
}
}
break;
default:
break;
}
echo G::json_encode(array('success'=> true, 'data' => $data, 'message'=>'Created Quote', 'total' => count($data)));
break;
case 'ldapSave':
if (isset($_POST['AUTH_SOURCE_SHOWGRID-checkbox'])) {
if ($_POST['AUTH_SOURCE_SHOWGRID-checkbox'] == 'on') {
$_POST['AUTH_SOURCE_SHOWGRID'] = 'on';
$attributes = G::json_decode($_POST['AUTH_SOURCE_GRID_TEXT']);
$con = 1;
foreach ($attributes as $value) {
$_POST['AUTH_SOURCE_GRID_ATTRIBUTE'][$con] = (array)$value;
$con++;
}
}
unset($_POST['AUTH_SOURCE_SHOWGRID-checkbox']);
}
if ($_POST['AUTH_ANONYMOUS'] == '1') {
$_POST['AUTH_SOURCE_SEARCH_USER'] = '';
$_POST['AUTH_SOURCE_PASSWORD'] = '';
}
if (isset($_POST['AUTH_SOURCE_GRID_TEXT'])) {
unset($_POST['AUTH_SOURCE_GRID_TEXT']);
}
if (isset($_POST['DELETE1'])) {
unset($_POST['DELETE1']);
}
if (isset($_POST['DELETE2'])) {
unset($_POST['DELETE2']);
}
if (isset($_POST['AUTH_SOURCE_ATTRIBUTE_IDS'])) {
unset($_POST['AUTH_SOURCE_ATTRIBUTE_IDS']);
}
if (isset($_POST['AUTH_SOURCE_SHOWGRID_FLAG'])) {
unset($_POST['AUTH_SOURCE_SHOWGRID_FLAG']);
}
if (isset($_POST['AUTH_SOURCE_GRID_TEXT'])) {
unset($_POST['AUTH_SOURCE_GRID_TEXT']);
}
$aCommonFields = array ('AUTH_SOURCE_UID','AUTH_SOURCE_NAME','AUTH_SOURCE_PROVIDER','AUTH_SOURCE_SERVER_NAME','AUTH_SOURCE_PORT','AUTH_SOURCE_ENABLED_TLS','AUTH_ANONYMOUS','AUTH_SOURCE_SEARCH_USER','AUTH_SOURCE_PASSWORD','AUTH_SOURCE_VERSION','AUTH_SOURCE_BASE_DN','AUTH_SOURCE_OBJECT_CLASSES','AUTH_SOURCE_ATTRIBUTES');
$aFields = $aData = array ();
foreach ($_POST as $sField => $sValue) {
if (in_array( $sField, $aCommonFields )) {
$aFields[$sField] = $sValue;
} else {
$aData[$sField] = $sValue;
}
}
if (!isset($aData['AUTH_SOURCE_SHOWGRID']) || $aData['AUTH_SOURCE_SHOWGRID'] == 'off') {
unset($aData['AUTH_SOURCE_GRID_ATTRIBUTE']);
unset($aData['AUTH_SOURCE_SHOWGRID']);
}
$aFields['AUTH_SOURCE_DATA'] = $aData;
if ($aFields['AUTH_SOURCE_UID'] == '') {
$RBAC->createAuthSource( $aFields );
} else {
$RBAC->updateAuthSource( $aFields );
}
echo G::json_encode(array('success'=> true));
break;
case "searchUsers":
$response = array();
try {
$pageSize = $_POST["pageSize"];
$authenticationSourceUid = $_POST["sUID"];
$keyword = $_POST["sKeyword"];
$start = (isset($_POST["start"]))? $_POST["start"]: 0;
$limit = (isset($_POST["limit"]))? $_POST["limit"]: $pageSize;
//Get Users from Database
$arrayUser = array();
$criteria = new Criteria("workflow");
$criteria->addSelectColumn(UsersPeer::USR_USERNAME);
$criteria->add(UsersPeer::USR_STATUS, "CLOSED", Criteria::NOT_EQUAL);
$rsCriteria = UsersPeer::doSelectRS($criteria);
$rsCriteria->setFetchmode(ResultSet::FETCHMODE_ASSOC);
while ($rsCriteria->next()) {
$row = $rsCriteria->getRow();
$arrayUser[$row["USR_USERNAME"]] = 1;
}
//Get data
$arrayData = array();
$ldapAdvanced = new ldapAdvanced();
$ldapAdvanced->sAuthSource = $authenticationSourceUid;
$result = $ldapAdvanced->searchUsers($keyword, $start, $limit);
foreach ($result["data"] as $value) {
$arrayUserData = $value;
if (!isset($arrayUser[$arrayUserData["sUsername"]])) {
$arrayUserData["STATUS"] = "NOT IMPORTED";
$arrayUserData["IMPORT"] = 1;
} else {
$arrayUserData["STATUS"] = "IMPORTED";
$arrayUserData["IMPORT"] = 0;
}
$arrayData[] = $arrayUserData;
}
//Response
$response["status"] = "OK";
$response["success"] = true;
$response["resultTotal"] = $result["numRecTotal"];
$response["resultRoot"] = $arrayData;
} catch (Exception $e) {
//Response
$response["status"] = "ERROR";
$response["message"] = $e->getMessage();
}
echo G::json_encode($response);
break;
case 'importUsers':
$usersImport = $_REQUEST['UsersImport'];
$authSourceUid = $_REQUEST['AUTH_SOURCE_UID'];
$aUsers = G::json_decode($usersImport);
global $RBAC;
$aFields = $RBAC->getAuthSource( $authSourceUid );
$aAttributes = array();
if (isset($aFields['AUTH_SOURCE_DATA']['AUTH_SOURCE_GRID_ATTRIBUTE'])) {
$aAttributes = $aFields['AUTH_SOURCE_DATA']['AUTH_SOURCE_GRID_ATTRIBUTE'];
}
$usersCreated = '';
$countUsers = 0;
//$usersImport
foreach ($aUsers as $sUser) {
$aUser = (array)$sUser;
$matches = array();
$aData = array();
$aData['USR_USERNAME'] = str_replace( "*", "'", $aUser['sUsername'] );
$aData["USR_PASSWORD"] = "00000000000000000000000000000000";
// note added by gustavo gustavo-at-colosa.com
// asign the FirstName and LastName variables
// add replace to change D*Souza to D'Souza by krlos
$aData['USR_FIRSTNAME'] = str_replace( "*", "'", $aUser['sFirstname'] );
$aData['USR_LASTNAME'] = str_replace( "*", "'", $aUser['sLastname'] );
$aData['USR_EMAIL'] = $aUser['sEmail'];
$aData['USR_DUE_DATE'] = date( 'Y-m-d', mktime( 0, 0, 0, date( 'm' ), date( 'd' ), date( 'Y' ) + 2 ) );
$aData['USR_CREATE_DATE'] = date( 'Y-m-d H:i:s' );
$aData['USR_UPDATE_DATE'] = date( 'Y-m-d H:i:s' );
$aData['USR_BIRTHDAY'] = date( 'Y-m-d' );
$aData['USR_STATUS'] = (isset($aUser['USR_STATUS'])) ? (($aUser['USR_STATUS'] == 'ACTIVE') ? 1 : 0) : 1;
$aData['USR_AUTH_TYPE'] = strtolower( $aFields['AUTH_SOURCE_PROVIDER'] );
$aData['UID_AUTH_SOURCE'] = $aFields['AUTH_SOURCE_UID'];
// validating with regexp if there are some missing * inside the DN string
// if it's so the is changed to the ' character
preg_match( '/[a-zA-Z]\*[a-zA-Z]/', $aUser['sDN'], $matches );
foreach ($matches as $key => $match) {
$newMatch = str_replace( '*', '\'', $match );
$aUser['sDN'] = str_replace( $match, $newMatch, $aUser['sDN'] );
}
$aData['USR_AUTH_USER_DN'] = $aUser['sDN'];
try {
$sUserUID = $RBAC->createUser( $aData, 'PROCESSMAKER_OPERATOR', $aFields['AUTH_SOURCE_NAME']);
$usersCreated .= $aData['USR_USERNAME'].' ';
$countUsers ++;
} catch (Exception $oError) {
$G_PUBLISH = new Publisher();
$G_PUBLISH->AddContent( 'xmlform', 'xmlform', 'login/showMessage', '', array ('MESSAGE' => $oError->getMessage()) );
G::RenderPage("publish", "blank");
die();
}
$aData['USR_STATUS'] = (isset($aUser['USR_STATUS'])) ? $aUser['USR_STATUS'] :'ACTIVE';
$aData['USR_UID'] = $sUserUID;
$aData['USR_ROLE'] = 'PROCESSMAKER_OPERATOR';
G::LoadClass("calendar");
$calendarObj = new Calendar();
$calendarObj->assignCalendarTo($sUserUID, '00000000000000000000000000000001', 'USER');
if (count($aAttributes)) {
foreach ($aAttributes as $value) {
if (isset($aUser[$value['attributeUser']])) {
$aData[$value['attributeUser']] = str_replace( "*", "'", $aUser[$value['attributeUser']] );
if ($value['attributeUser'] == 'USR_STATUS') {
$evalValue = $aData[$value['attributeUser']];
$statusValue = $aData['USR_STATUS'];
$aData[$value['attributeUser']] = $statusValue;
}
}
}
}
require_once 'classes/model/Users.php';
$oUser = new Users();
$oUser->create( $aData );
}
$sClassName = strtolower($aFields['AUTH_SOURCE_PROVIDER']);
$plugin = new $sClassName();
$aAuthSource = $RBAC->authSourcesObj->load($authSourceUid);
if (is_null($plugin->ldapcnn)) {
$plugin->ldapcnn = $plugin->ldapConnection($aAuthSource);
}
$ldapcnn = $plugin->ldapcnn;
$plugin->log($ldapcnn, "Users imported $countUsers: " . $usersCreated);
echo G::json_encode(array('success'=> true));
break;
case "ldapTestConnection":
$response = array();
try {
if ($_POST["AUTH_ANONYMOUS"] == "1") {
$_POST["AUTH_SOURCE_SEARCH_USER"] = "";
$_POST["AUTH_SOURCE_PASSWORD"] = "";
}
$arrayAuthenticationSourceData = $_POST;
//Test connection
$ldapAdvanced = new ldapAdvanced();
$ldapcnn = $ldapAdvanced->ldapConnection($arrayAuthenticationSourceData);
//Response
$response["status"] = "OK";
} catch (Exception $e) {
//Response
$response["status"] = "ERROR";
$response["message"] = $e->getMessage();
}
echo G::json_encode($response);
break;
default:
break;
}

View File

@@ -0,0 +1,651 @@
<?php
class ldapadvancedClassCron
{
public $deletedRemoved = 0; //Users in the removed OU
public $deletedRemovedUsers = "";
public $dAlready = 0; //Count for already existing users
public $dMoved = 0; //Users moved from a Department to another Department
public $dImpossible = 0; //Users already created using another Authentication source
public $dCreated = 0; //Users created
public $dRemoved = 0; //Users removed
public $dAlreadyUsers = "";
public $dMovedUsers = "";
public $dImpossibleUsers = "";
public $dCreatedUsers = "";
public $dRemovedUsers = "";
public $gAlready = 0;
public $gMoved = 0;
public $gImpossible = 0;
public $gCreated = 0;
public $gRemoved = 0;
public $gAlreadyUsers = "";
public $gMovedUsers = "";
public $gImpossibleUsers = "";
public $gCreatedUsers = "";
public $gRemovedUsers = "";
public $managersHierarchy = array();
public $oldManagersHierarchy = array();
public $managersToClear = array();
public $deletedManager = 0;
public function __construct()
{
}
/**
function executed by the cron
this function will synchronize users from ldap/active directory to PM users tables
@return void
*/
public function executeCron($debug)
{
$rbac = &RBAC::getSingleton();
if (is_null($rbac->authSourcesObj)) {
$rbac->authSourcesObj = new AuthenticationSource();
}
$plugin = new ldapAdvanced();
$plugin->sSystem = $rbac->sSystem;
$plugin->setFrontEnd(true);
$plugin->setDebug($debug);
//Get all authsource for this plugin ( ldapAdvanced plugin, because other authsources are not needed )
$arrayAuthenticationSource = $plugin->getAuthSources();
$aDepartments = $plugin->getDepartments("");
$aGroups = $plugin->getGroups();
//$arrayDepartmentUserAd = array(); //(D) Update Users
//$arrayGroupUserAd = array(); //(G) Update Users
//echo "\n";
$plugin->frontEndShow("START");
$plugin->debugLog("START");
foreach ($arrayAuthenticationSource as $value) {
$arrayAuthenticationSourceData = $value;
$plugin->debugLog("ldapadvanced.php > function executeCron() > foreach > \$arrayAuthenticationSourceData ---->\n" . print_r($arrayAuthenticationSourceData, true));
$plugin->sAuthSource = $arrayAuthenticationSourceData["AUTH_SOURCE_UID"];
$plugin->ldapcnn = null;
$plugin->setArrayDepartmentUserSynchronizedChecked(array());
$plugin->setArrayUserUpdateChecked(array());
//Get all User (USR_UID, USR_USERNAME, USR_AUTH_USER_DN) registered in RBAC with this Authentication Source
$plugin->setArrayAuthenticationSourceUsers($arrayAuthenticationSourceData["AUTH_SOURCE_UID"]); //INITIALIZE DATA
$plugin->frontEndShow("TEXT", "Authentication Source: " . $arrayAuthenticationSourceData["AUTH_SOURCE_NAME"]);
$plugin->log(null, "Executing cron for Authentication Source: " . $arrayAuthenticationSourceData["AUTH_SOURCE_NAME"]);
//Get all departments from Ldap/ActiveDirectory and build a hierarchy using dn (ou->ou parent)
$aLdapDepts = $plugin->searchDepartments();
//Obtain all departments from PM with a valid department in LDAP/ActiveDirectory
$aRegisteredDepts = $plugin->getRegisteredDepartments($aLdapDepts, $aDepartments);
$plugin->debugLog("ldapadvanced.php > function executeCron() > foreach > \$aRegisteredDepts ---->\n" . print_r($aRegisteredDepts, true));
//Get all group from Ldap/ActiveDirectory
$aLdapGroups = $plugin->searchGroups();
//Obtain all groups from PM with a valid group in LDAP/ActiveDirectory
$aRegisteredGroups = $plugin->getRegisteredGroups($aLdapGroups, $aGroups);
$plugin->debugLog("ldapadvanced.php > function executeCron() > foreach > \$aRegisteredGroups ---->\n" . print_r($aRegisteredGroups, true));
//Get all users from Removed OU
$this->usersRemovedOu = $plugin->getUsersFromRemovedOu($arrayAuthenticationSourceData);
$plugin->deactiveArrayOfUsers($this->usersRemovedOu);
//Variables
$this->deletedRemoved = count($this->usersRemovedOu);
$this->deletedRemovedUsers = "";
$this->dAlready = 0;
$this->dMoved = 0;
$this->dImpossible = 0;
$this->dCreated = 0;
$this->dRemoved = 0;
$this->dAlreadyUsers = "";
$this->dMovedUsers = "";
$this->dImpossibleUsers = "";
$this->dCreatedUsers = "";
$this->dRemovedUsers = "";
$this->gAlready = 0;
$this->gMoved = 0;
$this->gImpossible = 0;
$this->gCreated = 0;
$this->gRemoved = 0;
$this->gAlreadyUsers = "";
$this->gMovedUsers = "";
$this->gImpossibleUsers = "";
$this->gCreatedUsers = "";
$this->gRemovedUsers = "";
//Department - Synchronize Users
$numDepartments = count($aRegisteredDepts);
$count = 0;
$plugin->debugLog("ldapadvanced.php > function executeCron() > foreach > \$numDepartments ----> $numDepartments");
foreach ($aRegisteredDepts as $registeredDept) {
$count++;
//(D) Update Users
//if (!isset($arrayDepartmentUserAd[$registeredDept["DEP_UID"]])) {
// $arrayDepartmentUserAd[$registeredDept["DEP_UID"]] = array(); //Current users in department based in Active Directory
//}
//
//$arrayAux = $this->departmentSynchronizeUsers($plugin, $numDepartments, $count, $registeredDept);
//$arrayAux = array_merge($arrayDepartmentUserAd[$registeredDept["DEP_UID"]], $arrayAux);
//
//$arrayDepartmentUserAd[$registeredDept["DEP_UID"]] = array_unique($arrayAux);
$arrayAux = $this->departmentSynchronizeUsers($plugin, $numDepartments, $count, $registeredDept);
}
//Department - Print log
$logResults = sprintf(
"- Departments -> Existing users: %d, moved: %d, impossible: %d, created: %d, removed: %d",
$this->dAlready,
$this->dMoved,
$this->dImpossible,
$this->dCreated,
$this->dRemoved
);
$plugin->frontEndShow("TEXT", $logResults);
$plugin->log(null, $logResults);
//Group - Synchronize Users
$numGroups = count($aRegisteredGroups);
$count = 0;
$plugin->debugLog("ldapadvanced.php > function executeCron() > foreach > \$numGroups ----> $numGroups");
foreach ($aRegisteredGroups as $registeredGroup) {
$count++;
//(G) Update Users
//if (!isset($arrayGroupUserAd[$registeredGroup["GRP_UID"]])) {
// $arrayGroupUserAd[$registeredGroup["GRP_UID"]] = array(); //Current users in group based in Active Directory
//}
//
//$arrayAux = $this->groupSynchronizeUsers($plugin, $numGroups, $count, $registeredGroup);
//$arrayAux = array_merge($arrayGroupUserAd[$registeredGroup["GRP_UID"]], $arrayAux);
//
//$arrayGroupUserAd[$registeredGroup["GRP_UID"]] = array_unique($arrayAux);
$arrayAux = $this->groupSynchronizeUsers($plugin, $numGroups, $count, $registeredGroup);
}
//Group - Print log
$logResults = sprintf(
"- Groups -> Existing users: %d, moved: %d, impossible: %d, created: %d, removed: %d",
$this->gAlready,
$this->gMoved,
$this->gImpossible,
$this->gCreated,
$this->gRemoved
);
$plugin->frontEndShow("TEXT", $logResults);
$plugin->log(null, $logResults);
//Manager
$plugin->clearManager($this->managersToClear);
if (isset($arrayAuthenticationSourceData["AUTH_SOURCE_DATA"]["DEPARTMENTS_TO_UNASSIGN"])) {
if (is_array($arrayAuthenticationSourceData["AUTH_SOURCE_DATA"]["DEPARTMENTS_TO_UNASSIGN"])) {
foreach ($arrayAuthenticationSourceData["AUTH_SOURCE_DATA"]["DEPARTMENTS_TO_UNASSIGN"] as $departmentUID) {
// Delete manager assignments
$criteriaSet = new Criteria("workflow");
$criteriaSet->add(UsersPeer::USR_REPORTS_TO, "");
$criteriaWhere = new Criteria("workflow");
$criteriaWhere->add(UsersPeer::DEP_UID, $departmentUID);
$criteriaWhere->add(UsersPeer::USR_REPORTS_TO, "", Criteria::NOT_EQUAL);
$this->deletedManager = BasePeer::doUpdate($criteriaWhere, $criteriaSet, Propel::getConnection("workflow"));
// Delete department assignments
$criteriaSet = new Criteria("workflow");
$criteriaSet->add(UsersPeer::DEP_UID, "");
$criteriaWhere = new Criteria("workflow");
$criteriaWhere->add(UsersPeer::DEP_UID, $departmentUID);
$this->dMoved += UsersPeer::doCount($criteriaWhere);
BasePeer::doUpdate($criteriaWhere, $criteriaSet, Propel::getConnection("workflow"));
}
}
unset($arrayAuthenticationSourceData["AUTH_SOURCE_DATA"]["DEPARTMENTS_TO_UNASSIGN"]);
$rbac = &RBAC::getSingleton();
$rbac->authSourcesObj->update($arrayAuthenticationSourceData);
}
if (isset($arrayAuthenticationSourceData["AUTH_SOURCE_DATA"]["GROUPS_TO_UNASSIGN"])) {
if (is_array($arrayAuthenticationSourceData["AUTH_SOURCE_DATA"]["GROUPS_TO_UNASSIGN"])) {
foreach ($arrayAuthenticationSourceData["AUTH_SOURCE_DATA"]["GROUPS_TO_UNASSIGN"] as $groupUID) {
// Delete manager assignments
$groupsInstance = new Groups();
$criteria = $groupsInstance->getUsersGroupCriteria($groupUID);
$dataset = UsersPeer::doSelectRS($criteria);
$dataset->setFetchmode(ResultSet::FETCHMODE_ASSOC);
$dataset->next();
$users = array();
while ($row = $dataset->getRow()) {
$users[] = $row["USR_UID"];
$dataset->next();
}
$criteriaSet = new Criteria("workflow");
$criteriaSet->add(UsersPeer::USR_REPORTS_TO, "");
$criteriaWhere = new Criteria("workflow");
$criteriaWhere->add(UsersPeer::USR_UID, $users, Criteria::IN);
$criteriaWhere->add(UsersPeer::USR_REPORTS_TO, "", Criteria::NOT_EQUAL);
$this->deletedManager = BasePeer::doUpdate($criteriaWhere, $criteriaSet, Propel::getConnection("workflow"));
// Delete group assignments
$criteria = new Criteria("workflow");
$criteria->add(GroupUserPeer::GRP_UID, $groupUID);
$this->gMoved += GroupUserPeer::doCount($criteria);
BasePeer::doDelete($criteria, Propel::getConnection("workflow"));
}
}
unset($arrayAuthenticationSourceData["AUTH_SOURCE_DATA"]["GROUPS_TO_UNASSIGN"]);
$rbac = &RBAC::getSingleton();
$rbac->authSourcesObj->update($arrayAuthenticationSourceData);
}
// Delete the managers that not exists in PM
$criteria = new Criteria("rbac");
$criteria->addSelectColumn(RbacUsersPeer::USR_AUTH_USER_DN);
$criteria->add(RbacUsersPeer::USR_AUTH_USER_DN, "", Criteria::NOT_EQUAL);
$dataset = RbacUsersPeer::doSelectRS($criteria);
$dataset->setFetchmode(ResultSet::FETCHMODE_ASSOC);
$dataset->next();
$existingUsers = array();
while ($row = $dataset->getRow()) {
$existingUsers[] = $row["USR_AUTH_USER_DN"];
$dataset->next();
}
foreach ($this->managersHierarchy as $managerDN => $subordinates) {
if (!in_array($managerDN, $existingUsers)) {
unset($this->managersHierarchy[$managerDN]);
}
}
// Get the managers assigments counters
$plugin->synchronizeManagers($this->managersHierarchy);
$deletedManagersAssignments = self::array_diff_assoc_recursive($this->oldManagersHierarchy, $this->managersHierarchy);
$newManagersAssignments = self::array_diff_assoc_recursive($this->managersHierarchy, $this->oldManagersHierarchy);
$deletedManagers = array();
$newManagers = array();
$movedManagers = array();
if (is_array($deletedManagersAssignments)) {
foreach ($deletedManagersAssignments as $dn1 => $subordinates1) {
foreach ($subordinates1 as $subordinate) {
if (!in_array($subordinate, $deletedManagers)) {
$deletedManagers[] = $subordinate;
}
foreach ($newManagersAssignments as $dn2 => $subordinates2) {
if (isset($subordinates2[$subordinate])) {
$movedManagers[] = $subordinate;
}
}
}
}
}
if (is_array($newManagersAssignments)) {
foreach ($newManagersAssignments as $dn1 => $subordinates1) {
foreach ($subordinates1 as $subordinate) {
if (!in_array($subordinate, $newManagers)) {
$newManagers[] = $subordinate;
}
foreach ($deletedManagersAssignments as $dn2 => $subordinates2) {
if (isset($subordinates2[$subordinate])) {
if (!in_array($subordinate, $movedManagers)) {
$movedManagers[] = $subordinate;
}
}
}
}
}
}
//Print and log the users's information
//Deleted/Removed Users
$logResults = sprintf("- Deleted/Removed Users: %d", $this->deletedRemoved);
$plugin->frontEndShow("TEXT", $logResults);
$plugin->log(null, $logResults);
if ($this->deletedRemoved > 0) {
$plugin->log(null, "Deleted/Removed Users: ");
$plugin->log(null, $this->deletedRemovedUsers);
}
if ($this->dAlready + $this->gAlready > 0) {
$plugin->log(null, "Existing Users: ");
$plugin->log(null, $this->dAlreadyUsers . " " . $this->gAlreadyUsers);
}
if ($this->dMoved + $this->gMoved > 0) {
$plugin->log(null, "Moved Users: ");
$plugin->log(null, $this->dMovedUsers . " " . $this->gMovedUsers);
}
if ($this->dImpossible + $this->gImpossible > 0) {
$plugin->log(null, "Impossible Users: ");
$plugin->log(null, $this->dImpossibleUsers . " " . $this->gImpossibleUsers);
}
if ($this->dCreated + $this->gCreated > 0) {
$plugin->log(null, "Created Users: ");
$plugin->log(null, $this->dCreatedUsers . " " . $this->gCreatedUsers);
}
if ($this->dRemoved + $this->gRemoved > 0) {
$plugin->log(null, "Removed Users: ");
$plugin->log(null, $this->dRemovedUsers . " " . $this->gRemovedUsers);
}
//Print and log the managers assignments"s information
$logResults = sprintf(
"- Managers assignments: created %d, moved %d, removed %d",
count($newManagers) - count($movedManagers),
count($movedManagers),
count($deletedManagers) - count($movedManagers) + $this->deletedManager
);
$plugin->frontEndShow("TEXT", $logResults);
$plugin->log(null, $logResults);
//Update Users data based on the LDAP Server
$plugin->usersUpdateData($arrayAuthenticationSourceData["AUTH_SOURCE_UID"]);
}
$plugin->frontEndShow("END");
//(D) Update Users
////Department //Upgrade users in departments
//foreach ($arrayDepartmentUserAd as $departmentUid => $arrayUserAd) {
// $plugin->setArrayDepartmentUsers($departmentUid); //INITIALIZE DATA
//
// $arrayAux = array_diff(array_keys($plugin->arrayDepartmentUsersByUid), $arrayUserAd);
//
// $this->departmentRemoveUsers($departmentUid, $arrayAux);
//}
//(G) Update Users
////Group //Upgrade users in groups
//foreach ($arrayGroupUserAd as $groupUid => $arrayUserAd) {
// $plugin->setArrayGroupUsers($groupUid); //INITIALIZE DATA
//
// $arrayAux = array_diff(array_keys($plugin->arrayGroupUsersByUid), $arrayUserAd);
//
// $this->groupRemoveUsers($groupUid, $arrayAux);
//}
//// Developed by Gary and Ronald
//$usersInfo = $plugin->ASUpdateInfo('');
//if (isset($usersInfo) && $usersInfo > 0) {
// $this->dMoved = $usersInfo;
//}
//// End Developed by Gary and Ronald
$plugin->debugLog("END");
}
public function array_diff_assoc_recursive($array1, $array2)
{
foreach ($array1 as $key => $value) {
if (is_array($value)) {
if (!isset($array2[$key])) {
$difference[$key] = $value;
} else {
if (!is_array($array2[$key])) {
$difference[$key] = $value;
} else {
$new_diff = self::array_diff_assoc_recursive($value, $array2[$key]);
if ($new_diff != false) {
$difference[$key] = $new_diff;
}
}
}
} else {
if (!isset($array2[$key]) || $array2[$key] != $value) {
$difference[$key] = $value;
}
}
}
return (!isset($difference))? array() : $difference;
}
public function departmentRemoveUsers($departmentUid, array $arrayUserUid)
{
try {
$department = new Department();
$department->Load($departmentUid);
$departmentManagerUid = $department->getDepManager();
foreach ($arrayUserUid as $value) {
$userUid = $value;
$department->removeUserFromDepartment($departmentUid, $userUid);
if ($userUid == $departmentManagerUid) {
$department->update(array("DEP_UID" => $departmentUid, "DEP_MANAGER" => ""));
$department->updateDepartmentManager($departmentUid);
}
}
} catch (Exception $e) {
throw $e;
}
}
public function groupRemoveUsers($groupUid, array $arrayUserUid)
{
try {
$group = new Groups();
foreach ($arrayUserUid as $value) {
$userUid = $value;
$group->removeUserOfGroup($groupUid, $userUid);
}
} catch (Exception $e) {
throw $e;
}
}
public function departmentSynchronizeUsers($ldapAdvanced, $numDepartments, $count, array $arrayDepartmentData)
{
try {
$ldapAdvanced->debugLog("ldapadvanced.php > function departmentSynchronizeUsers() > START");
$ldapAdvanced->debugLog("ldapadvanced.php > function departmentSynchronizeUsers() > \$arrayDepartmentData ---->\n" . print_r($arrayDepartmentData, true));
//Get users from ProcessMaker tables (for this Department)
$ldapAdvanced->setArrayDepartmentUsers($arrayDepartmentData["DEP_UID"]); //INITIALIZE DATA
//Clear the manager assignments
$arrayUserUid = array();
foreach ($ldapAdvanced->arrayDepartmentUsersByUid as $key => $user) {
$arrayUserUid[] = $user["USR_UID"];
if (isset($user["USR_REPORTS_TO"]) && $user["USR_REPORTS_TO"] != "") {
$dn = (isset($ldapAdvanced->arrayAuthenticationSourceUsersByUid[$user["USR_REPORTS_TO"]]["USR_AUTH_USER_DN"]))? $ldapAdvanced->arrayAuthenticationSourceUsersByUid[$user["USR_REPORTS_TO"]]["USR_AUTH_USER_DN"] : "";
if ($dn != "") {
if (!isset($this->oldManagersHierarchy[$dn])) {
$this->oldManagersHierarchy[$dn] = array();
}
$this->oldManagersHierarchy[$dn][$user["USR_UID"]] = $user["USR_UID"];
}
}
}
$this->managersToClear = $arrayUserUid;
//Synchronize Users from Department
//Now we need to go over ldapusers and check if the user exists in ldap but not in PM, then we need to create it
$arrayData = array(
"already" => $this->dAlready,
"moved" => $this->dMoved,
"impossible" => $this->dImpossible,
"created" => $this->dCreated,
"alreadyUsers" => $this->dAlreadyUsers,
"movedUsers" => $this->dMovedUsers,
"impossibleUsers" => $this->dImpossibleUsers,
"createdUsers" => $this->dCreatedUsers,
"managersHierarchy" => $this->managersHierarchy,
"arrayUserUid" => array(),
"n" => $numDepartments,
"i" => $count
);
//Get Users from LDAP (for this Department)
$arrayData = $ldapAdvanced->ldapGetUsersFromDepartment("SYNCHRONIZE", $arrayDepartmentData["DEP_LDAP_DN"], $arrayData);
$this->dAlready = $arrayData["already"];
$this->dMoved = $arrayData["moved"];
$this->dImpossible = $arrayData["impossible"];
$this->dCreated = $arrayData["created"];
$this->dAlreadyUsers = $arrayData["alreadyUsers"];
$this->dMovedUsers = $arrayData["movedUsers"];
$this->dImpossibleUsers = $arrayData["impossibleUsers"];
$this->dCreatedUsers = $arrayData["createdUsers"];
$this->managersHierarchy = $arrayData["managersHierarchy"];
$arrayUserUid = $arrayData["arrayUserUid"];
//(D) Update Users
$arrayAux = array_diff(array_keys($ldapAdvanced->arrayDepartmentUsersByUid), $arrayUserUid);
$this->departmentRemoveUsers($arrayDepartmentData["DEP_UID"], $arrayAux);
$this->dRemoved += count($arrayAux);
$this->dRemovedUsers = "";
$ldapAdvanced->debugLog("ldapadvanced.php > function departmentSynchronizeUsers() > END");
//Return all UID of Users synchronized in the Department (Return all UID of Users of this Department)
return $arrayUserUid;
} catch (Exception $e) {
throw $e;
}
}
public function groupSynchronizeUsers($ldapAdvanced, $numGroups, $count, array $arrayGroupData)
{
try {
$ldapAdvanced->debugLog("ldapadvanced.php > function groupSynchronizeUsers() > START");
$ldapAdvanced->debugLog("ldapadvanced.php > function groupSynchronizeUsers() > \$arrayGroupData ---->\n" . print_r($arrayGroupData, true));
//Get users from ProcessMaker tables (for this Group)
$ldapAdvanced->setArrayGroupUsers($arrayGroupData["GRP_UID"]); //INITIALIZE DATA
//Clear the manager assignments
$arrayUserUid = array();
foreach ($ldapAdvanced->arrayGroupUsersByUid as $key => $user) {
$arrayUserUid[] = $user["USR_UID"];
if (isset($user["USR_REPORTS_TO"]) && $user["USR_REPORTS_TO"] != "") {
$dn = (isset($ldapAdvanced->arrayAuthenticationSourceUsersByUid[$user["USR_REPORTS_TO"]]["USR_AUTH_USER_DN"]))? $ldapAdvanced->arrayAuthenticationSourceUsersByUid[$user["USR_REPORTS_TO"]]["USR_AUTH_USER_DN"] : "";
if ($dn != "") {
if (!isset($this->oldManagersHierarchy[$dn])) {
$this->oldManagersHierarchy[$dn] = array();
}
$this->oldManagersHierarchy[$dn][$user["USR_UID"]] = $user["USR_UID"];
}
}
}
$this->managersToClear = array_merge($this->managersToClear, $arrayUserUid);
//Synchronize Users from Group
//Now we need to go over ldapusers and check if the user exists in ldap but not in PM, then we need to create it
$arrayData = array(
"already" => $this->gAlready,
"moved" => $this->gMoved,
"impossible" => $this->gImpossible,
"created" => $this->gCreated,
"alreadyUsers" => $this->gAlreadyUsers,
"movedUsers" => $this->gMovedUsers,
"impossibleUsers" => $this->gImpossibleUsers,
"createdUsers" => $this->gCreatedUsers,
"managersHierarchy" => $this->managersHierarchy,
"arrayUserUid" => array(),
"n" => $numGroups,
"i" => $count
);
//Get Users from LDAP (for this Group)
$arrayData = $ldapAdvanced->ldapGetUsersFromGroup("SYNCHRONIZE", $arrayGroupData, $arrayData);
$this->gAlready = $arrayData["already"];
$this->gMoved = $arrayData["moved"];
$this->gImpossible = $arrayData["impossible"];
$this->gCreated = $arrayData["created"];
$this->gAlreadyUsers = $arrayData["alreadyUsers"];
$this->gMovedUsers = $arrayData["movedUsers"];
$this->gImpossibleUsers = $arrayData["impossibleUsers"];
$this->gCreatedUsers = $arrayData["createdUsers"];
$this->managersHierarchy = $arrayData["managersHierarchy"];
$arrayUserUid = $arrayData["arrayUserUid"];
//(G) Update Users
$arrayAux = array_diff(array_keys($ldapAdvanced->arrayGroupUsersByUid), $arrayUserUid);
$this->groupRemoveUsers($arrayGroupData["GRP_UID"], $arrayAux);
$this->gRemoved += count($arrayAux);
$this->gRemovedUsers = "";
$ldapAdvanced->debugLog("ldapadvanced.php > function groupSynchronizeUsers() > END");
//Return all UID of Users synchronized in the Group (Return all UID of Users of this Group)
return $arrayUserUid;
} catch (Exception $e) {
throw $e;
}
}
}

View File

@@ -0,0 +1,46 @@
var synchronizeDepartmentsLDAPADV = function() {
iGrid = Ext.getCmp('infoGrid');
rowSelected = iGrid.getSelectionModel().getSelected();
if (rowSelected) {
location.href = 'authSourcesSynchronize?authUid=' + rowSelected.data.AUTH_SOURCE_UID + '&tab=synchronizeDepartments';
}
};
var synchronizeGroupsLDAPADV = function() {
iGrid = Ext.getCmp('infoGrid');
rowSelected = iGrid.getSelectionModel().getSelected();
if (rowSelected) {
location.href = 'authSourcesSynchronize?authUid=' + rowSelected.data.AUTH_SOURCE_UID + '&tab=synchronizeGroups';
}
};
var synchronizeDepartmentsButtonLDAPADV = new Ext.Action({
text: 'Synchronize Departments',
iconCls: 'ICON_DEPARTAMENTS',
disabled: true,
handler: synchronizeDepartmentsLDAPADV
});
var synchronizeGroupsButtonLDAPADV = new Ext.Action({
text: 'Synchronize Groups',
iconCls: 'ICON_GROUPS',
disabled: true,
handler: synchronizeGroupsLDAPADV
});
var _rowselectLDAPADV = function(sm, index, record) {
if (record.get('AUTH_SOURCE_PROVIDER') == 'ldapAdvanced') {
synchronizeDepartmentsButtonLDAPADV.enable();
synchronizeGroupsButtonLDAPADV.enable();
}
};
var _rowdeselectLDAPADV = function(sm, index, record) {
synchronizeDepartmentsButtonLDAPADV.disable();
synchronizeGroupsButtonLDAPADV.disable();
};
_rowselect.push(_rowselectLDAPADV);
_rowdeselect.push(_rowdeselectLDAPADV);
_pluginActionButtons.push(synchronizeDepartmentsButtonLDAPADV);
_pluginActionButtons.push(synchronizeGroupsButtonLDAPADV);

View File

@@ -0,0 +1,3 @@
<div style="padding: 15px">
<div id="list-panel"></div>
</div>

View File

@@ -0,0 +1,229 @@
var viewPort;
var backButton;
var northPanel;
var tabsPanel;
var departmentsPanel;
var groupsPanel;
var treeDepartments;
var treeGroups;
var isSaved = true;
var isFirstTime = true;
Ext.onReady(function() {
nodeChangeCheck = function (node, check)
{
if (node) {
if (node.hasChildNodes()) {
node.eachChild(function (n) { nodeChangeCheck(n, check); });
}
//node.expand();
node.getUI().toggleCheck(check);
}
}
nodeChangeCheckStart = function (node, check)
{
treeDepartments.removeListener("checkchange", nodeChangeCheckStart, this);
nodeChangeCheck(node, check);
treeDepartments.addListener("checkchange", nodeChangeCheckStart, this);
}
try {
Ext.Ajax.timeout = 300000;
backButton = new Ext.Action({
text : _('ID_BACK'),
iconCls: "button_menu_ext ss_sprite ss_arrow_left",
handler: function() {
location.href = '../authSources/authSources_List';
}
});
northPanel = new Ext.Panel({
region: 'north',
xtype: 'panel',
tbar: ['<b>'+ 'Authentication Sources' + '</b>', {xtype: 'tbfill'}, backButton]
});
treeDepartments = new Ext.tree.TreePanel({
title: 'Departments List',
defaults: {flex: 1},
useArrows: true,
autoScroll: true,
animate: true,
enableDD: true,
containerScroll: true,
rootVisible: false,
frame: true,
root: {
nodeType: 'async'
},
maskDisabled: false,
dataUrl: 'authSourcesSynchronizeAjax?m=loadDepartments&authUid=' + AUTHENTICATION_SOURCE.AUTH_SOURCE_UID,
requestMethod: 'POST',
buttons: [{
text: 'Save Changes',
handler: function() {
isSaved = false;
var msg = '', selNodes = treeDepartments.getChecked();
treeDepartments.disabled = true;
var departments = [];
Ext.each(selNodes, function(node) {
departments.push(node.id);
});
Ext.Ajax.request({
url: 'authSourcesSynchronizeAjax',
params: {m: 'saveDepartments', authUid: AUTHENTICATION_SOURCE.AUTH_SOURCE_UID, departmentsDN: departments.join('|')},
success: function(r) {
var response = Ext.util.JSON.decode(r.responseText);
if (response.status == 'OK') {
treeDepartments.getLoader().load(treeDepartments.root);
}
else {
alert(response.message);
}
}
});
}
}],
listeners: {
checkchange: nodeChangeCheckStart
}
});
treeDepartments.loader.on('load', function() {
treeDepartments.getRootNode().expand(true);
if (!isSaved) {
isSaved = true;
treeDepartments.disabled = false;
Ext.Msg.show({
title: 'Changes saved.',
msg: 'All changes have been saved.',
icon: Ext.Msg.INFO,
minWidth: 200,
buttons: Ext.Msg.OK
});
}
});
treeGroups = new Ext.tree.TreePanel({
title: 'Groups List',
defaults: {flex: 1},
useArrows: true,
autoScroll: true,
animate: true,
enableDD: true,
containerScroll: true,
rootVisible: false,
frame: true,
root: {
nodeType: 'async'
},
dataUrl: 'authSourcesSynchronizeAjax?m=loadGroups&authUid=' + AUTHENTICATION_SOURCE.AUTH_SOURCE_UID,
requestMethod: 'POST',
buttons: [{
text: 'Save Changes',
handler: function() {
isSaved = false;
var msg = '', selNodes = treeGroups.getChecked();
treeGroups.disabled = true;
this.disabled = true;
var Groups = [];
Ext.each(selNodes, function(node) {
Groups.push(node.id);
});
Ext.Ajax.request({
url: 'authSourcesSynchronizeAjax',
params: {m: 'saveGroups', authUid: AUTHENTICATION_SOURCE.AUTH_SOURCE_UID, groupsDN: Groups.join('|')},
success: function(r) {
var response = Ext.util.JSON.decode(r.responseText);
if (response.status == 'OK') {
treeGroups.getLoader().load(treeGroups.root);
}
else {
alert(response.message);
}
}
});
}
}]
});
treeGroups.loader.on('load', function() {
treeGroups.getRootNode().expand(true);
if (!isSaved) {
isSaved = true;
treeGroups.disabled = false;
treeGroups.buttons[0].disabled = false;
Ext.Msg.show({
title: 'Changes saved.',
msg: 'All changes have been saved.',
icon: Ext.Msg.INFO,
minWidth: 200,
buttons: Ext.Msg.OK
});
}
});
departmentsPanel = new Ext.Panel({
title: 'Synchronize Departments',
autoWidth: true,
layout: 'hbox',
defaults: {flex: 1},
layoutConfig: {align: 'stretch'},
items: [treeDepartments],
viewConfig: {forceFit: true}
});
groupsPanel = new Ext.Panel({
title: 'Synchronize Groups',
autoWidth: true,
layout: 'hbox',
defaults: {flex: 1},
layoutConfig: {align: 'stretch'},
items: [treeGroups],
viewConfig: {forceFit: true}
});
tabsPanel = new Ext.TabPanel({
region: 'center',
activeTab: AUTHENTICATION_SOURCE.CURRENT_TAB,
items:[departmentsPanel, groupsPanel],
listeners:{
beforetabchange: function(p, t, c) {
if (typeof(t.body) == 'undefined') {
isFirstTime = true;
}
},
tabchange: function(p, t) {
if (!isFirstTime) {
switch(t.title){
case 'Synchronize Departments':
treeDepartments.getLoader().load(treeDepartments.root);
break;
case 'Synchronize Groups':
treeGroups.getLoader().load(treeGroups.root);
break;
}
}
else {
isFirstTime = false;
}
}
}
});
viewport = new Ext.Viewport({
layout: 'border',
items: [northPanel, tabsPanel]
});
}
catch (error) {
alert('->' + error + '<-');
}
});

View File

@@ -0,0 +1,237 @@
var ldapFormAnonymousOnChange = function (combo, arrayObject)
{
var flagAnonymous = (combo.getValue() == "1")? true : false;
arrayObject["ldapFormSearchUser"].allowBlank = flagAnonymous;
arrayObject["ldapFormPassword"].allowBlank = flagAnonymous;
arrayObject["ldapFormSearchUser"].setVisible(!flagAnonymous);
arrayObject["ldapFormPassword"].setVisible(!flagAnonymous);
};
var ldapFormId = new Ext.form.Hidden({
name: 'AUTH_SOURCE_UID',
id: 'AUTH_SOURCE_UID'
});
var ldapFormName = new Ext.form.TextField({
fieldLabel: '<span style="color: red">*</span>' + _('ID_NAME'),
name: 'AUTH_SOURCE_NAME',
id: 'AUTH_SOURCE_NAME',
autoCreate: {tag: 'input', type: 'text', maxlength: '50'},
allowBlank: false,
width: 210
});
var ldapFormProvider = new Ext.form.Hidden({
name: 'AUTH_SOURCE_PROVIDER',
id: 'AUTH_SOURCE_PROVIDER'
});
var ldapFormType = new Ext.form.ComboBox({
valueField: 'ID',
displayField: 'VALUE',
value: 'ldap',
fieldLabel: '<span style="color: red">*</span>' + _('ID_TYPE'),
typeAhead: true,
forceSelection: true,
triggerAction: 'all',
editable: true,
name: 'LDAP_TYPE',
id: 'LDAP_TYPE',
width: 130,
allowBlank: false,
store: [["ldap", "OpenLDAP"], ["ad", "Active Directory"], ["ds", "389 DS"]],
listeners:{
select: function(combo, record) {
ldapFormIdentifier.setValue((combo.getValue() == "ad")? "samaccountname" : "uid");
}
}
});
var ldapFormAutoRegister = new Ext.form.ComboBox({
valueField: 'ID',
displayField: 'VALUE',
value: '0',
fieldLabel: '<span style="color: red">*</span>' + "Enable automatic register",
typeAhead: true,
forceSelection: true,
triggerAction: 'all',
editable: true,
name: 'AUTH_SOURCE_AUTO_REGISTER',
id: 'AUTH_SOURCE_AUTO_REGISTER',
width: 130,
allowBlank: false,
store: [['0',_('ID_NO')],['1',_('ID_YES')]]
});
var ldapFormServerName = new Ext.form.TextField({
fieldLabel: '<span style="color: red">*</span>' + "Server Address",
name: 'AUTH_SOURCE_SERVER_NAME',
id: 'AUTH_SOURCE_SERVER_NAME',
autoCreate: {tag: 'input', type: 'text', maxlength: '50'},
allowBlank: false,
width: 210
});
var ldapFormPort = new Ext.form.NumberField({
fieldLabel: '<span style="color: red">*</span>' + _('ID_PORT'),
name: 'AUTH_SOURCE_PORT',
id: 'AUTH_SOURCE_PORT',
allowBlank: true,
width: 130,
value: '389',
autoCreate: {tag: 'input', type: 'text', maxlength: '5'}
});
var ldapFormTls = new Ext.form.ComboBox({
valueField: 'ID',
displayField: 'VALUE',
fieldLabel: '<span style="color: red">*</span>' + _('ID_ENABLED_TLS'),
typeAhead: true,
forceSelection: true,
triggerAction: 'all',
editable: true,
name: 'AUTH_SOURCE_ENABLED_TLS',
id: 'AUTH_SOURCE_ENABLED_TLS',
width: 130,
allowBlank: false,
value: '0',
store: [['0',_('ID_NO')],['1',_('ID_YES')]]
});
var ldapFormBaseDN = new Ext.form.TextField({
fieldLabel: '<span style="color: red">*</span>' + _('ID_BASE_DN'),
name: 'AUTH_SOURCE_BASE_DN',
id: 'AUTH_SOURCE_BASE_DN',
autoCreate: {tag: 'input', type: 'text', maxlength: '128'},
allowBlank: false,
width: 210
});
var ldapFormAnonymous = new Ext.form.ComboBox({
valueField: 'ID',
displayField: 'VALUE',
fieldLabel: '<span style="color: red">*</span>' + _('ID_ANONYMOUS'),
typeAhead: true,
forceSelection: true,
triggerAction: 'all',
editable: true,
name: 'AUTH_ANONYMOUS',
id: 'AUTH_ANONYMOUS',
width: 130,
allowBlank: false,
value: '0',
store: [['0',_('ID_NO')],['1',_('ID_YES')]],
listeners:{
select: function(combo, record) {
var arrayObject = [];
arrayObject["ldapFormSearchUser"] = ldapFormSearchUser;
arrayObject["ldapFormPassword"] = ldapFormPassword;
ldapFormAnonymousOnChange(combo, arrayObject);
}
}
});
var ldapFormSearchUser = new Ext.form.TextField({
fieldLabel: '<span style="color: red">*</span>' + _('ID_USERNAME'),
name: 'AUTH_SOURCE_SEARCH_USER',
id: 'AUTH_SOURCE_SEARCH_USER',
autoCreate: {tag: 'input', type: 'text', maxlength: '128'},
allowBlank: false,
width: 210
});
var ldapFormPassword = new Ext.form.TextField({
fieldLabel: '<span style="color: red">*</span>' + _('ID_PASSWORD'),
inputType: 'password',
name: 'AUTH_SOURCE_PASSWORD',
id: 'AUTH_SOURCE_PASSWORD',
autoCreate: {tag: 'input', type: 'text', maxlength: '32'},
allowBlank: false,
width: 210
});
var ldapFormIdentifier = new Ext.form.TextField({
fieldLabel: '<span style="color: red">*</span>' + "User Identifier",
name: 'AUTH_SOURCE_IDENTIFIER_FOR_USER',
id: 'AUTH_SOURCE_IDENTIFIER_FOR_USER',
autoCreate: {tag: 'input', type: 'text', maxlength: '20'},
allowBlank: false,
width: 210,
value: 'uid'
});
var ldapFormUsersFilter = new Ext.form.TextField({
fieldLabel: "Filter to search users",
name: 'AUTH_SOURCE_USERS_FILTER',
id: 'AUTH_SOURCE_USERS_FILTER',
autoCreate: {tag: 'input', type: 'text', maxlength: '200'},
allowBlank: true,
width: 210
});
var ldapFormRetiredEmployees = new Ext.form.TextField({
fieldLabel: "OU for Retired Employees OU",
name: 'AUTH_SOURCE_RETIRED_OU',
id: 'AUTH_SOURCE_RETIRED_OU',
autoCreate: {tag: 'input', type: 'text', maxlength: '128'},
allowBlank: true,
width: 210
});
var ldapFormAttrinuteIds = new Ext.form.Hidden({
name: 'AUTH_SOURCE_ATTRIBUTE_IDS',
id: 'AUTH_SOURCE_ATTRIBUTE_IDS'
});
var ldapFormShowGrid = new Ext.form.Hidden({
name: 'AUTH_SOURCE_SHOWGRID',
id: 'AUTH_SOURCE_SHOWGRID'
});
var ldapFormGridText = new Ext.form.Hidden({
name: 'AUTH_SOURCE_GRID_TEXT',
id: 'AUTH_SOURCE_GRID_TEXT'
});
///////////////////////////////////////////////////////////////////////////////////////
var ldapFormData = new Ext.form.FieldSet({
style: {
border: "0px"
},
labelWidth : 170,
items :[
ldapFormId, ldapFormName, ldapFormProvider, ldapFormType, ldapFormAutoRegister, ldapFormServerName,
ldapFormPort, ldapFormTls, ldapFormBaseDN, ldapFormAnonymous, ldapFormSearchUser, ldapFormPassword,
ldapFormIdentifier, ldapFormUsersFilter, ldapFormRetiredEmployees,
{
xtype: 'label',
fieldLabel: ' ',
id:'passwordReview',
width: 300,
style: 'font: 9px tahoma,arial,helvetica,sans-serif;',
text: "(Default set to (&(!(objectClass=organizationalUnit))))",
labelSeparator: ''
}, ldapFormAttrinuteIds, ldapFormShowGrid, ldapFormGridText
]
});
var pnlData = new Ext.Panel({
height: 425,
bodyStyle: "border-top: 0px; padding-top: 10px;",
title: "<div style=\"height: 20px;\">" + _("ID_INFORMATION") + "</div>",
items: [ldapFormData]
});

View File

@@ -0,0 +1,486 @@
Ext.onReady(function() {
//Head - Add style
var nhead = document.getElementsByTagName("head")[0];
var nstyle = document.createElement("style");
var strCss = "\
.ext-mb-ok {\
background: transparent url(/images/dialog-ok-apply.png) no-repeat top left;\
}";
nstyle.setAttribute("type", "text/css");
nhead.appendChild(nstyle);
if (nstyle.styleSheet) {
//IE
nstyle.styleSheet.cssText = strCss;
} else {
//Others browsers
nstyle.appendChild(document.createTextNode(strCss));
}
//Init
Ext.QuickTips.init();
Ext.form.Field.prototype.msgTarget = 'side';
var ldapGridProxy = new Ext.data.HttpProxy({
method: 'POST',
api: {
read : 'ldapAdvancedProxy.php?functionAccion=ldapGrid&tipo=read',
create : 'ldapAdvancedProxy.php?functionAccion=ldapGrid&tipo=create',
save : 'ldapAdvancedProxy.php?functionAccion=ldapGrid&tipo=save',
destroy : 'ldapAdvancedProxy.php?functionAccion=ldapGrid&tipo=destroy',
update : 'ldapAdvancedProxy.php?functionAccion=ldapGrid&tipo=update'
}
});
var ldapGridReader = new Ext.data.JsonReader({
totalProperty: 'total',
successProperty: 'success',
messageProperty: 'message',
idProperty: 'ID',
root: 'data',
fields: [
{name: 'ID'},
{name: 'ATTRIBUTE_LDAP'},
{name: 'ATTRIBUTE_USER'}
]
});
var ldapGridWriter = new Ext.data.JsonWriter({
encode: true,
writeAllFields: true,
listful: true
});
var ldapGridStore = new Ext.data.Store({
proxy: ldapGridProxy,
reader: ldapGridReader,
writer: ldapGridWriter,
autoSave: true,
listeners:{
load: function() {
//
}
}
});
Ext.data.DataProxy.addListener('beforewrite', function(proxy, action) {
/*
if(action != 'create')
{
Ext.MessageBox.show({
msg: 'Guardando su información, espere un momento por favor',
progressText: 'Saving...',
width:300,
wait:true,
waitConfig: {interval:200},
animEl: 'mb7'
});
}
*/
});
Ext.data.DataProxy.addListener('write', function(proxy, action, result, res, rs) {
//
});
Ext.data.DataProxy.addListener('exception', function(proxy, type, action, options, res) {
/*
Ext.MessageBox.show({
title: 'Error de almacenamiento',
msg: 'Error al almacenar datos',
buttons: Ext.MessageBox.OK,
animEl: 'mb9',
icon: Ext.MessageBox.ERROR
});
*/
});
var ldapGridFieldLdap = new Ext.form.TextField({
name: 'DELETE1',
id: 'DELETE1',
autoCreate: {tag: 'input', type: 'text', maxlength: '50'}
});
var values = Fields.AUTH_SOURCE_ATTRIBUTE_IDS;
values = values.trim();
var allValues = new Array();
var comboValues = new Array();
allValues = values.split('|');
for (var i = 0; i < allValues.length; i++) {
if (allValues[i] != '') {
comboValues.push([allValues[i],allValues[i]]);
}
}
var ldapGridFieldUser = new Ext.form.ComboBox({
valueField: 'ID',
displayField: 'VALUE',
value: '0',
typeAhead: true,
forceSelection: true,
triggerAction: 'all',
name: 'DELETE2',
id: 'DELETE2',
editable: true,
width: 130,
store: comboValues
});
var ldapGridCol = [
{
id: 'ID',
dataIndex: 'ID',
sortable: true,
hidden: true,
hideable:false
},{
id: 'ATTRIBUTE_LDAP',
header: "LDAP Field",
dataIndex: 'ATTRIBUTE_LDAP',
width: 10,
sortable: true,
editor: ldapGridFieldLdap
},
{
id: 'ATTRIBUTE_USER',
header: "User Field",
dataIndex: 'ATTRIBUTE_USER',
width: 10,
sortable: true,
editor: ldapGridFieldUser
}
];
var ldapGridEditor = new Ext.ux.grid.RowEditor({
saveText: _('ID_SAVE'),
listeners: {
canceledit: function(grid,obj){
//
},
afteredit: function(grid,obj,record){
//
}
}
});
var ldapGrid = new Ext.grid.GridPanel({
store: ldapGridStore,
loadMask : true,
plugins: [ldapGridEditor],
frame: true,
height: 365,
columns : ldapGridCol,
autoShow: true,
autoFill:true,
nocache: true,
autoWidth: true,
stripeRows: true,
stateful: true,
animCollapse: true,
enableColumnResize: true,
enableHdMenu: true,
columnLines: true,
tbar: [{
text: _('ID_ADD'),
iconCls: ' x-btn-text button_menu_ext ss_sprite ss_add',
handler: onAdd
}, '-', {
text: _('ID_REMOVE'),
iconCls: ' x-btn-text button_menu_ext ss_sprite ss_delete',
handler: onDelete
}],
viewConfig: {
forceFit: true
}
});
function onAdd(btn, ev) {
var row = new ldapGrid.store.recordType({
ID: 'NUEVO',
ATTRIBUTE_LDAP: '',
ATTRIBUTE_USER: ''
});
var length = ldapGrid.getStore().data.length;
ldapGridEditor.stopEditing();
ldapGridStore.insert(length, row);
ldapGrid.getView().refresh();
ldapGrid.getSelectionModel().selectRow(length);
ldapGridEditor.startEditing(length);
}
function onDelete() {
var rec = ldapGrid.getSelectionModel().getSelected();
if (!rec) {
return false;
}
ldapGrid.store.remove(rec);
}
///////////////////////////////////////////////////////////////////////////////////////
var pnlAttribute = new Ext.Panel({
height: 425,
bodyStyle: "border-top: 0px; padding: 10px;",
title: "<div id=\"containerChkAttribute\" style=\"height: 20px;\"></div>",
items: [ldapGrid],
listeners: {
afterrender: function (panel)
{
var chk = new Ext.form.Checkbox({
id: "AUTH_SOURCE_SHOWGRID-checkbox",
name: "AUTH_SOURCE_SHOWGRID-checkbox",
boxLabel: "Match attributes to sync",
renderTo: "containerChkAttribute",
listeners: {
check: function (chk, checked)
{
ldapGrid.setVisible(checked);
}
}
});
}
}
});
///////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////
var ldapFormSubmit = function ()
{
var itemsLdapGrid = ldapGrid.store.data.items;
var arrayDetail = [];
for (var i = 0; i <= itemsLdapGrid.length - 1; i++) {
var newItem = {
attributeLdap: itemsLdapGrid[i].data.ATTRIBUTE_LDAP,
attributeUser: itemsLdapGrid[i].data.ATTRIBUTE_USER
};
arrayDetail[i] = newItem;
}
Ext.get("LDAP_TYPE").dom.value = ldapFormType.getValue();
Ext.get("AUTH_SOURCE_AUTO_REGISTER").dom.value = ldapFormAutoRegister.getValue();
Ext.get("AUTH_SOURCE_ENABLED_TLS").dom.value = ldapFormTls.getValue();
Ext.get("AUTH_ANONYMOUS").dom.value = ldapFormAnonymous.getValue();
Ext.get("AUTH_SOURCE_GRID_TEXT").dom.value = Ext.util.JSON.encode(arrayDetail);
ldapForm.getForm().submit({
method: "POST",
waitTitle: "Connecting...",
waitMsg: _("ID_SAVING"),
success: function (form, action)
{
redirectPage("../authSources/authSources_List?" + randomNum(1, 9999999));
},
failure: function (form, action)
{
//
}
});
};
var ldapForm = new Ext.FormPanel({
url : 'ldapAdvancedProxy.php?functionAccion=ldapSave',
frame : true,
title : "Authentication Source Information",
border : false,
autoScroll: true,
monitorValid : true,
items:[
{
layout:'column',
autoScroll:true,
bodyStyle: "border: 0px;",
items:[{
columnWidth: 0.5,
bodyStyle: "border: 0px;",
items: [pnlData]
},{
columnWidth: 0.5,
bodyStyle: "border: 0px; padding-left: 10px;",
items: [pnlAttribute]
}]
},
{
layout: "column",
autoScroll: true,
bodyStyle: "margin-top: 0.5em; border: 0px;",
items: [
{
columnWidth: 1,
bodyStyle: "border: 0px;",
html: "Minimum data required to run the \"Test Connection\": \"Server Address, " + _("ID_PORT") + ", " + _("ID_ENABLED_TLS") + ", " + _("ID_ANONYMOUS") + ", " + _("ID_USERNAME") + ", " + _("ID_PASSWORD") + "\""
}
]
}
],
buttons: [
{
text: _("ID_SAVE"),
formBind: true,
handler: function ()
{
if (typeof(Fields.AUTH_SOURCE_UID) != "undefined" && typeof(Fields.AUTH_SOURCE_BASE_DN) != "undefined" && ldapFormBaseDN.getValue() != Fields.AUTH_SOURCE_BASE_DN) {
Ext.Ajax.request({
url: "ldapAdvancedProxy.php",
method: "POST",
params: {
functionAccion: "ldapVerifyIfExistsRecordsInDb",
authenticationSourceUid: Fields.AUTH_SOURCE_UID
},
success: function (response, opts)
{
var dataResponse = Ext.util.JSON.decode(response.responseText);
if (dataResponse.status) {
if (dataResponse.status == "OK" && dataResponse.existsRecords + "" == "1") {
Ext.MessageBox.confirm(
_("ID_CONFIRM"),
"System has detected that there are synchronized elements with the \"Authentication Source \" you are editing, if you change the \"Base DN\" those synchronized elements could have problems. Are you sure you want to change the \"Base DN\"?",
function (btn)
{
if (btn == "yes") {
ldapFormSubmit();
}
}
);
} else {
ldapFormSubmit();
}
} else {
ldapFormSubmit();
}
},
failure: function (response, opts)
{
//
}
});
} else {
ldapFormSubmit();
}
}
},
{
text: "Test connection",
formBind: true,
handler: function ()
{
var loadMaskAux = new Ext.LoadMask(Ext.getBody(), {msg: "Testing connection..."});
loadMaskAux.show();
Ext.Ajax.request({
url: "ldapAdvancedProxy.php",
method: "POST",
params: {
functionAccion: "ldapTestConnection",
AUTH_SOURCE_SERVER_NAME: Ext.getCmp("AUTH_SOURCE_SERVER_NAME").getValue(),
AUTH_SOURCE_PORT: Ext.getCmp("AUTH_SOURCE_PORT").getValue(),
AUTH_SOURCE_ENABLED_TLS: Ext.getCmp("AUTH_SOURCE_ENABLED_TLS").getValue(),
AUTH_ANONYMOUS: Ext.getCmp("AUTH_ANONYMOUS").getValue(),
AUTH_SOURCE_SEARCH_USER: Ext.getCmp("AUTH_SOURCE_SEARCH_USER").getValue(),
AUTH_SOURCE_PASSWORD: Ext.getCmp("AUTH_SOURCE_PASSWORD").getValue(),
AUTH_SOURCE_VERSION: 3
},
success: function (response, opts)
{
var dataResponse = Ext.util.JSON.decode(response.responseText);
if (dataResponse.status) {
Ext.MessageBox.show({
title: "Test connection",
msg: (dataResponse.status == "OK")? "Successfully connected" : dataResponse.message,
icon: (dataResponse.status == "OK")? "ext-mb-ok" : Ext.MessageBox.ERROR,
buttons: {ok: _("ID_ACCEPT")}
});
}
loadMaskAux.hide();
},
failure: function (response, opts)
{
loadMaskAux.hide();
}
});
}
},
{
text: _("ID_CANCEL"),
handler: function ()
{
redirectPage("../authSources/authSources_List?" + randomNum(1, 9999999));
}
}
]
});
var gridAttribute = '';
if (typeof(Fields.AUTH_SOURCE_UID) == 'undefined' || Fields.AUTH_SOURCE_UID == '') {
ldapFormProvider.setValue(Fields.AUTH_SOURCE_PROVIDER);
ldapFormAttrinuteIds.setValue(Fields.AUTH_SOURCE_ATTRIBUTE_IDS);
gridAttribute = '';
} else {
ldapFormId.setValue(Fields.AUTH_SOURCE_UID);
ldapFormName.setValue(Fields.AUTH_SOURCE_NAME);
ldapFormProvider.setValue(Fields.AUTH_SOURCE_PROVIDER);
ldapFormType.setValue(Fields.LDAP_TYPE);
ldapFormAutoRegister.setValue(Fields.AUTH_SOURCE_AUTO_REGISTER);
ldapFormServerName.setValue(Fields.AUTH_SOURCE_SERVER_NAME);
ldapFormPort.setValue(Fields.AUTH_SOURCE_PORT);
ldapFormTls.setValue(Fields.AUTH_SOURCE_ENABLED_TLS);
ldapFormBaseDN.setValue(Fields.AUTH_SOURCE_BASE_DN);
ldapFormAnonymous.setValue(Fields.AUTH_ANONYMOUS);
ldapFormSearchUser.setValue(Fields.AUTH_SOURCE_SEARCH_USER);
ldapFormPassword.setValue(Fields.AUTH_SOURCE_PASSWORD);
ldapFormIdentifier.setValue(Fields.AUTH_SOURCE_IDENTIFIER_FOR_USER);
ldapFormUsersFilter.setValue(Fields.AUTH_SOURCE_USERS_FILTER);
ldapFormRetiredEmployees.setValue(Fields.AUTH_SOURCE_RETIRED_OU);
if (typeof(Fields.AUTH_SOURCE_GRID_ATTRIBUTE) != 'undefined') {
gridAttribute = Ext.util.JSON.encode(Fields.AUTH_SOURCE_GRID_ATTRIBUTE);
}
}
ldapGridStore.load({
params:{'data': gridAttribute}
});
var arrayObject = [];
arrayObject["ldapFormSearchUser"] = ldapFormSearchUser;
arrayObject["ldapFormPassword"] = ldapFormPassword;
ldapFormAnonymousOnChange(ldapFormAnonymous, arrayObject);
new Ext.Viewport({
layout:'fit',
border: false,
items: [ldapForm]
});
ldapFormProvider.setValue(Fields.AUTH_SOURCE_PROVIDER);
ldapFormAttrinuteIds.setValue(Fields.AUTH_SOURCE_ATTRIBUTE_IDS);
Ext.getCmp("AUTH_SOURCE_SHOWGRID-checkbox").setValue(typeof(Fields.AUTH_SOURCE_GRID_ATTRIBUTE) != "undefined");
ldapGrid.setVisible(typeof(Fields.AUTH_SOURCE_GRID_ATTRIBUTE) != "undefined");
});

View File

@@ -0,0 +1,317 @@
Ext.onReady(function() {
Ext.QuickTips.init();
Ext.form.Field.prototype.msgTarget = 'side';
/////////////////////////////////
///// PANEL SEARCH USERS
/////////////////////////////////
//Variables
var pageSize = parseInt(CONFIG.pageSize);
//Components
var searchUsersText = new Ext.form.TextField({
width: 280,
allowBlank: true,
listeners:{
specialkey:function(f,o){
if(o.getKey()==13){
storeGridSearch.load({ params: {sKeyword: searchUsersText.getValue()} });
}
}
}
});
var compSearchUsers = new Ext.form.CompositeField({
fieldLabel: 'Keyword',
labelStyle: 'width:100px; padding: 3px 3px 3px 15px;',
items: [
searchUsersText,
{
xtype: 'button',
iconCls: 'button_menu_ext ss_sprite ss_magnifier',
text: 'Search',
width : 40,
handler: function(){
storeGridSearch.load({ params: {sKeyword: searchUsersText.getValue()} });
}
}
]
});
var panelSearch = new Ext.Panel({
region: 'north',
height: 65,
margins: '0 0 0 0',
frame: true,
labelAlign: 'left',
align: 'center',
labelStyle: 'font-weight:bold; padding: 3px 3px 3px 15px;',
title: "<div><div style=\"float: left;\">" + "Search for user" + "</div><div id=\"divBack\" style=\"float: right;\"></div><div style=\"clear: both; height: 0; line-height:0; font-size: 0;\"></div></div>",
items: [
new Ext.FormPanel({
labelWidth : 120,
labelStyle: 'padding: 3px 3px 3px 15px;',
autoScroll: false,
monitorValid : true,
bodyStyle: "border: 0px;",
items:[
compSearchUsers
]
})
],
listeners: {
afterrender: function (panel)
{
var btn = new Ext.Button({
text: _("ID_BACK"),
iconCls: "button_menu_ext ss_sprite ss_arrow_left",
renderTo: "divBack",
handler: function ()
{
redirectPage("authSources_List");
}
});
}
}
});
/////////////////////////////////
///// GRID SEARCH USERS
/////////////////////////////////
var storeGridSearch = new Ext.data.JsonStore({
proxy: new Ext.data.HttpProxy({
method: 'POST',
url: 'ldapAdvancedProxy.php',
timeout: 240000
}),
autoDestroy: true,
remoteSort: false,
totalProperty: "resultTotal",
root: "resultRoot",
fields: [
'sUsername',
'sFullname',
'sFirstname',
'sLastname',
'sEmail',
'sCategory',
'sDN',
'sManagerDN',
'STATUS',
'IMPORT'
],
listeners: {
beforeload: function (store, opt)
{
this.baseParams = {
functionAccion: "searchUsers",
sUID: Fields.AUTH_SOURCE_UID,
sKeyword: searchUsersText.getValue(),
pageSize: pageSize
};
},
load: function (store, record, opt)
{
Ext.getCmp('BUTTON_IMPORT').disable();
}
}
});
storeGridSearch.setDefaultSort('sUsername', 'asc');
var tbarSearch = [
{
id: 'BUTTON_IMPORT',
text: 'Import',
iconCls: 'button_menu_ext ss_sprite ss_group_go ',
disabled: true,
handler: function () {
rowSelected = gridSearch.getSelectionModel().getSelected();
var auxUsersSelect = gridSearch.getSelectionModel().selections.items;
var countSelect = auxUsersSelect.length;
if (countSelect != 0) {
var con = 0;
var usersSelect = new Array();
var numberCases = '';
while (con < countSelect) {
if (auxUsersSelect[con].data.IMPORT == 1) {
var newArray = {
sUsername : auxUsersSelect[con].data.sUsername,
sFullname : auxUsersSelect[con].data.sFullname,
sFirstname : auxUsersSelect[con].data.sFirstname,
sLastname : auxUsersSelect[con].data.sLastname,
sEmail : auxUsersSelect[con].data.sEmail,
sCategory : auxUsersSelect[con].data.sCategory,
sDN : auxUsersSelect[con].data.sDN,
sManagerDN : auxUsersSelect[con].data.sManagerDN
};
usersSelect.push(newArray);
}
con++;
}
var countImport = usersSelect.length;
if (countImport != 0) {
Ext.MessageBox.confirm('Confirm', 'Are you sure you want to import the selected users?', function (val) {
if (val == 'yes') {
Ext.MessageBox.show({
msg: 'Importing Users...',
progressText: 'Saving...',
width:300,
wait:true,
waitConfig: {interval:200},
animEl: 'mb7'
});
Ext.Ajax.request({
params: {
'UsersImport': Ext.encode(usersSelect),
'functionAccion': 'importUsers',
'AUTH_SOURCE_UID': Fields.AUTH_SOURCE_UID
},
url : 'ldapAdvancedProxy.php',
success: function (returnData) {
var resp = Ext.decode(returnData.responseText);
Ext.MessageBox.hide();
if (resp.success) {
Ext.MessageBox.show({
title: 'Import Users',
msg: 'Imported Successfully',
buttons: Ext.MessageBox.OK,
animEl: 'mb9',
icon: Ext.MessageBox.INFO
});
redirectPage('../users/users_List');
}
},
failure: function () {
Ext.MessageBox.alert('ERROR', 'Error in server');
}
});
}
});
} else {
PMExt.notify('WARNING', 'You do not select any user to import');
}
} else {
PMExt.notify('WARNING', 'You do not select any user to import');
}
}
}
];
//var pageSize = parseInt(CONFIG.pageSize);
//
//var storePageSize = new Ext.data.SimpleStore({
// autoLoad: true,
// fields: ['size'],
// data:[['20'],['30'],['40'],['50'],['100']]
//});
//
//var comboPageSize = new Ext.form.ComboBox({
// typeAhead : false,
// mode : 'local',
// triggerAction : 'all',
// store: storePageSize,
// valueField: 'size',
// displayField: 'size',
// width: 50,
// editable: false,
// listeners:{
// select: function(c,d,i){
// pagingSearchList.pageSize = parseInt(d.data['size']);
// pagingSearchList.moveFirst();
// }
// }
//});
//
//comboPageSize.setValue(pageSize);
//
//var pagingSearchList = new Ext.PagingToolbar({
// pageSize : 1000,
// store : storeGridSearch,
// displayInfo : true,
// autoHeight : true,
// displayMsg : 'Ldap Users' + ' {0} - {1} ' + 'of' + ' {2}',
// emptyMsg : ' There are no LDAP Users '//,
// //items: [
// //comboPageSize
// //]
//});
var pagingSearchList = new Ext.PagingToolbar({
pageSize: pageSize,
store: storeGridSearch,
displayInfo: true,
displayMsg: "LDAP Users" + " {0} - {1} " + "of" + " {2}",
emptyMsg: "There are no LDAP Users"
});
var selectModelList = new Ext.grid.CheckboxSelectionModel({
listeners: {
selectionchange: function() {
if (selectModelList.getCount() > 0) {
Ext.getCmp('BUTTON_IMPORT').enable();
} else {
Ext.getCmp('BUTTON_IMPORT').disable();
}
}
}
});
var gridSearch = new Ext.grid.GridPanel({
store : storeGridSearch,
tbar : tbarSearch,
bbar : pagingSearchList,
region: 'center',
margins: '0 0 0 0',
loadMask : true,
sm: selectModelList,
cm: new Ext.grid.ColumnModel({
defaults: {
sortable: true
},
columns: [
selectModelList,
{header: 'Username', width: 15, dataIndex: 'sUsername', sortable: true},
{header: 'First Name', width: 15, dataIndex: 'sFirstname', sortable: true},
{header: 'Last Name', width: 15, dataIndex: 'sLastname', sortable: true},
{header: 'Email', width: 15, dataIndex: 'sEmail', sortable: true},
{header: 'Distinguished Name', width: 35, dataIndex: 'sDN'},
{dataIndex: "STATUS", header: _("ID_STATUS"), width: 10, css: "background: #D4D4D4; font-weight: bold;", align: "center", renderer: renderStatus}
]
}),
border: false,
autoShow: true,
autoFill:true,
nocache: true,
autoWidth: true,
stripeRows: true,
stateful: true,
animCollapse: true,
enableColumnResize: true,
enableHdMenu: true,
columnLines: true,
viewConfig: {
forceFit:true,
emptyText: '<div align="center"><b> ' + ' There are no LDAP Users ' + ' </b></div>'
}
});
new Ext.Viewport({
layout:'border',
border: false,
items: [panelSearch, gridSearch]
});
});

View File

@@ -0,0 +1,15 @@
function redirectPage(page){
window.location = page;
}
function randomNum(inf, sup){
numPos = sup - inf;
aleat = Math.random() * numPos;
aleat = Math.round(aleat);
return parseInt(inf) + aleat;
}
function renderStatus (data, metadata, record, rowIndex, columnIndex, store) {
return "<span style=\"color: " + ((record.data.IMPORT == 1)? "#005E20" : "#FF0000") + ";\">" + record.data.STATUS.toUpperCase() + "</span>";
}

View File

@@ -0,0 +1,180 @@
var caseData = '';
var appTitle = new Ext.form.Label({
fieldLabel: "Case Title",
labelStyle: 'font-weight:bold;padding-right:30px;'
});
var process = new Ext.form.Label({
fieldLabel: "Process Uid",
labelStyle: 'font-weight:bold;padding-right:35px;'
});
var processTitle = new Ext.form.Label({
fieldLabel: "Process",
labelStyle: 'font-weight:bold;padding-right:35px;'
});
var appUid = new Ext.form.Label({
fieldLabel: "App Uid",
labelStyle: 'font-weight:bold;padding-right:35px;'
});
var caseNumber = new Ext.form.Label({
fieldLabel: "Case number",
labelStyle: 'font-weight:bold;padding-right:35px;'
});
var initUser = new Ext.form.Label({
fieldLabel: "Init user",
labelStyle: 'font-weight:bold;padding-right:35px;'
});
var finishUser = new Ext.form.Label({
fieldLabel: "Finish user",
labelStyle: 'font-weight:bold;padding-right:35px;'
});
var createDate = new Ext.form.Label({
fieldLabel: "Create date",
labelStyle: 'font-weight:bold;padding-right:35px;'
});
var finishDate = new Ext.form.Label({
fieldLabel: "Finish date",
labelStyle: 'font-weight:bold;padding-right:35px;'
});
var fileName = new Ext.form.Label({
fieldLabel: "File Name",
labelStyle: 'font-weight:bold;padding-right:35px;'
});
var statusCaseWin = new Ext.form.Label({
fieldLabel: "Status",
labelStyle: 'font-weight:bold;padding-right:35px;'
});
var formCase = new Ext.FormPanel({
labelWidth : 120,
labelAlign : 'right',
autoScroll: true,
frame: true,
bodyStyle : 'padding-top:20px;padding-left:20px;',
items:[
appTitle,
caseNumber,
processTitle,
initUser,
finishUser,
createDate,
finishDate,
fileName,
statusCaseWin
],
buttons:[{
text : "Restore case",
id: 'BUTTON_UNARCHIVE_CASE',
iconCls: 'button_menu_ext ss_sprite ss_folder_go',
formBind : true,
handler : function(){
if (caseData!='') {
Ext.MessageBox.confirm("Confirm", "Are you sure you want to restore the case?", function (val) {
if (val == 'yes') {
dataCase = caseData;
Ext.MessageBox.show({
msg: "Restoring case" + ' ' + dataCase.CASE_NUMBER + ' ...',
progressText: 'Saving...',
width:300,
wait:true,
waitConfig: {interval:200},
animEl: 'mb7'
});
Ext.Ajax.request({
params: {
'APP_UID': dataCase.APP_UID,
'FILENAME_TAR': dataCase.FILENAME_TAR,
'functionExecute': 'unarchiveCase'
},
url : 'controllers/searchListProxy.php',
success: function (returnData) {
Ext.MessageBox.hide();
var resp = Ext.decode(returnData.responseText);
if (resp.success) {
Ext.MessageBox.show({
title: 'Case Unarhive',
msg: "Case" + ' ' + dataCase.CASE_NUMBER + ' ' + "Restored sucessfully",
buttons: Ext.MessageBox.OK,
animEl: 'mb9',
icon: Ext.MessageBox.INFO
});
} else {
Ext.MessageBox.show({
title: "Error",
msg: resp.message,
buttons: Ext.MessageBox.OK,
animEl: 'mb9',
icon: Ext.MessageBox.ERROR
});
}
storeGridSearch.load();
},
failure: function () {
Ext.MessageBox.alert("Error", "Error in server");
}
});
}
});
}
}
},
{
text : _('ID_CLOSE'),
iconCls: 'button_menu_ext ss_sprite ss_folder_delete',
formBind : true,
handler : function(){
summaryWindow.hide();
}
}]
});
var summaryWindow = new Ext.Window({
title: "Detail Case",
layout: 'fit',
width: 500,
height: 320,
resizable: true,
closable: true,
closeAction : 'hide',
modal: true,
autoScroll:true,
constrain: true,
items: [formCase]
});
function showCaseSummary(dataCase) {
if (dataCase) {
caseData = dataCase;
if(dataCase.STATUS == 'RESTORED'){
Ext.getCmp('BUTTON_UNARCHIVE_CASE').disable();
} else {
Ext.getCmp('BUTTON_UNARCHIVE_CASE').enable();
}
appTitle.setText(dataCase.APP_TITLE, false);
process.setText(dataCase.PRO_UID, false);
processTitle.setText(dataCase.PRO_TITLE, false);
appUid.setText(dataCase.APP_UID, false);
caseNumber.setText(dataCase.CASE_NUMBER, false);
initUser.setText(dataCase.INIT_USER_NAME, false);
finishUser.setText(dataCase.FINISH_USER_NAME, false);
createDate.setText(renderDate(dataCase.CREATE_DATE, false));
finishDate.setText(renderDate(dataCase.FINISH_DATE, false));
fileName.setText(dataCase.FILENAME_TAR+'.tar', false);
statusCaseWin.setText(dataCase.STATUS, false);
summaryWindow.show();
}
}

View File

@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<dynaForm type="grid" name="ldapAdvanced/gridAttribute" enabletemplate="0" mode="">
<attributeLdap type="text" maxlength="64" validate="Any" required="0" readonly="0" size="15" mode="edit" btn_cancel="Cancel">
<en><![CDATA[LDAP Field]]></en>
<pt-BR><![CDATA[Campo LDAP]]></pt-BR>
</attributeLdap>
<attributeUser type="dropdown" required="0" readonly="0" mode="edit" options="Array" btn_cancel="Cancel">
<en><![CDATA[User Field]]></en>
<pt-BR><![CDATA[Campo de Usuário]]></pt-BR>
</attributeUser>
</dynaForm>

View File

@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<dynaForm name="Ldap Setup Form" type="xmlform" width="550">
<TITLE type="title" group="1">
<en><![CDATA[Ldap Advance Plugin]]></en>
<pt-BR><![CDATA[Ldap Plugin Adiantamento]]></pt-BR>
</TITLE>
<HelpText type="subtitle" maxlength="100" size="60">
<en><![CDATA[Please check the User Section in order to Synchronize or Import users from an authentication source using this plugin. There is no further configuration needed.]]></en>
<pt-BR><![CDATA[Por favor verifique a seção do usuário, a fim de sincronizar ou importar usuários a partir de uma fonte de autenticação usando este plugin. Não há nenhuma configuração adicional necessário.]]></pt-BR>
</HelpText>
</dynaForm>

View File

@@ -0,0 +1,215 @@
<?xml version="1.0" encoding="UTF-8"?>
<dynaForm name="authSources/ldap_Edit" type="xmlform" width="650" enabletemplate="0" mode="">
<title type="title">
<en><![CDATA[Authentication Source Information]]></en>
<pt-BR><![CDATA[Informações de fonte de autenticação]]></pt-BR>
</title>
<AUTH_SOURCE_UID type="hidden"/>
<AUTH_SOURCE_NAME type="text" size="50" maxlength="50" required="1">
<en><![CDATA[Name]]></en>
<pt-BR><![CDATA[Nome]]></pt-BR>
</AUTH_SOURCE_NAME>
<AUTH_SOURCE_PROVIDER type="hidden" defaultValue="ldap"/>
<LDAP_TYPE type="dropdown" required="0">
<en><![CDATA[Type]]><option name="ldap"><![CDATA[OpenLDAP]]></option><option name="ad"><![CDATA[Active Directory]]></option><option name="ds"><![CDATA[389 DS]]></option></en>
<pt-BR><![CDATA[Tipo]]><option name="ldap"><![CDATA[OpenLDAP]]></option><option name="ad"><![CDATA[Active Directory]]></option><option name="ds"><![CDATA[389 DS]]></option></pt-BR>
</LDAP_TYPE>
<AUTH_SOURCE_AUTO_REGISTER type="dropdown">
<en><![CDATA[Enable automatic register]]><option name="0"><![CDATA[No]]></option><option name="1"><![CDATA[Yes]]></option></en>
<pt-BR><![CDATA[Ativado automatic registrar]]><option name="0"><![CDATA[Não]]></option><option name="1"><![CDATA[Sim]]></option></pt-BR>
</AUTH_SOURCE_AUTO_REGISTER>
<AUTH_SOURCE_SERVER_NAME type="text" size="50" maxlength="50" required="1">
<en><![CDATA[Server Address]]></en>
<pt-BR><![CDATA[Endereço do Servidor]]></pt-BR>
</AUTH_SOURCE_SERVER_NAME>
<AUTH_SOURCE_PORT type="text" size="5" maxlength="5" required="1" defaultValue="389" validate="Int">
<en><![CDATA[Port]]></en>
<pt-BR><![CDATA[Porto]]></pt-BR>
</AUTH_SOURCE_PORT>
<AUTH_SOURCE_ENABLED_TLS type="dropdown">
<en><![CDATA[Enabled TLS]]><option name="0"><![CDATA[No]]></option><option name="1"><![CDATA[Yes]]></option></en>
<pt-BR><![CDATA[Ativado TLS]]><option name="0"><![CDATA[Não]]></option><option name="1"><![CDATA[Sim]]></option></pt-BR>
</AUTH_SOURCE_ENABLED_TLS>
<AUTH_SOURCE_BASE_DN type="text" size="50" maxlength="128" required="1">
<en><![CDATA[Base DN]]></en>
<pt-BR><![CDATA[Base DN]]></pt-BR>
</AUTH_SOURCE_BASE_DN>
<AUTH_ANONYMOUS type="dropdown">
<en><![CDATA[Anonymous]]><option name="0"><![CDATA[No]]></option><option name="1"><![CDATA[Yes]]></option></en>
<pt-BR><![CDATA[anônimo]]><option name="0"><![CDATA[Não]]></option><option name="1"><![CDATA[Sim]]></option></pt-BR>
</AUTH_ANONYMOUS>
<AUTH_SOURCE_SEARCH_USER type="text" size="50" maxlength="128" required="0">
<en><![CDATA[Username]]></en>
<pt-BR><![CDATA[Usuário]]></pt-BR>
</AUTH_SOURCE_SEARCH_USER>
<AUTH_SOURCE_PASSWORD type="password" size="20" maxlength="32" required="0">
<en><![CDATA[Password]]></en>
<pt-BR><![CDATA[Senha]]></pt-BR>
</AUTH_SOURCE_PASSWORD>
<AUTH_SOURCE_IDENTIFIER_FOR_USER type="text" size="20" maxlength="20" required="1" defaultValue="uid">
<en><![CDATA[User Identifier]]></en>
<pt-BR><![CDATA[Identificador de usuário]]></pt-BR>
</AUTH_SOURCE_IDENTIFIER_FOR_USER>
<AUTH_SOURCE_USERS_FILTER type="text" size="50" maxlength="200" required="0" defaultValue="">
<en><![CDATA[Filter to search users (Default set to (&(!(objectClass=organizationalUnit))))]]></en>
<pt-BR><![CDATA[Filtro para os usuários de busca (Default set to (&(!(objectClass=organizationalUnit))))]]></pt-BR>
</AUTH_SOURCE_USERS_FILTER>
<AUTH_SOURCE_RETIRED_OU type="text" size="50" maxlength="128" required="0">
<en><![CDATA[OU for Retired Employees OU]]></en>
<pt-BR><![CDATA[OU ao Aposentado UO]]></pt-BR>
</AUTH_SOURCE_RETIRED_OU>
<AUTH_SOURCE_ATTRIBUTE_IDS type="hidden"/>
<AUTH_SOURCE_SHOWGRID_FLAG type="hidden"/>
<AUTH_SOURCE_GRID_TEXT type="hidden"/>
<AUTH_SOURCE_ATTRIBUTE_SUBTITLE type="subtitle" enablehtml="1" btn_cancel="Cancel" required="0" readonly="0" savelabel="0">
<en><![CDATA[<input type="checkbox" name="form[AUTH_SOURCE_SHOWGRID]" id="form[AUTH_SOURCE_SHOWGRID]"> Match attributes to sync]]></en>
<pt-BR><![CDATA[<input type="checkbox" name="form[AUTH_SOURCE_SHOWGRID]" id="form[AUTH_SOURCE_SHOWGRID]"> Combinar atributos para sincronizar]]></pt-BR>
</AUTH_SOURCE_ATTRIBUTE_SUBTITLE>
<AUTH_SOURCE_GRID_ATTRIBUTE type="grid" xmlgrid="ldapAdvanced/gridAttribute" addrow="1" deleterow="1" btn_cancel="Cancel"/>
<SUBTITLETESTCONNECTION type="subtitle">
<en><![CDATA[Minimum data required to run the "Test Connection": "Server Address, Port, Enabled TLS, Anonymous, Username, Password"]]></en>
<pt-BR><![CDATA[Dados mínimos necessários para executar o "Test Connection": "Server Address, Port, TLS Habilitado, Anonymous, Nome de usuário, Senha"]]></pt-BR>
</SUBTITLETESTCONNECTION>
<btnSave type="submit">
<en><![CDATA[Save]]></en>
<pt-BR><![CDATA[Salvar]]></pt-BR>
</btnSave>
<BTNTESTCONNECTION type="button" onclick="testConnection();">
<en><![CDATA[Test connection]]></en>
<pt-BR><![CDATA[Teste de conexão]]></pt-BR>
</BTNTESTCONNECTION>
<btnCancel type="button" onclick="history.go(-1);">
<en><![CDATA[Cancel]]></en>
<pt-BR><![CDATA[Cancel]]></pt-BR>
</btnCancel>
<JS type="javascript"><![CDATA[
var dynaformOnload = function() {
getField('AUTH_SOURCE_SHOWGRID').checked = (getField('AUTH_SOURCE_SHOWGRID_FLAG').value == 1) ? true : false;
var fieldGridTd = getField('AUTH_SOURCE_GRID_ATTRIBUTE').parentNode.parentNode.parentNode;
fieldGridTd.style.display = 'none';
leimnud.event.add(getField('AUTH_ANONYMOUS'), 'change', hideShowSearchUser);
leimnud.event.add(getField('LDAP_TYPE'), 'change', hideShowSuggest);
leimnud.event.add(getField('AUTH_SOURCE_SHOWGRID'), 'click', showGrid);
hideShowSearchUser();
hideShowSuggest();
showGrid();
var valuesDrop = getField('AUTH_SOURCE_ATTRIBUTE_IDS').value;
valuesDropArray = valuesDrop.split('|');
for (var i = 0 ; i < valuesDropArray.length ; i++) {
if (valuesDropArray[i] != '') {
var iRows = Number_Rows_Grid('AUTH_SOURCE_GRID_ATTRIBUTE','attributeLdap');
for (cont=1 ; cont<=iRows ; cont=cont+1) {
eval(" var newOption = document.createElement('option'); newOption.text = valuesDropArray[i]; newOption.value = valuesDropArray[i]; try { getField('AUTH_SOURCE_GRID_ATTRIBUTE][" + cont + "][attributeUser').add(newOption, null);} catch(ex) { getField('AUTH_SOURCE_GRID_ATTRIBUTE][" + cont + "][attributeUser').add(newOption);}");
}
}
}
var valuesGrid = getField('AUTH_SOURCE_GRID_TEXT').value;
valuesGridArray = valuesGrid.split('|');
var fil = 1;
for (var i = 0 ; i < valuesGridArray.length ; i++) {
if(valuesGridArray[i] != '')
{
var valuesFielddGrid = valuesGridArray[i].split("/");
getField('AUTH_SOURCE_GRID_ATTRIBUTE][' + fil + '][attributeUser').value = valuesFielddGrid['1'];
fil++;
}
}
function showGrid() {
if (getField('AUTH_SOURCE_SHOWGRID').checked == true) {
fieldGridTd.style.display = 'block';
fieldGridTd.removeAttribute("style",0);
} else {
fieldGridTd.style.display = 'none';
}
}
};
var hideShowSearchUser = function() {
if (getField('AUTH_ANONYMOUS').value == '1') {
hideRowById('AUTH_SOURCE_SEARCH_USER');
hideRowById('AUTH_SOURCE_PASSWORD');
}
else {
showRowById('AUTH_SOURCE_SEARCH_USER');
showRowById('AUTH_SOURCE_PASSWORD');
}
};
var hideShowSuggest = function ()
{
getField("AUTH_SOURCE_IDENTIFIER_FOR_USER").value = (getField("LDAP_TYPE").value == "ad")? "samaccountname" : "uid";
};
var testConnection = function ()
{
var strArgs = "functionAccion=ldapTestConnection&";
strArgs += "AUTH_SOURCE_SERVER_NAME=" + getField("AUTH_SOURCE_SERVER_NAME").value + "&";
strArgs += "AUTH_SOURCE_PORT=" + getField("AUTH_SOURCE_PORT").value + "&";
strArgs += "AUTH_SOURCE_ENABLED_TLS=" + getField("AUTH_SOURCE_ENABLED_TLS").value + "&";
strArgs += "AUTH_ANONYMOUS=" + getField("AUTH_ANONYMOUS").value + "&";
strArgs += "AUTH_SOURCE_SEARCH_USER=" + getField("AUTH_SOURCE_SEARCH_USER").value + "&";
strArgs += "AUTH_SOURCE_PASSWORD=" + getField("AUTH_SOURCE_PASSWORD").value + "&";
strArgs += "AUTH_SOURCE_VERSION=3";
var rpcAjax = new leimnud.module.rpc.xmlhttp({
url: "../ldapAdvanced/controllers/ldapAdvancedProxy.php",
method: "POST",
args: strArgs
});
rpcAjax.callback = function (rpc)
{
var dataResponse = rpc.xmlhttp.responseText.parseJSON();
if (dataResponse.status) {
var panel = new leimnud.module.panel();
panel.options = {
statusBarButtons: [{value: _("ID_ACCEPT")}],
position: {center: true},
size: {
w: 400,
h: 125
},
control: {
close: true,
resize: false
},
fx: {modal: true}
};
panel.setStyle = {
content:{
padding: 10,
paddingLeft: 50,
textAlign: "left",
background: "url(/images/" + ((dataResponse.status == "OK")? "dialog-ok-apply" : "error") + ".png)",
backgroundRepeat: "no-repeat",
backgroundPosition: "2% 10%",
backgroundColor: "transparent",
borderWidth: 0
}
};
panel.make();
panel.addContent((dataResponse.status == "OK")? "Successfully connected" : dataResponse.message);
panel.fixContent();
panel.elements.statusBarButtons[0].onmouseup = function ()
{
panel.remove();
return false;
}.extend(this);
}
}.extend(this);
rpcAjax.make();
};
]]></JS>
</dynaForm>

View File

@@ -0,0 +1 @@
Bandera para habilitar nueva interfaz extjs