diff --git a/front/config.form.php b/front/config.form.php
index 0cf545a..d4cf6b0 100644
--- a/front/config.form.php
+++ b/front/config.form.php
@@ -32,11 +32,11 @@
include ('../../../inc/includes.php');
require_once('../inc/config.class.php');
-
Session::checkRight("config", UPDATE);
$PluginSccmConfig = new PluginSccmConfig();
+
if (isset($_POST["update"])) {
if (array_key_exists('sccmdb_password', $_POST)) {
// Password must not be altered.
@@ -44,19 +44,22 @@
}
$PluginSccmConfig->update($_POST);
-
- $sccmDB = new PluginSccmSccmdb();
- if ($sccmDB->connect()) {
- Session::addMessageAfterRedirect("Connexion réussie !.", false, INFO, false);
- } else {
- Session::addMessageAfterRedirect("Connexion incorrecte.", false, ERROR, false);
+ //test connection
+ $sccmDB = new PluginSccmSccmdb();
+ $sccmDB->testConfiguration($_POST['id']);
+ Html::back();
+} else if (isset($_POST["add"])) {
+ if ($PluginSccmConfig->add($_POST)) {
+ if ($_SESSION['glpibackcreated']) {
+ Html::redirect($track->getLinkURL());
+ }
}
-
-
Html::back();
+} else if (isset($_POST["purge"])) {
+ $PluginSccmConfig->delete($_POST, 1);
+ $PluginSccmConfig->redirectToList();
}
-Html::header(__("Setup - SCCM", "sccm"), $_SERVER["PHP_SELF"],
- "plugins", "sccm", "configuration");
-$PluginSccmConfig->showConfigForm($PluginSccmConfig);
-Html::footer();
\ No newline at end of file
+Html::header(PluginSccmConfig::getTypeName(), $_SERVER["PHP_SELF"], "config", PluginSccmMenu::class, "configuration");
+$PluginSccmConfig->display($_GET);
+Html::footer();
diff --git a/front/config.php b/front/config.php
new file mode 100644
index 0000000..6d720c8
--- /dev/null
+++ b/front/config.php
@@ -0,0 +1,36 @@
+.
+ * -------------------------------------------------------------------------
+ * @author François Legastelois
+ * @copyright Copyright (C) 2014-2023 by SCCM plugin team.
+ * @license GPLv3 https://www.gnu.org/licenses/gpl-3.0.html
+ * @link https://github.com/pluginsGLPI/sccm
+ * -------------------------------------------------------------------------
+ */
+
+include ('../../../inc/includes.php');
+
+Html::header(PluginSccmConfig::getTypeName(), $_SERVER["PHP_SELF"], "config", PluginSccmMenu::class, "configuration");
+Search::show('PluginSccmConfig');
+Html::footer();
diff --git a/front/test.php b/front/test.php
index 2223883..98c3c4c 100644
--- a/front/test.php
+++ b/front/test.php
@@ -94,7 +94,7 @@
function viewList() {
global $PluginSccmSccm;
- $PluginSccmSccm->getDevices();
+ $PluginSccmSccm->getDevices("");
echo "
";
foreach ($PluginSccmSccm->devices as $device_values) {
@@ -106,7 +106,7 @@ function viewList() {
function nbPcToInject() {
global $PluginSccmSccm;
- $PluginSccmSccm->getDevices();
+ $PluginSccmSccm->getDevices("");
echo count($PluginSccmSccm->devices);
}
@@ -117,7 +117,7 @@ function testViewHtml($limit, $where) {
$PluginSccmSccm->getDevices($where);
foreach ($PluginSccmSccm->devices as $device_values) {
- $PluginSccmSccmxml = new PluginSccmSccmxml($device_values);
+ $PluginSccmSccmxml = new PluginSccmSccmxml($PluginSccmSccm, $device_values);
$PluginSccmSccmxml->setAccessLog();
$PluginSccmSccmxml->setAccountInfos();
@@ -128,7 +128,7 @@ function testViewHtml($limit, $where) {
$PluginSccmSccmxml->setSoftwares();
$PluginSccmSccmxml->setUsers();
$PluginSccmSccmxml->setNetworks();
- $PluginSccmSccmxml->setDrives();
+ $PluginSccmSccmxml->setStorages();
$SXML = $PluginSccmSccmxml->sxml;
@@ -144,7 +144,7 @@ function testAdd($where) {
$REP_XML = GLPI_PLUGIN_DOC_DIR.'/sccm/xml/';
foreach ($PluginSccmSccm->devices as $device_values) {
- $PluginSccmSccmxml = new PluginSccmSccmxml($device_values);
+ $PluginSccmSccmxml = new PluginSccmSccmxml($PluginSccmSccm, $device_values);
$PluginSccmSccmxml->setAccessLog();
$PluginSccmSccmxml->setAccountInfos();
@@ -155,7 +155,7 @@ function testAdd($where) {
$PluginSccmSccmxml->setSoftwares();
$PluginSccmSccmxml->setUsers();
$PluginSccmSccmxml->setNetworks();
- $PluginSccmSccmxml->setDrives();
+ $PluginSccmSccmxml->setStorages();
$SXML = $PluginSccmSccmxml->sxml;
diff --git a/inc/config.class.php b/inc/config.class.php
index 35f201b..0898270 100644
--- a/inc/config.class.php
+++ b/inc/config.class.php
@@ -36,6 +36,7 @@
class PluginSccmConfig extends CommonDBTM {
static private $_instance = null;
+ public $dohistory = true;
static function canCreate() {
return Session::haveRight('config', UPDATE);
@@ -49,27 +50,99 @@ static function canView() {
return Session::haveRight('config', UPDATE);
}
+ static function canPurge() {
+ return Session::haveRight('config', UPDATE);
+ }
+
static function getTypeName($nb = 0) {
- return __("Setup - SCCM", "sccm");
+ return __("SCCM", "sccm");
}
function getName($with_comment = 0) {
- return __("Interface - SCCM", "sccm");
+ return __("Configuration", "sccm");
}
static function getInstance() {
if (!isset(self::$_instance)) {
self::$_instance = new self();
- if (!self::$_instance->getFromDB(1)) {
- self::$_instance->getEmpty();
- }
}
return self::$_instance;
}
+ public function rawSearchOptions()
+ {
+ $tab = [];
+ $tab[] = [
+ 'id' => 'common',
+ 'name' => self::getTypeName(2)
+ ];
+
+ $tab[] = [
+ 'id' => '1',
+ 'table' => $this->getTable(),
+ 'field' => 'sccm_config_name',
+ 'name' => __('Config name'),
+ 'massiveaction' => false,
+ 'datatype' => 'itemlink'
+ ];
+
+ $tab[] = [
+ 'id' => '2',
+ 'table' => $this->getTable(),
+ 'field' => 'active_sync',
+ 'name' => __('Enabled'),
+ 'massiveaction' => false,
+ 'datatype' => 'bool'
+ ];
+ $tab[] = [
+ 'id' => '3',
+ 'table' => $this->getTable(),
+ 'field' => 'sccm_collection_name',
+ 'name' => __('Collection'),
+ 'massiveaction' => false,
+ 'datatype' => 'string'
+ ];
+ $tab[] = [
+ 'id' => '4',
+ 'table' => $this->getTable(),
+ 'field' => 'sccmdb_host',
+ 'name' => __('Db Host'),
+ 'massiveaction' => false,
+ 'datatype' => 'string'
+ ];
+ $tab[] = [
+ 'id' => '5',
+ 'table' => $this->getTable(),
+ 'field' => 'sccmdb_dbname',
+ 'name' => __('DB Name'),
+ 'massiveaction' => false,
+ 'datatype' => 'string'
+ ];
+ $tab[] = [
+ 'id' => '6',
+ 'table' => $this->getTable(),
+ 'field' => 'sccmdb_user',
+ 'name' => __('DB User'),
+ 'massiveaction' => false,
+ 'datatype' => 'string'
+ ];
+ return $tab;
+ }
+
+ function getAllConfigurations() {
+ return getAllDataFromTable(self::getTable());
+ }
+
+ public function prepareInputForUpdate($input) {
+ return self::handleInput($input);
+ }
- function prepareInputForUpdate($input) {
+ public function prepareInputForAdd($input) {
+ return self::handleInput($input);
+ }
+
+ public static function handleInput($input) {
if (isset($input["sccmdb_password"]) AND !empty($input["sccmdb_password"])) {
$input["sccmdb_password"] = (new GLPIKey())->encrypt($input["sccmdb_password"]);
}
@@ -81,6 +154,14 @@ function prepareInputForUpdate($input) {
return $input;
}
+ static function isIdAutoIncrement()
+ {
+ global $DB;
+ $columns = $DB->query("SHOW COLUMNS FROM glpi_plugin_sccm_configs WHERE FIELD = 'id'");
+ $data = $columns->fetch_assoc();
+ return str_contains($data["Extra"], "auto_increment");
+ }
+
static function install(Migration $migration) {
global $CFG_GLPI, $DB;
@@ -88,16 +169,21 @@ static function install(Migration $migration) {
$default_collation = DBConnection::getDefaultCollation();
$default_key_sign = DBConnection::getDefaultPrimaryKeySignOption();
- $table = 'glpi_plugin_sccm_configs';
+ $table = self::getTable();
if (!$DB->tableExists($table)) {
+ $migration->displayMessage("Installing SCCM plugin ...");
+ $migration->displayMessage("Table not exists, creating ...");
+
$query = "CREATE TABLE `". $table."`(
- `id` int {$default_key_sign} NOT NULL,
+ `id` int {$default_key_sign} NOT NULL AUTO_INCREMENT,
+ `sccm_config_name` VARCHAR(255) NULL,
`sccmdb_host` VARCHAR(255) NULL,
`sccmdb_dbname` VARCHAR(255) NULL,
`sccmdb_user` VARCHAR(255) NULL,
`sccmdb_password` VARCHAR(255) NULL,
+ `sccm_collection_name` VARCHAR(255) NULL,
`inventory_server_url` VARCHAR(255) NULL,
`active_sync` tinyint NOT NULL default '0',
`verify_ssl_cert` tinyint NOT NULL default '0',
@@ -112,20 +198,33 @@ static function install(Migration $migration) {
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET={$default_charset} COLLATE={$default_collation} ROW_FORMAT=DYNAMIC;";
- $DB->queryOrDie($query, __("Error when using glpi_plugin_sccm_configs table.", "sccm")
- . "
".$DB->error());
-
- $query = "INSERT INTO `$table`
- (id, date_mod, sccmdb_host, sccmdb_dbname,
- sccmdb_user, sccmdb_password, inventory_server_url)
- VALUES (1, NOW(), 'srv_sccm','bdd_sccm','user_sccm','',
- NULL)";
+ $DB->queryOrDie($query, $DB->error());
- $DB->queryOrDie($query, __("Error when using glpi_plugin_sccm_configs table.", "sccm")
- . "
" . $DB->error());
+ // Update display preferences
+ $migration->updateDisplayPrefs([PluginSccmConfig::class => [1, 2, 3, 4, 5, 6]]);
} else {
+ $migration->displayMessage("Updating SCCM plugin ...");
+
+ // Need to move ID column to auto increment.
+ if (!self::isIdAutoIncrement()) {
+ $migration->changeField("glpi_plugin_sccm_configs", "id", "id", "autoincrement");
+ $migration->migrationOneTable('glpi_plugin_sccm_configs');
+ // Update display preferences
+ $migration->updateDisplayPrefs([PluginSccmConfig::class => [1, 2, 3, 4, 5, 6]]);
+ }
+
+ if (!$DB->fieldExists($table, 'sccm_config_name')) {
+ $migration->addField("glpi_plugin_sccm_configs", "sccm_config_name", "VARCHAR(255)");
+ $migration->migrationOneTable('glpi_plugin_sccm_configs');
+ }
+
+ if (!$DB->fieldExists($table, 'sccm_collection_name')) {
+ $migration->addField("glpi_plugin_sccm_configs", "sccm_collection_name", "VARCHAR(255)");
+ $migration->migrationOneTable('glpi_plugin_sccm_configs');
+ }
+
if (!$DB->fieldExists($table, 'verify_ssl_cert')) {
$migration->addField("glpi_plugin_sccm_configs", "verify_ssl_cert", "tinyint NOT NULL default '0'");
$migration->migrationOneTable('glpi_plugin_sccm_configs');
@@ -153,23 +252,27 @@ static function install(Migration $migration) {
if (!$DB->fieldExists($table, 'is_password_sodium_encrypted')) {
$config = self::getInstance();
- if (!empty($config->fields['sccmdb_password'])) {
- $key = new GLPIKey();
- $migration->addPostQuery(
- $DB->buildUpdate(
- 'glpi_plugin_sccm_configs',
- [
- 'sccmdb_password' => $key->encrypt(
- $key->decryptUsingLegacyKey(
- $config->fields['sccmdb_password']
+ $configurations = $config->getAllConfigurations();
+ foreach ($configurations as $data) {
+ $config->getFromDB($data['id']);
+ if (!empty($config->fields['sccmdb_password'])) {
+ $key = new GLPIKey();
+ $migration->addPostQuery(
+ $DB->buildUpdate(
+ 'glpi_plugin_sccm_configs',
+ [
+ 'sccmdb_password' => $key->encrypt(
+ $key->decryptUsingLegacyKey(
+ $config->fields['sccmdb_password']
+ )
)
+ ],
+ [
+ 'id' => $data['id'],
+ ]
)
- ],
- [
- 'id' => 1,
- ]
- )
- );
+ );
+ }
}
$migration->addField("glpi_plugin_sccm_configs", "is_password_sodium_encrypted", "tinyint NOT NULL default '1'");
$migration->migrationOneTable('glpi_plugin_sccm_configs');
@@ -210,58 +313,86 @@ static function install(Migration $migration) {
]
);
}
+
}
return true;
}
-
static function uninstall() {
+ /** @var \DBmysql $DB */
global $DB;
-
- if ($DB->tableExists('glpi_plugin_sccm_configs')) {
-
- $query = "DROP TABLE `glpi_plugin_sccm_configs`";
- $DB->queryOrDie($query, $DB->error());
+ $table = self::getTable();
+ if ($DB->tableExists($table)) {
+ $DB->queryOrDie("DROP TABLE IF EXISTS `" . self::getTable() . "`") or die($DB->error());
+ $displayPref = new DisplayPreference();
+ foreach ($displayPref->find(['itemtype' => PluginSccmConfig::class]) as $pref) {
+ $displayPref->delete($pref);
+ }
}
- return true;
}
+ static function searchUrl() {
+ global $CFG_GLPI;
+ return $CFG_GLPI['url_base'] . "/plugins/sccm/front/config.php";;
+ }
+
+ function defineTabs($options = []) {
+
+ $ong = [];
+ $this->addDefaultFormTab($ong);
+ $this->addStandardTab(__CLASS__, $ong, $options);
+ $this->addStandardTab('Log', $ong, $options);
+ return $ong;
+ }
- static function showConfigForm($item) {
+ function showForm($ID, $options = []) {
global $CFG_GLPI;
- $config = self::getInstance();
+ if (!$this->getFromDB($ID)) {
+ $this->getEmpty();
+ }
+
+ $this->initForm($ID, $options);
+ $this->showFormHeader($options);
- $config->showFormHeader();
+ echo "";
+ echo "".__("SCCM configuration name", "sccm")." (Id: ".$this->getField('id').") | ";
+ echo Html::input('sccm_config_name', ['value' => $this->getField('sccm_config_name')]);
+ echo " |
\n";
echo "";
echo "".__("Enable SCCM synchronization", "sccm")." | ";
- Dropdown::showYesNo("active_sync", $config->getField('active_sync'));
+ Dropdown::showYesNo("active_sync", $this->getField('active_sync'));
echo " |
\n";
echo "";
echo "".__("Server hostname (MSSQL)", "sccm")." | ";
- echo Html::input('sccmdb_host', ['value' => $config->getField('sccmdb_host')]);
+ echo Html::input('sccmdb_host', ['value' => $this->getField('sccmdb_host')]);
echo " |
\n";
echo "";
echo "".__("Database name", "sccm")." | ";
- echo Html::input('sccmdb_dbname', ['value' => $config->getField('sccmdb_dbname')]);
+ echo Html::input('sccmdb_dbname', ['value' => $this->getField('sccmdb_dbname')]);
echo " |
\n";
echo "";
echo "".__("Username", "sccm")." | ";
- echo Html::input('sccmdb_user', ['value' => $config->getField('sccmdb_user')]);
+ echo Html::input('sccmdb_user', ['value' => $this->getField('sccmdb_user')]);
echo " |
\n";
- $password = $config->getField('sccmdb_password');
+ $password = $this->getField('sccmdb_password');
$password = Html::entities_deep((new GLPIKey())->decrypt($password));
echo "";
echo "".__("Password", "sccm")." | ";
echo "";
echo " |
\n";
+ echo "";
+ echo "".__("SCCM collection name", "sccm")." | ";
+ echo Html::input('sccm_collection_name', ['value' => $this->getField('sccm_collection_name')]);
+ echo " |
\n";
+
echo "";
echo "".__("Inventory server base URL", "sccm")." | ";
echo Html::input(
@@ -269,47 +400,49 @@ static function showConfigForm($item) {
[
'type' => 'url',
'pattern' => 'https?://.+',
- 'value' => $config->getField('inventory_server_url'),
+ 'value' => $this->getField('inventory_server_url'),
'placeholder' => $CFG_GLPI['url_base'],
]
);
- $url = ($config->getField('inventory_server_url') ?: $CFG_GLPI['url_base']) . '/front/inventory.php';
+ $url = ($this->getField('inventory_server_url') ?: $CFG_GLPI['url_base']) . '/front/inventory.php';
echo '' . $url . '';
echo " |
\n";
echo "";
echo "".__("Verify SSL certificate", "sccm")." | ";
- Dropdown::showYesNo("verify_ssl_cert", $config->getField('verify_ssl_cert'));
+ Dropdown::showYesNo("verify_ssl_cert", $this->getField('verify_ssl_cert'));
echo " |
\n";
echo "";
echo "".__("Use NLTM authentication", "sccm")." | ";
- Dropdown::showYesNo("use_auth_ntlm", $config->getField('use_auth_ntlm'));
+ Dropdown::showYesNo("use_auth_ntlm", $this->getField('use_auth_ntlm'));
echo " |
\n";
echo "";
echo "".__("Send credentials to other hosts too", "sccm")." | ";
- Dropdown::showYesNo("unrestricted_auth", $config->getField('unrestricted_auth'));
+ Dropdown::showYesNo("unrestricted_auth", $this->getField('unrestricted_auth'));
echo " |
\n";
echo "";
echo "".__("Use specific authentication information", "sccm")." | ";
- Dropdown::showYesNo("use_auth_info", $config->getField('use_auth_info'));
+ Dropdown::showYesNo("use_auth_info", $this->getField('use_auth_info'));
echo " |
\n";
echo "";
echo "".__("Value for spécific authentication", "sccm")." | ";
- echo Html::input('auth_info', ['value' => $config->getField('auth_info')]);
+ echo Html::input('auth_info', ['value' => $this->getField('auth_info')]);
echo " |
\n";
echo "";
echo "".__("Use LastHWScan as GLPI last inventory date", "sccm")." | ";
- Dropdown::showYesNo("use_lasthwscan", $config->getField('use_lasthwscan'));
+ Dropdown::showYesNo("use_lasthwscan", $this->getField('use_lasthwscan'));
echo " |
\n";
- $config->showFormButtons(['candel'=>false]);
-
+ $this->showFormButtons($options);
return false;
}
+ public static function getIcon() {
+ return "fa-solid fa-dice-d20";
+ }
}
diff --git a/inc/menu.class.php b/inc/menu.class.php
index 5179dd7..c5b29d4 100644
--- a/inc/menu.class.php
+++ b/inc/menu.class.php
@@ -32,26 +32,23 @@
class PluginSccmMenu extends CommonGLPI {
static function getTypeName($nb = 0) {
- return __('SCCM Connector', 'sccm');
+ return __('Menu', 'sccm');
}
static function getMenuName() {
- return __('SCCM Connector', 'sccm');
+ return __('SCCM', 'sccm');
}
static function getMenuContent() {
- global $CFG_GLPI;
- $menu = [];
- $menu['title'] = self::getMenuName();
- $menu['page'] = '/' . Plugin::getWebDir('sccm', false) . '/front/config.form.php';
-
- if (Session::haveRight('config', UPDATE)) {
-
- $menu['options']['model']['title'] = self::getTypeName();
-
- }
-
+ $menu = [
+ 'title' => PluginSccmConfig::getMenuName(),
+ 'page' => PluginSccmConfig::getSearchURL(false),
+ 'icon' => PluginSccmConfig::getIcon(),
+ 'options' => [],
+ ];
+
+ $menu['links']['add'] = PluginSccmConfig::getFormURL(false);
return $menu;
}
-}
\ No newline at end of file
+}
diff --git a/inc/sccm.class.php b/inc/sccm.class.php
index 4d8e500..c756901 100644
--- a/inc/sccm.class.php
+++ b/inc/sccm.class.php
@@ -39,6 +39,12 @@ class PluginSccmSccm {
var $devices;
+ public PluginSccmSccmdb $sccmdb;
+
+ public function __construct(PluginSccmSccmdb $sccmdb) {
+ $this->sccmdb = $sccmdb;
+ }
+
static function getTypeName($nb = 0) {
return __('SCCM', 'sccm');
}
@@ -47,15 +53,11 @@ function showHome() {
echo __('Please, read the documentation before using that.', 'footprints');
}
- function getDevices($where = 0, $limit = 99999999) {
+ function getDevices($collection_name, $where = 0, $limit = 99999999) {
- $PluginSccmSccmdb = new PluginSccmSccmdb();
- $res = $PluginSccmSccmdb->connect();
- if (!$res) {
- die;
- }
+ $PluginSccmSccmdb = $this->sccmdb;
- $query = self::getcomputerQuery();
+ $query = self::getcomputerQuery($collection_name);
if ($where!=0) {
$query.= " WHERE csd.MachineID = '" . $where . "'";
@@ -74,19 +76,11 @@ function getDevices($where = 0, $limit = 99999999) {
$i++;
}
-
- $PluginSccmSccmdb->disconnect();
}
function getDatas($type, $deviceid, $limit = 99999999) {
- $PluginSccmSccmdb = new PluginSccmSccmdb();
- $res = $PluginSccmSccmdb->connect();
- if (!$res) {
- die;
- }
-
- $datas = [];
+ $PluginSccmSccmdb = $this->sccmdb;
switch ($type) {
case 'processors' :
@@ -116,18 +110,12 @@ function getDatas($type, $deviceid, $limit = 99999999) {
$i++;
}
- $PluginSccmSccmdb->disconnect();
-
return $data;
}
function getNetwork($deviceid, $limit = 99999999) {
- $PluginSccmSccmdb = new PluginSccmSccmdb();
- $res = $PluginSccmSccmdb->connect();
- if (!$res) {
- die;
- }
+ $PluginSccmSccmdb = $this->sccmdb;
$query = "SELECT NeDa.IPAddress00 as \"ND-IpAddress\",
NeDa.MACAddress00 as \"ND-MacAddress\",
@@ -159,18 +147,12 @@ function getNetwork($deviceid, $limit = 99999999) {
$i++;
}
- $PluginSccmSccmdb->disconnect();
-
return $data;
}
function getSoftware($deviceid, $limit = 99999999) {
- $PluginSccmSccmdb = new PluginSccmSccmdb();
- $res = $PluginSccmSccmdb->connect();
- if (!$res) {
- die;
- }
+ $PluginSccmSccmdb = $this->sccmdb;
$query = "SELECT ArPd_64.DisplayName0 as \"ArPd-DisplayName\",
ArPd_64.InstallDate0 as \"ArPd-InstallDate\",
@@ -207,18 +189,12 @@ function getSoftware($deviceid, $limit = 99999999) {
$i++;
}
- $PluginSccmSccmdb->disconnect();
-
return $data;
}
function getMemories($deviceid, $limit = 99999999) {
- $PluginSccmSccmdb = new PluginSccmSccmdb();
- $res = $PluginSccmSccmdb->connect();
- if (!$res) {
- die;
- }
+ $PluginSccmSccmdb = $this->sccmdb;
$query = "SELECT
Capacity0 as \"Mem-Capacity\",
@@ -255,20 +231,14 @@ function getMemories($deviceid, $limit = 99999999) {
$i++;
}
- $PluginSccmSccmdb->disconnect();
-
return $data;
}
function getVideos($deviceid, $limit = 99999999) {
- $PluginSccmSccmdb = new PluginSccmSccmdb();
- $res = $PluginSccmSccmdb->connect();
- if (!$res) {
- die;
- }
+ $PluginSccmSccmdb = $this->sccmdb;
- $query = "
+ $query = "
SELECT
VideoProcessor0 as \"Vid-Chipset\",
AdapterRAM0/1024 as \"Vid-Memory\",
@@ -297,18 +267,12 @@ function getVideos($deviceid, $limit = 99999999) {
$i++;
}
- $PluginSccmSccmdb->disconnect();
-
- return $data;
+ return $data;
}
function getSounds($deviceid, $limit = 99999999) {
- $PluginSccmSccmdb = new PluginSccmSccmdb();
- $res = $PluginSccmSccmdb->connect();
- if (!$res) {
- die;
- }
+ $PluginSccmSccmdb = $this->sccmdb;
$query = "
SELECT distinct
@@ -335,18 +299,12 @@ function getSounds($deviceid, $limit = 99999999) {
$i++;
}
- $PluginSccmSccmdb->disconnect();
-
return $data;
}
function getStorages($deviceid, $limit = 99999999) {
- $PluginSccmSccmdb = new PluginSccmSccmdb();
- $res = $PluginSccmSccmdb->connect();
- if (!$res) {
- die;
- }
+ $PluginSccmSccmdb = $this->sccmdb;
$query = "
SELECT
@@ -382,18 +340,12 @@ function getStorages($deviceid, $limit = 99999999) {
$i++;
}
- $PluginSccmSccmdb->disconnect();
-
return $data;
}
function getMedias($deviceid, $limit = 99999999) {
- $PluginSccmSccmdb = new PluginSccmSccmdb();
- $res = $PluginSccmSccmdb->connect();
- if (!$res) {
- die;
- }
+ $PluginSccmSccmdb = $this->sccmdb;
$query = "
SELECT distinct
@@ -423,8 +375,6 @@ function getMedias($deviceid, $limit = 99999999) {
$i++;
}
- $PluginSccmSccmdb->disconnect();
-
return $data;
}
@@ -468,130 +418,189 @@ static function cronInfo($name) {
if ($name == "SCCMPush") {
return ['description' => __("Interface - SCCMPush", "sccm")];
}
-
}
static function executeCollect($task) {
ini_set('max_execution_time', 0);
$retcode = -1;
- $REP_XML = GLPI_PLUGIN_DOC_DIR.'/sccm/xml/';
-
$PluginSccmConfig = new PluginSccmConfig();
- $PluginSccmConfig->getFromDB(1);
+ $configurations = $PluginSccmConfig->getAllConfigurations();
- $PluginSccmSccm = new PluginSccmSccm();
+ if (empty($configurations))
+ {
+ echo __("No SCCM configurations found.", "sccm");
+ return $retcode;
+ }
- if ($PluginSccmConfig->getField('active_sync') == 1) {
+ foreach ($configurations as $config) {
- $PluginSccmSccm->getDevices();
- Toolbox::logInFile('sccm', "getDevices OK \n", true);
+ $configId = $config['id'];
+ Toolbox::logInFile('sccm', "Init Collect on ". $config['sccm_config_name'] ." \n", true);
- Toolbox::logInFile('sccm', "Generate XML start : "
- . count($PluginSccmSccm->devices) . " files\n", true);
+ $PluginSccmConfig->getFromDB($configId);
- foreach ($PluginSccmSccm->devices as $device_values) {
+ $REP_XML = GLPI_PLUGIN_DOC_DIR.'/sccm/xml/'. $PluginSccmConfig->getField('id');
- $PluginSccmSccmxml = new PluginSccmSccmxml($device_values);
+ if (!is_dir($REP_XML)) {
+ mkdir($REP_XML);
+ }
- $PluginSccmSccmxml->setAccessLog();
- $PluginSccmSccmxml->setAccountInfos();
- $PluginSccmSccmxml->setHardware();
- $PluginSccmSccmxml->setOS();
- $PluginSccmSccmxml->setBios();
- $PluginSccmSccmxml->setProcessors();
- $PluginSccmSccmxml->setSoftwares();
- $PluginSccmSccmxml->setMemories();
- $PluginSccmSccmxml->setVideos();
- $PluginSccmSccmxml->setSounds();
- $PluginSccmSccmxml->setUsers();
- $PluginSccmSccmxml->setNetworks();
- $PluginSccmSccmxml->setStorages();
+ if ($PluginSccmConfig->getField('active_sync') == 1) {
+ $PluginSccmSccmdb = new PluginSccmSccmdb();
+ if (!$PluginSccmSccmdb->connect($config['id'])) {
+ Toolbox::logInFile('sccm', "Error connecting to database on config ". $config['sccm_config_name'] ." \n", true);
+ continue;
+ }
+ $PluginSccmSccm = new PluginSccmSccm($PluginSccmSccmdb);
- $SXML = $PluginSccmSccmxml->sxml;
+ Toolbox::logInFile('sccm', "Getting devices ... \n", true);
+ $PluginSccmSccm->getDevices($PluginSccmConfig->getField('sccm_collection_name'));
+ Toolbox::logInFile('sccm', "getDevices OK \n", true);
- $SXML->asXML($REP_XML.$PluginSccmSccmxml->device_id.".ocs");
+ if ($PluginSccmSccm->devices == null){
+ Toolbox::logInFile('sccm', "Collect completed, no devices found.\n", true);
+ continue;
+ }
- Toolbox::logInFile('sccm', "Collect OK for device - ".$PluginSccmSccmxml->device_id." \n", true);
- $task->addVolume(1);
- }
- $retcode = 1;
- Toolbox::logInFile('sccm', "Collect completed \n", true);
+ Toolbox::logInFile('sccm', "Generate XML start : "
+ . count($PluginSccmSccm->devices) . " files\n", true);
+
+ foreach ($PluginSccmSccm->devices as $device_values) {
+
+ $PluginSccmSccmxml = new PluginSccmSccmxml($PluginSccmSccm, $device_values);
+
+ $PluginSccmSccmxml->setAccessLog();
+ $PluginSccmSccmxml->setAccountInfos();
+ $PluginSccmSccmxml->setHardware();
+ $PluginSccmSccmxml->setOS();
+ $PluginSccmSccmxml->setBios();
+ $PluginSccmSccmxml->setProcessors();
+ $PluginSccmSccmxml->setSoftwares();
+ $PluginSccmSccmxml->setMemories();
+ $PluginSccmSccmxml->setVideos();
+ $PluginSccmSccmxml->setSounds();
+ $PluginSccmSccmxml->setUsers();
+ $PluginSccmSccmxml->setNetworks();
+ $PluginSccmSccmxml->setStorages();
+
+ $SXML = $PluginSccmSccmxml->sxml;
+
+ $SXML->asXML($REP_XML."/".$PluginSccmSccmxml->device_id.".ocs");
+
+ Toolbox::logInFile('sccm', "Collect OK for device - ".$PluginSccmSccmxml->device_id." \n", true);
+ $task->addVolume(1);
+ }
+ $retcode = 1;
+ Toolbox::logInFile('sccm', "Collect completed on ". $config['sccm_config_name'] .", " . count($PluginSccmSccm->devices) . " devices found \n", true);
+ $PluginSccmSccmdb->disconnect();
- } else {
- echo __("Collect is disabled by configuration.", "sccm");
+ } else {
+ Toolbox::logInFile('sccm', "Collect is disabled by configuration on ". $config['sccm_config_name']." \n", true);
+ echo __("Collect is disabled by configuration on ". $config['sccm_config_name'] .".", "sccm");
+ }
}
return $retcode;
}
- static function getcomputerQuery() {
- return "SELECT csd.Description00 as \"CSD-Description\",
- csd.Domain00 as \"CSD-Domain\",
- csd.Manufacturer00 as \"CSD-Manufacturer\",
- csd.Model00 as \"CSD-Model\",
- csd.Roles00 as \"CSD-Roles\",
- csd.SystemType00 as \"CSD-SystemType\",
- csd.UserName00 as \"CSD-UserName\",
- csd.MachineID as \"CSD-MachineID\",
- csd.TimeKey as \"CSD-TimeKey\",
- md.SystemName00 as \"MD-SystemName\",
- osd.BuildNumber00 as \"OSD-BuildNumber\",
- osd.Caption00 as \"OSD-Caption\",
- osd.CSDVersion00 as \"OSD-CSDVersion\",
- osd.BootDevice00 as \"OSD-BootDevice\",
- osd.InstallDate00 as \"OSD-InstallDate\",
- osd.LastBootUpTime00 as \"OSD-LastBootUpTime\",
- osd.Manufacturer00 as \"OSD-Manufacturer\",
- osd.Name00 as \"OSD-Name\",
- osd.Organization00 as \"OSD-Organization\",
- osd.RegisteredUser00 as \"OSD-RegisteredUser\",
- osd.TotalVirtualMemorySize00 as \"OSD-TotalVirtualMemory\",
- osd.TotalVisibleMemorySize00 as \"OSD-TotalVisibleMemory\",
- osd.Version00 as \"OSD-Version\",
- pbd.SerialNumber00 as \"PBD-SerialNumber\",
- pbd.ReleaseDate00 as \"PBD-ReleaseDate\",
- pbd.Name00 as \"PBD-Name\",
- pbd.SMBIOSBIOSVersion00 as \"PBD-BiosVersion\",
- pbd.Version00 as \"PBD-Version\",
- pbd.Manufacturer00 as \"PBD-Manufacturer\",
- sdi.User_Name0 as \"SDI-UserName\",
- sd.SMSID0 as \"SD-UUID\",
- sd.SystemRole0 as \"SD-SystemRole\",
- VrS.User_Name0 as \"VrS-UserName\",
- vWD.LastHWScan as \"vWD-LastScan\"
- FROM Computer_System_DATA csd
- LEFT JOIN Motherboard_DATA md ON csd.MachineID = md.MachineID
- LEFT JOIN Operating_System_DATA osd ON csd.MachineID = osd.MachineID
- LEFT JOIN v_GS_WORKSTATION_STATUS vWD ON csd.MachineID = vWD.ResourceID
- LEFT JOIN PC_BIOS_DATA pbd ON csd.MachineID = pbd.MachineID
- LEFT JOIN System_DISC sdi ON csd.MachineID = sdi.ItemKey
- LEFT JOIN System_DATA sd ON csd.MachineID = sd.MachineID
- INNER JOIN v_R_System VrS ON csd.MachineID = VrS.ResourceID
- WHERE csd.MachineID is not null and csd.MachineID != ''";
+ static function getcomputerQuery($collection_name) {
+
+ $result = "SELECT csd.Description00 as \"CSD-Description\",
+ csd.Domain00 as \"CSD-Domain\",
+ csd.Manufacturer00 as \"CSD-Manufacturer\",
+ csd.Model00 as \"CSD-Model\",
+ csd.Roles00 as \"CSD-Roles\",
+ csd.SystemType00 as \"CSD-SystemType\",
+ csd.UserName00 as \"CSD-UserName\",
+ csd.MachineID as \"CSD-MachineID\",
+ csd.TimeKey as \"CSD-TimeKey\",
+ md.SystemName00 as \"MD-SystemName\",
+ osd.BuildNumber00 as \"OSD-BuildNumber\",
+ osd.Caption00 as \"OSD-Caption\",
+ osd.CSDVersion00 as \"OSD-CSDVersion\",
+ osd.BootDevice00 as \"OSD-BootDevice\",
+ osd.InstallDate00 as \"OSD-InstallDate\",
+ osd.LastBootUpTime00 as \"OSD-LastBootUpTime\",
+ osd.Manufacturer00 as \"OSD-Manufacturer\",
+ osd.Name00 as \"OSD-Name\",
+ osd.Organization00 as \"OSD-Organization\",
+ osd.RegisteredUser00 as \"OSD-RegisteredUser\",
+ osd.TotalVirtualMemorySize00 as \"OSD-TotalVirtualMemory\",
+ osd.TotalVisibleMemorySize00 as \"OSD-TotalVisibleMemory\",
+ osd.Version00 as \"OSD-Version\",
+ pbd.SerialNumber00 as \"PBD-SerialNumber\",
+ pbd.ReleaseDate00 as \"PBD-ReleaseDate\",
+ pbd.Name00 as \"PBD-Name\",
+ pbd.SMBIOSBIOSVersion00 as \"PBD-BiosVersion\",
+ pbd.Version00 as \"PBD-Version\",
+ pbd.Manufacturer00 as \"PBD-Manufacturer\",
+ sdi.User_Name0 as \"SDI-UserName\",
+ sd.SMSID0 as \"SD-UUID\",
+ sd.SystemRole0 as \"SD-SystemRole\",
+ VrS.User_Name0 as \"VrS-UserName\",
+ vWD.LastHWScan as \"vWD-LastScan\"
+ FROM Computer_System_DATA csd
+ LEFT JOIN Motherboard_DATA md ON csd.MachineID = md.MachineID
+ LEFT JOIN Operating_System_DATA osd ON csd.MachineID = osd.MachineID
+ LEFT JOIN v_GS_WORKSTATION_STATUS vWD ON csd.MachineID = vWD.ResourceID
+ LEFT JOIN PC_BIOS_DATA pbd ON csd.MachineID = pbd.MachineID
+ LEFT JOIN System_DISC sdi ON csd.MachineID = sdi.ItemKey
+ LEFT JOIN System_DATA sd ON csd.MachineID = sd.MachineID
+ INNER JOIN v_R_System VrS ON csd.MachineID = VrS.ResourceID
+ WHERE csd.MachineID is not null and csd.MachineID != ''
+ ";
+
+ if (!empty($collection_name))
+ {
+ $result .= " AND md.SystemName00 in (
+ SELECT FCM.Name
+ FROM v_FullCollectionMembership FCM INNER JOIN v_Collection COL
+ ON FCM.CollectionID = COL.CollectionID
+ WHERE col.name='" . $collection_name . "'
+ )
+ ";
+ }
+
+ return $result;
}
static function executePush($task) {
global $CFG_GLPI;
+ $retcode = -1;
- $PluginSccmSccmdb = new PluginSccmSccmdb();
- $res = $PluginSccmSccmdb->connect();
$PluginSccmConfig = new PluginSccmConfig();
- $PluginSccmConfig->getFromDB(1);
- $retcode = -1;
+ $configurations = $PluginSccmConfig->getAllConfigurations();
+
+ if (empty($configurations))
+ {
+ echo __("No SCCM configurations found.", "sccm");
+ return $retcode;
+ }
+
+ foreach ($configurations as $config) {
+
+ Toolbox::logInFile('sccm', "Init Push on ". $config['sccm_config_name'] ." \n", true);
+
+ $PluginSccmSccmdb = new PluginSccmSccmdb();
+ if (!$PluginSccmSccmdb->connect($config['id'])) {
+ Toolbox::logInFile('sccm', "Error connecting to database on config ". $config['sccm_config_name'] ." \n", true);
+ continue;
+ }
+
+ $PluginSccmConfig->getFromDB($config['id']);
- if ($PluginSccmConfig->getField('active_sync') == 1) {
- if ($res) {
+ if ($PluginSccmConfig->getField('active_sync') == 1) {
- $query = self::getcomputerQuery();
+ $query = self::getcomputerQuery($PluginSccmConfig->getField('sccm_collection_name'));
$result = $PluginSccmSccmdb->exec_query($query);
$tab = [];
while ($tab = sqlsrv_fetch_array($result, SQLSRV_FETCH_ASSOC)) {
- $REP_XML = realpath(GLPI_PLUGIN_DOC_DIR.'/sccm/xml/'.$tab['CSD-MachineID'].'.ocs');
+ $REP_XML = realpath(GLPI_PLUGIN_DOC_DIR.'/sccm/xml/'. $PluginSccmConfig->getField('id')."/".$tab['CSD-MachineID'].'.ocs');
if ($REP_XML === false) {
Toolbox::logInFile('sccm', "There is a problem with the path, realpath function return false.\nPath : ".$REP_XML."\n", true);
@@ -666,15 +675,15 @@ static function executePush($task) {
foreach(libxml_get_errors() as $error) {
$errors = $errors . $error->message . "\n";
}
- Toolbox::logInFile('sccm', "Can't load the file with the path : ".$REP_XML."\n\n".$errors."\n", true);
+ Toolbox::logInFile('sccm', "Can't load the file with the path : ".$REP_XML."\n\n".$errors."\n", true);
}
}
- Toolbox::logInFile('sccm', "Push completed \n", true);
+ Toolbox::logInFile('sccm', "Push completed on ".$config['sccm_config_name']."\n", true);
$PluginSccmSccmdb->disconnect();
$retcode = 1;
+ } else {
+ echo __("Push is disabled by configuration on ".$config['sccm_config_name'].".", "sccm");
}
- } else {
- echo __("Push is disabled by configuration.", "sccm");
}
return $retcode;
diff --git a/inc/sccmdb.class.php b/inc/sccmdb.class.php
index a13b936..b001c23 100644
--- a/inc/sccmdb.class.php
+++ b/inc/sccmdb.class.php
@@ -37,10 +37,19 @@ class PluginSccmSccmdb {
var $dbconn;
- function connect() {
+ function testConfiguration($id) {
+ if ($this->connect($id)) {
+ Session::addMessageAfterRedirect(__("Connection successfull!", 'sccm'), false, INFO, false);
+ $this->disconnect();
+ } else {
+ Session::addMessageAfterRedirect(__("Connection failed!", 'sccm'), false, ERROR, false);
+ }
+ }
+
+ function connect($id) {
$PluginSccmConfig = new PluginSccmConfig();
- $PluginSccmConfig->getFromDB(1);
+ $PluginSccmConfig->getFromDB($id);
$host = $PluginSccmConfig->getField('sccmdb_host');
$dbname = $PluginSccmConfig->getField('sccmdb_dbname');
@@ -65,34 +74,26 @@ function connect() {
return true;
}
- function disconnect() {
-
+ public function disconnect() {
sqlsrv_close($this->dbconn);
-
}
- function exec_query($query) {
-
+ public function exec_query($query) {
$result = sqlsrv_query($this->dbconn, $query) or die('Query error : ' . print_r(sqlsrv_errors(), true));
if ($result == false) {
die( FormatErrors( sqlsrv_errors()));
}
return $result;
-
}
- function FormatErrors($errors) {
-
+ public function FormatErrors($errors) {
foreach ($errors as $error) {
- $debug = "";
$state = "SQLSTATE: ".$error['SQLSTATE'];
$code = "Code: ".$error['code'];
$message = "Message: ".$error['message'];
-
- echo $state."".$code."
".$message."
";
+ echo $state . "" . $code . "
" . $message . "
";
Toolbox::logInFile("sccm", $state.PHP_EOL.$code.PHP_EOL.$message.PHP_EOL);
}
-
}
}
diff --git a/inc/sccmxml.class.php b/inc/sccmxml.class.php
index 94ae02a..a5939ea 100644
--- a/inc/sccmxml.class.php
+++ b/inc/sccmxml.class.php
@@ -41,7 +41,11 @@ class PluginSccmSccmxml {
var $agentbuildnumber;
var $username;
- function __construct($data) {
+ public PluginSccmSccm $sccm;
+
+ function __construct(PluginSccmSccm $sccm, $data) {
+
+ $this->sccm = $sccm;
$plug = new Plugin();
$plug->getFromDBbyDir("sccm");
@@ -136,9 +140,6 @@ function setOS() {
$OPERATINGSYSTEM->addChild('SERVICE_PACK', $this->data['OSD-CSDVersion']);
}
-
-
-
function setBios() {
$CONTENT = $this->sxml->CONTENT[0];
$CONTENT->addChild('BIOS');
@@ -172,12 +173,10 @@ function setBios() {
function setProcessors() {
- $PluginSccmSccm = new PluginSccmSccm();
-
$cpukeys = [];
$CONTENT = $this->sxml->CONTENT[0]; $i = 0;
- foreach ($PluginSccmSccm->getDatas('processors', $this->device_id) as $value) {
+ foreach ($this->sccm->getDatas('processors', $this->device_id) as $value) {
if (!in_array($value['CPUKey00'], $cpukeys)) {
$CONTENT->addChild('CPUS');
$CPUS = $this->sxml->CONTENT[0]->CPUS[$i];
@@ -198,11 +197,9 @@ function setProcessors() {
function setSoftwares() {
- $PluginSccmSccm = new PluginSccmSccm();
-
$antivirus = []; $inject_antivirus = false;
$CONTENT = $this->sxml->CONTENT[0]; $i = 0;
- foreach ($PluginSccmSccm->getSoftware($this->device_id) as $value) {
+ foreach ($this->sccm->getSoftware($this->device_id) as $value) {
$CONTENT->addChild('SOFTWARES');
$SOFTWARES = $this->sxml->CONTENT[0]->SOFTWARES[$i];
@@ -246,10 +243,8 @@ function setSoftwares() {
}
function setMemories() {
- $PluginSccmSccm = new PluginSccmSccm();
-
- $CONTENT = $this->sxml->CONTENT[0]; $i = 0;
- foreach ($PluginSccmSccm->getMemories($this->device_id) as $value) {
+ $CONTENT = $this->sxml->CONTENT[0]; $i = 0;
+ foreach ($this->sccm->getMemories($this->device_id) as $value) {
$CONTENT->addChild('MEMORIES');
$MEMORIES = $this->sxml->CONTENT[0]->MEMORIES[$i];
@@ -272,10 +267,8 @@ function setMemories() {
}
function setVideos() {
- $PluginSccmSccm = new PluginSccmSccm();
-
- $CONTENT = $this->sxml->CONTENT[0]; $i = 0;
- foreach ($PluginSccmSccm->getVideos($this->device_id) as $value) {
+ $CONTENT = $this->sxml->CONTENT[0]; $i = 0;
+ foreach ($this->sccm->getVideos($this->device_id) as $value) {
$CONTENT->addChild('VIDEOS');
$VIDEOS = $this->sxml->CONTENT[0]->VIDEOS[$i];
@@ -291,10 +284,8 @@ function setVideos() {
}
function setSounds() {
- $PluginSccmSccm = new PluginSccmSccm();
-
$CONTENT = $this->sxml->CONTENT[0]; $i = 0;
- foreach ($PluginSccmSccm->getSounds($this->device_id) as $value) {
+ foreach ($this->sccm->getSounds($this->device_id) as $value) {
$CONTENT->addChild('SOUNDS');
$SOUNDS = $this->sxml->CONTENT[0]->SOUNDS[$i];
@@ -350,11 +341,9 @@ function determineNetworkType($network_description) {
function setNetworks() {
- $PluginSccmSccm = new PluginSccmSccm();
-
$CONTENT = $this->sxml->CONTENT[0];
- $networks = $PluginSccmSccm->getNetwork($this->device_id);
+ $networks = $this->sccm->getNetwork($this->device_id);
if (count($networks) > 0) {
@@ -388,10 +377,9 @@ function setNetworks() {
}
function setStorages() {
- $PluginSccmSccm = new PluginSccmSccm();
$CONTENT = $this->sxml->CONTENT[0];
$i = 0;
- foreach ($PluginSccmSccm->getStorages($this->device_id) as $value) {
+ foreach ($this->sccm->getStorages($this->device_id) as $value) {
$value['gld-TotalSize'] = intval($value['gld-TotalSize'])*1024;
$value['gld-FreeSpace'] = intval($value['gld-FreeSpace'])*1024;
$CONTENT->addChild('DRIVES');
@@ -407,7 +395,7 @@ function setStorages() {
}
$i = 0;
- foreach ($PluginSccmSccm->getMedias($this->device_id) as $value) {
+ foreach ($this->sccm->getMedias($this->device_id) as $value) {
$CONTENT->addChild('STORAGES');
$STORAGES = $this->sxml->CONTENT[0]->STORAGES[$i];
$STORAGES->addChild('DESCRIPTION', $value['Med-Description']);
diff --git a/setup.php b/setup.php
index 9b26604..ef19e6e 100644
--- a/setup.php
+++ b/setup.php
@@ -47,7 +47,7 @@ function plugin_init_sccm() {
if ($plugin->isActivated("sccm") && Session::getLoginUserID()) {
if (Session::haveRight("config", UPDATE)) {
- $PLUGIN_HOOKS['config_page']['sccm'] = "front/config.form.php";
+ $PLUGIN_HOOKS['config_page']['sccm'] = "front/config.php";
$PLUGIN_HOOKS["menu_toadd"]['sccm'] = ['config' => 'PluginSccmMenu'];
}
}