Merged in paulis/processmaker/PM-1060 (pull request #2361)
PM-1060: LdapAdvanced Feature in core
This commit is contained in:
167
workflow/engine/bin/ldapcron.php
Normal file
167
workflow/engine/bin/ldapcron.php
Normal 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";
|
||||
}
|
||||
|
||||
489
workflow/engine/bin/ldapcron_single.php
Normal file
489
workflow/engine/bin/ldapcron_single.php
Normal 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";
|
||||
}
|
||||
|
||||
2963
workflow/engine/classes/class.ldapAdvanced.php
Executable file
2963
workflow/engine/classes/class.ldapAdvanced.php
Executable file
File diff suppressed because it is too large
Load Diff
@@ -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" => ""
|
||||
)
|
||||
);
|
||||
|
||||
|
||||
61
workflow/engine/methods/authSources/authSourcesSynchronize.php
Executable file
61
workflow/engine/methods/authSources/authSourcesSynchronize.php
Executable 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");
|
||||
|
||||
472
workflow/engine/methods/authSources/authSourcesSynchronizeAjax.php
Executable file
472
workflow/engine/methods/authSources/authSourcesSynchronizeAjax.php
Executable 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);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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) {
|
||||
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' )
|
||||
) );
|
||||
|
||||
@@ -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
|
||||
/*----------------------------------********---------------------------------*/
|
||||
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 );
|
||||
|
||||
@@ -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) {
|
||||
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' )) );
|
||||
}
|
||||
|
||||
@@ -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) {
|
||||
/*----------------------------------********---------------------------------*/
|
||||
$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();
|
||||
}
|
||||
|
||||
348
workflow/engine/methods/authSources/ldapAdvancedProxy.php
Executable file
348
workflow/engine/methods/authSources/ldapAdvancedProxy.php
Executable 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;
|
||||
}
|
||||
|
||||
651
workflow/engine/methods/services/ldapadvanced.php
Executable file
651
workflow/engine/methods/services/ldapadvanced.php
Executable 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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
46
workflow/engine/templates/authSources/authSourcesListSyn.js
Normal file
46
workflow/engine/templates/authSources/authSourcesListSyn.js
Normal 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);
|
||||
3
workflow/engine/templates/authSources/authSourcesSynchronize.html
Executable file
3
workflow/engine/templates/authSources/authSourcesSynchronize.html
Executable file
@@ -0,0 +1,3 @@
|
||||
<div style="padding: 15px">
|
||||
<div id="list-panel"></div>
|
||||
</div>
|
||||
229
workflow/engine/templates/authSources/authSourcesSynchronize.js
Executable file
229
workflow/engine/templates/authSources/authSourcesSynchronize.js
Executable 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 + '<-');
|
||||
}
|
||||
});
|
||||
|
||||
237
workflow/engine/templates/ldapAdvanced/ldapAdvancedForm.js
Executable file
237
workflow/engine/templates/ldapAdvanced/ldapAdvancedForm.js
Executable 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]
|
||||
});
|
||||
|
||||
486
workflow/engine/templates/ldapAdvanced/ldapAdvancedList.js
Executable file
486
workflow/engine/templates/ldapAdvanced/ldapAdvancedList.js
Executable 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");
|
||||
});
|
||||
|
||||
317
workflow/engine/templates/ldapAdvanced/ldapAdvancedSearch.js
Normal file
317
workflow/engine/templates/ldapAdvanced/ldapAdvancedSearch.js
Normal 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]
|
||||
});
|
||||
});
|
||||
|
||||
15
workflow/engine/templates/ldapAdvanced/library.js
Executable file
15
workflow/engine/templates/ldapAdvanced/library.js
Executable 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>";
|
||||
}
|
||||
|
||||
180
workflow/engine/templates/ldapAdvanced/searchSummary.js
Executable file
180
workflow/engine/templates/ldapAdvanced/searchSummary.js
Executable 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();
|
||||
}
|
||||
}
|
||||
11
workflow/engine/xmlform/ldapAdvanced/gridAttribute.xml
Executable file
11
workflow/engine/xmlform/ldapAdvanced/gridAttribute.xml
Executable 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>
|
||||
11
workflow/engine/xmlform/ldapAdvanced/ldapAdvanced.xml
Executable file
11
workflow/engine/xmlform/ldapAdvanced/ldapAdvanced.xml
Executable 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>
|
||||
215
workflow/engine/xmlform/ldapAdvanced/ldapAdvancedEdit.xml
Executable file
215
workflow/engine/xmlform/ldapAdvanced/ldapAdvancedEdit.xml
Executable 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>
|
||||
|
||||
1
workflow/engine/xmlform/ldapAdvanced/ldapAdvancedFlag
Executable file
1
workflow/engine/xmlform/ldapAdvanced/ldapAdvancedFlag
Executable file
@@ -0,0 +1 @@
|
||||
Bandera para habilitar nueva interfaz extjs
|
||||
Reference in New Issue
Block a user