diff --git a/classes/configdata.php b/classes/configdata.php index b0e1a0c..2a213c3 100644 --- a/classes/configdata.php +++ b/classes/configdata.php @@ -29,7 +29,10 @@ class CConfigDataPIM const CONFIG_DEFAULT = [ 'Optionen' => [ 'interface_pff' => 0, - 'profile_addin' => '', + 'profile_addin' => [ + 'ITEMNAME', + 'LAST_RECEIVER' + ], 'file_name' => 'InventoryManager', 'add_date' => 0, 'current_user_default_keeper' => 0, diff --git a/classes/configtable.php b/classes/configtable.php index 68702f6..433c4df 100644 --- a/classes/configtable.php +++ b/classes/configtable.php @@ -53,14 +53,16 @@ public function __construct() */ private function checkPffInst() { + global $gDb, $gCurrentOrgId; + // check if configuration table for plugin FormFiller exists $sql = 'SHOW TABLES LIKE \''.$this->table_name.'\';'; - $statement = $GLOBALS['gDb']->queryPrepared($sql); + $statement = $gDb->queryPrepared($sql); if ($statement->rowCount() !== 0) { $sql = 'SELECT COUNT(*) AS COUNT FROM '.$this->table_name.' WHERE plp_name = ? AND (plp_org_id = ? OR plp_org_id IS NULL);'; - $statement = $GLOBALS['gDb']->queryPrepared($sql, array('PFF__Plugininformationen__version', $GLOBALS['gCurrentOrgId'])); + $statement = $gDb->queryPrepared($sql, array('PFF__Plugininformationen__version', $gCurrentOrgId)); $this->isPffInst = ((int) $statement->fetchColumn() === 1 && $this->pffDir !== false); } @@ -208,12 +210,14 @@ private function createTablesIfNotExist() */ private function createTableIfNotExist($tableName, $tableDefinition) { + global $gDb; + $sql = 'SHOW TABLES LIKE \'' . $tableName . '\';'; - $statement = $GLOBALS['gDb']->query($sql); + $statement = $gDb->query($sql); if (!$statement->rowCount()) { $sql = 'CREATE TABLE ' . $tableName . ' (' . $tableDefinition . ') ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;'; - $GLOBALS['gDb']->query($sql); + $gDb->query($sql); } } @@ -223,6 +227,8 @@ private function createTableIfNotExist($tableName, $tableDefinition) */ private function initializeDefaultFields() { + global $gDb, $gCurrentOrgId; + $defaultData = array( array('imf_id' => 1, 'imf_name' => 'PIM_ITEMNAME', 'imf_name_intern' => 'ITEMNAME', 'imf_type' => 'TEXT', 'imf_description' => convlanguagePIM('PIM_ITEMNAME_DESCRIPTION'), 'imf_sequence' => 0, 'imf_system' => 1, 'imf_mandatory' => 1), array('imf_id' => 2, 'imf_name' => 'PIM_CATEGORY', 'imf_name_intern' => 'CATEGORY', 'imf_type' => 'DROPDOWN', 'imf_description' => convlanguagePIM('PIM_CATEGORY_DESCRIPTION'), 'imf_sequence' => 1, 'imf_system' => 1, 'imf_mandatory' => 1, 'imf_value_list' => 'Allgemein'), @@ -233,8 +239,8 @@ private function initializeDefaultFields() array('imf_id' => 7, 'imf_name' => 'PIM_RECEIVED_BACK_ON', 'imf_name_intern' => 'RECEIVED_BACK_ON', 'imf_type' => 'DATE', 'imf_description' => convlanguagePIM('PIM_RECEIVED_BACK_ON_DESCRIPTION'), 'imf_sequence' => 6, 'imf_system' => 1, 'imf_mandatory' => 0) ); - $sql = 'SELECT imf_id, imf_name, imf_name_intern, imf_type, imf_description, imf_sequence, imf_system, imf_mandatory, imf_value_list FROM ' . TBL_INVENTORY_MANAGER_FIELDS . ' WHERE imf_org_id = \'' . $GLOBALS['gCurrentOrgId'] . '\';'; - $statement = $GLOBALS['gDb']->query($sql); + $sql = 'SELECT imf_id, imf_name, imf_name_intern, imf_type, imf_description, imf_sequence, imf_system, imf_mandatory, imf_value_list FROM ' . TBL_INVENTORY_MANAGER_FIELDS . ' WHERE imf_org_id = \'' . $gCurrentOrgId . '\';'; + $statement = $gDb->query($sql); $existingFields = array(); while ($row = $statement->fetch()) { @@ -324,7 +330,7 @@ private function initializeDefaultFields() // Clear the table and reset the AUTO_INCREMENT $sql = 'TRUNCATE TABLE ' . TBL_INVENTORY_MANAGER_FIELDS; - $GLOBALS['gDb']->query($sql); + $gDb->query($sql); // Insert the new array into the database and keep track of new IDs $newFieldIds = array(); @@ -341,7 +347,7 @@ private function initializeDefaultFields() ); // Get the new ID of the inserted field - $newFieldId = $GLOBALS['gDb']->lastInsertId(); + $newFieldId = $gDb->lastInsertId(); $newFieldIds[$field['imf_name']] = $newFieldId; } @@ -360,13 +366,13 @@ private function initializeDefaultFields() if (isset($newFieldIds[$oldFieldName])) { if ($newFieldIds[$oldFieldName] != $oldField['imf_id']) { $sql = 'UPDATE ' . TBL_INVENTORY_MANAGER_DATA . ' SET imd_imf_id = ? WHERE imd_imf_id = ?'; - $GLOBALS['gDb']->queryPrepared($sql, array($newFieldIds[$oldFieldName], $oldField['imf_id'])); + $gDb->queryPrepared($sql, array($newFieldIds[$oldFieldName], $oldField['imf_id'])); } } else { // Field no longer exists, set the field to empty and show an error message $sql = 'UPDATE ' . TBL_INVENTORY_MANAGER_DATA . ' SET imd_imf_id = NULL WHERE imd_imf_id = ?'; - $GLOBALS['gDb']->queryPrepared($sql, array($oldField['imf_id'])); + $gDb->queryPrepared($sql, array($oldField['imf_id'])); $_SESSION['error_messages'][] = 'Error: Field "' . $oldFieldName . '" no longer exists. Please manually check and adjust the database table"' . TBL_INVENTORY_MANAGER_DATA .'" where "imd_imf_id" equals "NULL" to avoid data loss.'; } } @@ -398,8 +404,10 @@ private function initializeDefaultFields() */ private function createField($name, $internalName, $type, $description, $sequence, $system, $mandatory, $valueList = '') { - $itemField = new TableAccess($GLOBALS['gDb'], TBL_INVENTORY_MANAGER_FIELDS, 'imf'); - $itemField->setValue('imf_org_id', (int) $GLOBALS['gCurrentOrgId']); + global $gDb, $gCurrentOrgId; + + $itemField = new TableAccess($gDb, TBL_INVENTORY_MANAGER_FIELDS, 'imf'); + $itemField->setValue('imf_org_id', (int) $gCurrentOrgId); $itemField->setValue('imf_sequence', $sequence); $itemField->setValue('imf_system', $system); $itemField->setValue('imf_mandatory', $mandatory); @@ -417,6 +425,8 @@ private function createField($name, $internalName, $type, $description, $sequenc */ private function initializePreferences() { + global $gDb, $gCurrentOrgId; + $this->read(); $this->config['Plugininformationen']['version'] = CPluginInfoPIM::getPluginVersion(); @@ -442,7 +452,7 @@ private function initializePreferences() foreach ($sectiondata as $item => $value) { $plp_name = self::SHORTCUT . '__' . $section . '__' . $item; $sql = 'DELETE FROM ' . $this->table_name . ' WHERE plp_name = ? AND plp_org_id = ?;'; - $GLOBALS['gDb']->queryPrepared($sql, array($plp_name, $GLOBALS['gCurrentOrgId'])); + $gDb->queryPrepared($sql, array($plp_name, $gCurrentOrgId)); unset($this->config[$section][$item]); } if (count($this->config[$section]) == 0) { @@ -459,6 +469,8 @@ private function initializePreferences() */ public function write() { + global $gDb, $gCurrentOrgId; + foreach ($this->config as $section => $sectionData) { foreach ($sectionData as $item => $value) { if (is_array($value)) { @@ -469,17 +481,17 @@ public function write() $plpName = self::SHORTCUT . '__' . $section . '__' . $item; $sql = 'SELECT plp_id FROM ' . $this->table_name . ' WHERE plp_name = ? AND (plp_org_id = ? OR plp_org_id IS NULL);'; - $statement = $GLOBALS['gDb']->queryPrepared($sql, array($plpName, $GLOBALS['gCurrentOrgId'])); + $statement = $gDb->queryPrepared($sql, array($plpName, $gCurrentOrgId)); $row = $statement->fetchObject(); if (isset($row->plp_id) && strlen($row->plp_id) > 0) { // Record exists, update it $sql = 'UPDATE ' . $this->table_name . ' SET plp_value = ? WHERE plp_id = ?;'; - $GLOBALS['gDb']->queryPrepared($sql, array($value, $row->plp_id)); + $gDb->queryPrepared($sql, array($value, $row->plp_id)); } else { // Record does not exist, insert it $sql = 'INSERT INTO ' . $this->table_name . ' (plp_org_id, plp_name, plp_value) VALUES (?, ?, ?);'; - $GLOBALS['gDb']->queryPrepared($sql, array($GLOBALS['gCurrentOrgId'], $plpName, $value)); + $gDb->queryPrepared($sql, array($gCurrentOrgId, $plpName, $value)); } } } @@ -511,8 +523,10 @@ public function readPff() */ private function readConfigData($pluginShortcut, &$configArray) { + global $gDb, $gCurrentOrgId; + $sql = 'SELECT plp_id, plp_name, plp_value FROM '.$this->table_name.' WHERE plp_name LIKE ? AND (plp_org_id = ? OR plp_org_id IS NULL);'; - $statement = $GLOBALS['gDb']->queryPrepared($sql, array($pluginShortcut.'__%', $GLOBALS['gCurrentOrgId'])); + $statement = $gDb->queryPrepared($sql, array($pluginShortcut.'__%', $gCurrentOrgId)); while ($row = $statement->fetch()) { @@ -553,11 +567,13 @@ private function readConfigData($pluginShortcut, &$configArray) */ public function checkForUpdate() { + global $gDb; + $needsUpdate = false; // Check if table *_plugin_preferences exists $sql = 'SHOW TABLES LIKE \'' . $this->table_name . '\' '; - $tableExistStatement = $GLOBALS['gDb']->queryPrepared($sql); + $tableExistStatement = $gDb->queryPrepared($sql); if ($tableExistStatement->rowCount()) { $needsUpdate = $this->compareVersion() || $this->compareStand(); @@ -575,10 +591,12 @@ public function checkForUpdate() */ private function compareVersion() { + global $gDb, $gCurrentOrgId; + $plp_name = self::SHORTCUT . '__Plugininformationen__version'; $sql = 'SELECT plp_value FROM ' . $this->table_name . ' WHERE plp_name = ? AND (plp_org_id = ? OR plp_org_id IS NULL);'; - $statement = $GLOBALS['gDb']->queryPrepared($sql, array($plp_name, $GLOBALS['gCurrentOrgId'])); + $statement = $gDb->queryPrepared($sql, array($plp_name, $gCurrentOrgId)); $row = $statement->fetchObject(); // Compare versions @@ -591,10 +609,12 @@ private function compareVersion() */ private function compareStand() { + global $gDb, $gCurrentOrgId; + $plp_name = self::SHORTCUT . '__Plugininformationen__stand'; $sql = 'SELECT plp_value FROM ' . $this->table_name . ' WHERE plp_name = ? AND (plp_org_id = ? OR plp_org_id IS NULL);'; - $statement = $GLOBALS['gDb']->queryPrepared($sql, array($plp_name, $GLOBALS['gCurrentOrgId'])); + $statement = $gDb->queryPrepared($sql, array($plp_name, $gCurrentOrgId)); $row = $statement->fetchObject(); // Compare stands @@ -608,6 +628,8 @@ private function compareStand() */ public function deleteConfigData($deinstOrgSelect) { + global $gDb, $gCurrentOrgId, $gDb; + $result = ''; $sqlWhereCondition = ''; @@ -618,21 +640,21 @@ public function deleteConfigData($deinstOrgSelect) $sql = 'DELETE FROM ' . $this->table_name . ' WHERE plp_name LIKE ? ' . $sqlWhereCondition; $params = [self::SHORTCUT . '__%']; if ($deinstOrgSelect == 0) { - $params[] = $GLOBALS['gCurrentOrgId']; + $params[] = $gCurrentOrgId; } - $result_data = $GLOBALS['gDb']->queryPrepared($sql, $params); - $result .= ($result_data ? $GLOBALS['gL10n']->get('PLG_INVENTORY_MANAGER_DEINST_DATA_DELETED_IN', [$this->table_name]) : $GLOBALS['gL10n']->get('PLG_INVENTORY_MANAGER_DEINST_DATA_DELETED_IN_ERROR', [$this->table_name])); + $result_data = $gDb->queryPrepared($sql, $params); + $result .= ($result_data ? $gDb->get('PLG_INVENTORY_MANAGER_DEINST_DATA_DELETED_IN', [$this->table_name]) : $gDb->get('PLG_INVENTORY_MANAGER_DEINST_DATA_DELETED_IN_ERROR', [$this->table_name])); // Check if the table is empty and can be deleted $sql = 'SELECT * FROM ' . $this->table_name; - $statement = $GLOBALS['gDb']->queryPrepared($sql); + $statement = $gDb->queryPrepared($sql); if ($statement->rowCount() == 0) { $sql = 'DROP TABLE ' . $this->table_name; - $result_db = $GLOBALS['gDb']->queryPrepared($sql); - $result .= ($result_db ? $GLOBALS['gL10n']->get('PLG_INVENTORY_MANAGER_DEINST_TABLE_DELETED', [$this->table_name]) : $GLOBALS['gL10n']->get('PLG_INVENTORY_MANAGER_DEINST_TABLE_DELETE_ERROR', [$this->table_name])); + $result_db = $gDb->queryPrepared($sql); + $result .= ($result_db ? $gDb->get('PLG_INVENTORY_MANAGER_DEINST_TABLE_DELETED', [$this->table_name]) : $gDb->get('PLG_INVENTORY_MANAGER_DEINST_TABLE_DELETE_ERROR', [$this->table_name])); } else { - $result .= $GLOBALS['gL10n']->get('PLG_INVENTORY_MANAGER_DEINST_CONFIGTABLE_DELETE_NOTPOSSIBLE', [$this->table_name]); + $result .= $gDb->get('PLG_INVENTORY_MANAGER_DEINST_CONFIGTABLE_DELETE_NOTPOSSIBLE', [$this->table_name]); } return $result; @@ -645,24 +667,25 @@ public function deleteConfigData($deinstOrgSelect) */ public function deleteItemData($deinstOrgSelect) { + global $gDb, $gCurrentOrgId, $gL10n; $result = ''; if ($deinstOrgSelect == 0) { $sql = 'DELETE FROM ' . TBL_INVENTORY_MANAGER_DATA . ' WHERE imd_imi_id IN (SELECT imi_id FROM ' . TBL_INVENTORY_MANAGER_ITEMS . ' WHERE imi_org_id = ?)'; - $result_data = $GLOBALS['gDb']->queryPrepared($sql, [$GLOBALS['gCurrentOrgId']]); - $result .= ($result_data ? $GLOBALS['gL10n']->get('PLG_INVENTORY_MANAGER_DEINST_DATA_DELETED_IN', [TABLE_PREFIX . '_inventory_manager_data']) : $GLOBALS['gL10n']->get('PLG_INVENTORY_MANAGER_DEINST_DATA_DELETED_IN_ERROR', [TABLE_PREFIX . '_inventory_manager_data'])); + $result_data = $gDb->queryPrepared($sql, [$gCurrentOrgId]); + $result .= ($result_data ? $gL10n->get('PLG_INVENTORY_MANAGER_DEINST_DATA_DELETED_IN', [TABLE_PREFIX . '_inventory_manager_data']) : $gL10n->get('PLG_INVENTORY_MANAGER_DEINST_DATA_DELETED_IN_ERROR', [TABLE_PREFIX . '_inventory_manager_data'])); $sql = 'DELETE FROM ' . TBL_INVENTORY_MANAGER_LOG . ' WHERE iml_imi_id IN (SELECT imi_id FROM ' . TBL_INVENTORY_MANAGER_ITEMS . ' WHERE imi_org_id = ?)'; - $result_log = $GLOBALS['gDb']->queryPrepared($sql, [$GLOBALS['gCurrentOrgId']]); - $result .= ($result_log ? $GLOBALS['gL10n']->get('PLG_INVENTORY_MANAGER_DEINST_DATA_DELETED_IN', [TABLE_PREFIX . '_inventory_manager_log']) : $GLOBALS['gL10n']->get('PLG_INVENTORY_MANAGER_DEINST_DATA_DELETED_IN_ERROR', [TABLE_PREFIX . '_inventory_manager_log'])); + $result_log = $gDb->queryPrepared($sql, [$gCurrentOrgId]); + $result .= ($result_log ? $gL10n->get('PLG_INVENTORY_MANAGER_DEINST_DATA_DELETED_IN', [TABLE_PREFIX . '_inventory_manager_log']) : $gL10n->get('PLG_INVENTORY_MANAGER_DEINST_DATA_DELETED_IN_ERROR', [TABLE_PREFIX . '_inventory_manager_log'])); $sql = 'DELETE FROM ' . TBL_INVENTORY_MANAGER_ITEMS . ' WHERE imi_org_id = ?'; - $result_items = $GLOBALS['gDb']->queryPrepared($sql, [$GLOBALS['gCurrentOrgId']]); - $result .= ($result_items ? $GLOBALS['gL10n']->get('PLG_INVENTORY_MANAGER_DEINST_DATA_DELETED_IN', [TABLE_PREFIX . '_inventory_manager_items']) : $GLOBALS['gL10n']->get('PLG_INVENTORY_MANAGER_DEINST_DATA_DELETED_IN_ERROR', [TABLE_PREFIX . '_inventory_manager_items'])); + $result_items = $gDb->queryPrepared($sql, [$gCurrentOrgId]); + $result .= ($result_items ? $gL10n->get('PLG_INVENTORY_MANAGER_DEINST_DATA_DELETED_IN', [TABLE_PREFIX . '_inventory_manager_items']) : $gL10n->get('PLG_INVENTORY_MANAGER_DEINST_DATA_DELETED_IN_ERROR', [TABLE_PREFIX . '_inventory_manager_items'])); $sql = 'DELETE FROM ' . TBL_INVENTORY_MANAGER_FIELDS . ' WHERE imf_org_id = ?'; - $result_fields = $GLOBALS['gDb']->queryPrepared($sql, [$GLOBALS['gCurrentOrgId']]); - $result .= ($result_fields ? $GLOBALS['gL10n']->get('PLG_INVENTORY_MANAGER_DEINST_DATA_DELETED_IN', [TABLE_PREFIX . '_inventory_manager_fields']) : $GLOBALS['gL10n']->get('PLG_INVENTORY_MANAGER_DEINST_DATA_DELETED_IN_ERROR', [TABLE_PREFIX . '_inventory_manager_fields'])); + $result_fields = $gDb->queryPrepared($sql, [$gCurrentOrgId]); + $result .= ($result_fields ? $gL10n->get('PLG_INVENTORY_MANAGER_DEINST_DATA_DELETED_IN', [TABLE_PREFIX . '_inventory_manager_fields']) : $gL10n->get('PLG_INVENTORY_MANAGER_DEINST_DATA_DELETED_IN_ERROR', [TABLE_PREFIX . '_inventory_manager_fields'])); } // Drop tables if they are empty or if data should be deleted from every org @@ -675,14 +698,14 @@ public function deleteItemData($deinstOrgSelect) foreach ($table_array as $table_name) { $sql = 'SELECT * FROM ' . $table_name; - $statement = $GLOBALS['gDb']->queryPrepared($sql); + $statement = $gDb->queryPrepared($sql); if ($statement->rowCount() == 0 || $deinstOrgSelect == 1) { $sql = 'DROP TABLE ' . $table_name; - $result_db = $GLOBALS['gDb']->queryPrepared($sql); - $result .= ($result_db ? $GLOBALS['gL10n']->get('PLG_INVENTORY_MANAGER_DEINST_TABLE_DELETED', [$table_name]) : $GLOBALS['gL10n']->get('PLG_INVENTORY_MANAGER_DEINST_TABLE_DELETE_ERROR', [$table_name])); + $result_db = $gDb->queryPrepared($sql); + $result .= ($result_db ? $gL10n->get('PLG_INVENTORY_MANAGER_DEINST_TABLE_DELETED', [$table_name]) : $gL10n->get('PLG_INVENTORY_MANAGER_DEINST_TABLE_DELETE_ERROR', [$table_name])); } else { - $result .= $GLOBALS['gL10n']->get('PLG_INVENTORY_MANAGER_DEINST_TABLE_DELETE_NOTPOSSIBLE', [$table_name]); + $result .= $gL10n->get('PLG_INVENTORY_MANAGER_DEINST_TABLE_DELETE_NOTPOSSIBLE', [$table_name]); } } diff --git a/common_function.php b/common_function.php index 36de439..4d6f87e 100644 --- a/common_function.php +++ b/common_function.php @@ -134,6 +134,7 @@ function isUserAuthorizedForPreferencesPIM() function isUserAuthorizedForAddinPIM() { global $gDb; + $sql = 'SELECT men_id, men_name, men_name_intern FROM ' . TBL_MENU . ' WHERE men_men_id_parent IS NULL @@ -171,7 +172,9 @@ function isUserAuthorizedForAddinPIM() */ function convlanguagePIM($field_name) { - return (substr($field_name, 3, 1) === '_') ? $GLOBALS['gL10n']->get($field_name) : $field_name; + global $gL10n; + + return (substr($field_name, 3, 1) === '_') ? $gL10n->get($field_name) : $field_name; } /** @@ -182,6 +185,8 @@ function convlanguagePIM($field_name) */ function getNewNameInternPIM($name, $index) { + global $gDb; + $name = umlautePIM($name); $newNameIntern = strtoupper(str_replace(' ', '_', $name)); @@ -190,7 +195,7 @@ function getNewNameInternPIM($name, $index) } $sql = 'SELECT imf_id FROM ' . TBL_INVENTORY_MANAGER_FIELDS . ' WHERE imf_name_intern = ?;'; - $userFieldsStatement = $GLOBALS['gDb']->queryPrepared($sql, array($newNameIntern)); + $userFieldsStatement = $gDb->queryPrepared($sql, array($newNameIntern)); if ($userFieldsStatement->rowCount() > 0) { return getNewNameInternPIM($name, ++$index); @@ -205,8 +210,10 @@ function getNewNameInternPIM($name, $index) */ function genNewSequencePIM() { + global $gDb, $gCurrentOrgId; + $sql = 'SELECT max(imf_sequence) as max_sequence FROM ' . TBL_INVENTORY_MANAGER_FIELDS . ' WHERE (imf_org_id = ? OR imf_org_id IS NULL);'; - $statement = $GLOBALS['gDb']->queryPrepared($sql, array($GLOBALS['gCurrentOrgId'])); + $statement = $gDb->queryPrepared($sql, array($gCurrentOrgId)); $row = $statement->fetch(); return $row['max_sequence'] + 1; diff --git a/inventory_manager_profile_addin.php b/inventory_manager_profile_addin.php index 8a508de..a758790 100644 --- a/inventory_manager_profile_addin.php +++ b/inventory_manager_profile_addin.php @@ -103,7 +103,11 @@ function insertKeeperView($page, $user, $itemsKeeper) { // headlines for columns $columnNumber = 1; - $addinItemFields = array('ITEMNAME', $pPreferences->config['Optionen']['profile_addin'], 'LAST_RECEIVER'); + $addinItemFields = array(); + foreach ($pPreferences->config['Optionen']['profile_addin'] as $addinField) { + $addinItemFields[] = $addinField; + } + $itemsKeeper->readItemData($itemsKeeper->items[0]['imi_id'], $gCurrentOrgId); foreach ($itemsKeeper->mItemFields as $itemField) { @@ -167,10 +171,12 @@ function insertKeeperView($page, $user, $itemsKeeper) { $content = $itemsKeeper->getValue($imfNameIntern, 'database'); if (($imfNameIntern == 'KEEPER' || $imfNameIntern == 'LAST_RECEIVER') && strlen($content) > 0) { - $user->readDataById($content); - if (!$user->getValue('usr_uuid') == '') { - $content = '' . $user->getValue('LAST_NAME') . ', ' . $user->getValue('FIRST_NAME') . ''; - } + if (is_numeric($content)) { + $user->readDataById($content); + if (!$user->getValue('usr_uuid') == '') { + $content = '' . $user->getValue('LAST_NAME') . ', ' . $user->getValue('FIRST_NAME') . ''; + } + } } if ($itemsKeeper->getProperty($imfNameIntern, 'imf_type') == 'CHECKBOX') { @@ -248,7 +254,11 @@ function insertReceiverView($page, $user, $itemsReceiver) { // headlines for columns $columnNumber = 1; - $addinItemFields = array('ITEMNAME', $pPreferences->config['Optionen']['profile_addin'], 'LAST_RECEIVER'); + $addinItemFields = array(); + foreach ($pPreferences->config['Optionen']['profile_addin'] as $addinField) { + $addinItemFields[] = $addinField; + } + $itemsReceiver->readItemData($itemsReceiver->items[0]['imi_id'], $gCurrentOrgId); foreach ($itemsReceiver->mItemFields as $itemField) { @@ -312,10 +322,12 @@ function insertReceiverView($page, $user, $itemsReceiver) { $content = $itemsReceiver->getValue($imfNameIntern, 'database'); if (($imfNameIntern == 'KEEPER' || $imfNameIntern == 'LAST_RECEIVER') && strlen($content) > 0) { - $user->readDataById($content); - if (!$user->getValue('usr_uuid') == '') { - $content = '' . $user->getValue('LAST_NAME') . ', ' . $user->getValue('FIRST_NAME') . ''; - } + if (is_numeric($content)) { + $user->readDataById($content); + if (!$user->getValue('usr_uuid') == '') { + $content = '' . $user->getValue('LAST_NAME') . ', ' . $user->getValue('FIRST_NAME') . ''; + } + } } if ($itemsReceiver->getProperty($imfNameIntern, 'imf_type') == 'CHECKBOX') { diff --git a/items/items_delete.php b/items/items_delete.php index f5e6bfb..85cf0e7 100644 --- a/items/items_delete.php +++ b/items/items_delete.php @@ -76,9 +76,11 @@ function displayItemDeleteForm($items, $user, $getItemId, $getItemFormer) { $imfNameIntern = $itemField->getValue('imf_name_intern'); $content = $items->getValue($imfNameIntern, 'database'); - if ($imfNameIntern === 'KEEPER' && strlen($content) > 0) { - $user->readDataById($content); - $content = $user->getValue('LAST_NAME').', '.$user->getValue('FIRST_NAME'); + if ($imfNameIntern === 'KEEPER'|| $imfNameIntern == 'LAST_RECEIVER'&& strlen($content) > 0) { + if (is_numeric($content)) { + $user->readDataById($content); + $content = $user->getValue('LAST_NAME').', '.$user->getValue('FIRST_NAME'); + } } elseif ($items->getProperty($imfNameIntern, 'imf_type') === 'DATE') { $content = $items->getHtmlValue($imfNameIntern, $content); } elseif (in_array($items->getProperty($imfNameIntern, 'imf_type'), ['DROPDOWN', 'RADIO_BUTTON'])) { diff --git a/items/items_edit_new.php b/items/items_edit_new.php index 6ad6561..bfa4c7e 100644 --- a/items/items_edit_new.php +++ b/items/items_edit_new.php @@ -94,108 +94,127 @@ $page->addJavascript(' document.addEventListener("DOMContentLoaded", function() { - var pimInInventoryField = document.querySelector("[id=\'imf-' . $pimInInventoryId . '\']"); - var pimInInventoryGroup = document.getElementById("imf-' . $pimInInventoryId . '_group"); - var pimLastReceiverField = document.querySelector("[id=\'imf-' . $pimLastReceiverId . '\']"); - var pimLastReceiverGroup = document.getElementById("imf-' . $pimLastReceiverId . '_group"); - var pimReceivedOnField = document.querySelector("[id=\'imf-' . $pimReceivedOnId . '\']"); - if ('.$datetime.' === "true") { - var pimReceivedOnFieldTime = document.querySelector("[id=\'imf-' . $pimReceivedOnId . '_time\']"); - var pimReceivedBackOnFieldTime = document.querySelector("[id=\'imf-' . $pimReceivedBackOnId . '_time\']"); - } - var pimReceivedOnGroup = document.getElementById("imf-' . $pimReceivedOnId . '_group"); - var pimReceivedBackOnField = document.querySelector("[id=\'imf-' . $pimReceivedBackOnId . '\']"); - var pimReceivedBackOnGroup = document.getElementById("imf-' . $pimReceivedBackOnId . '_group"); - - function setRequired(field, group, required) { - if (required) { - field.setAttribute("required", "required"); - group.classList.add("admidio-form-group-required"); + if (document.querySelector("[id=\'imf-' . $pimReceivedOnId . '_time\']")) { + var pDateTime = "true"; } else { - field.removeAttribute("required"); - group.classList.remove("admidio-form-group-required"); + var pDateTime = "false"; } - } - function checkPimInInventory() { - var isInInventoryChecked = pimInInventoryField.checked; - var lastReceiverValue = pimLastReceiverField.value; - var receivedBackOnValue = pimReceivedBackOnField.value; + var pimInInventoryField = document.querySelector("[id=\'imf-' . $pimInInventoryId . '\']"); + var pimInInventoryGroup = document.getElementById("imf-' . $pimInInventoryId . '_group"); + var pimLastReceiverField = document.querySelector("[id=\'imf-' . $pimLastReceiverId . '\']"); + var pimLastReceiverFieldHidden = document.querySelector("[id=\'imf-' . $pimLastReceiverId . '-hidden\']"); + var pimLastReceiverGroup = document.getElementById("imf-' . $pimLastReceiverId . '_group"); + var pimReceivedOnField = document.querySelector("[id=\'imf-' . $pimReceivedOnId . '\']"); - setRequired(pimReceivedOnField, pimReceivedOnGroup, isInInventoryChecked && lastReceiverValue !== ""); - if ('.$datetime.' === "true") { - setRequired(pimReceivedOnFieldTime, pimReceivedOnGroup, isInInventoryChecked && lastReceiverValue !== ""); - setRequired(pimReceivedBackOnFieldTime, pimReceivedBackOnGroup, isInInventoryChecked && lastReceiverValue !== ""); + if (pDateTime === "true") { + var pimReceivedOnFieldTime = document.querySelector("[id=\'imf-' . $pimReceivedOnId . '_time\']"); + var pimReceivedBackOnFieldTime = document.querySelector("[id=\'imf-' . $pimReceivedBackOnId . '_time\']"); } - setRequired(pimReceivedBackOnField, pimReceivedBackOnGroup, isInInventoryChecked && lastReceiverValue !== ""); - - setRequired(pimLastReceiverField, pimLastReceiverGroup, !isInInventoryChecked); - setRequired(pimReceivedOnField, pimReceivedOnGroup, !isInInventoryChecked); - if ('.$datetime.' === "true") { - setRequired(pimReceivedOnFieldTime, pimReceivedOnGroup, !isInInventoryChecked); - } - - if (!isInInventoryChecked && lastReceiverValue === "") { - pimReceivedOnField.value = ""; - if ('.$datetime.' === "true") { - pimReceivedOnFieldTime.value = ""; + var pimReceivedOnGroup = document.getElementById("imf-' . $pimReceivedOnId . '_group"); + var pimReceivedBackOnField = document.querySelector("[id=\'imf-' . $pimReceivedBackOnId . '\']"); + var pimReceivedBackOnGroup = document.getElementById("imf-' . $pimReceivedBackOnId . '_group"); + + function setRequired(field, group, required) { + if (required) { + field.setAttribute("required", "required"); + group.classList.add("admidio-form-group-required"); + } else { + field.removeAttribute("required"); + group.classList.remove("admidio-form-group-required"); } } - if (receivedBackOnValue !== "") { - setRequired(pimLastReceiverField, pimLastReceiverGroup, true); - setRequired(pimReceivedOnField, pimReceivedOnGroup, true); - if ('.$datetime.' === "true") { - setRequired(pimReceivedOnFieldTime, pimReceivedOnGroup, true); - setRequired(pimReceivedBackOnFieldTime, pimReceivedOnGroup, true); + window.checkPimInInventory = function() { + var isInInventoryChecked = pimInInventoryField.checked; + var lastReceiverValue = pimLastReceiverFieldHidden.value; + var receivedBackOnValue = pimReceivedBackOnField.value; + + setRequired(pimReceivedOnField, pimReceivedOnGroup, isInInventoryChecked && (lastReceiverValue && lastReceiverValue !== "undefined")); + setRequired(pimReceivedBackOnField, pimReceivedBackOnGroup, isInInventoryChecked && (lastReceiverValue && lastReceiverValue !== "undefined")); + if (pDateTime === "true") { + setRequired(pimReceivedOnFieldTime, pimReceivedOnGroup, isInInventoryChecked && (lastReceiverValue && lastReceiverValue !== "undefined")); + setRequired(pimReceivedBackOnFieldTime, pimReceivedBackOnGroup, isInInventoryChecked && (lastReceiverValue && lastReceiverValue !== "undefined")); } - } - var previousPimInInventoryState = isInInventoryChecked; + setRequired(pimLastReceiverField, pimLastReceiverGroup, !isInInventoryChecked); + setRequired(pimReceivedOnField, pimReceivedOnGroup, !isInInventoryChecked); + if (pDateTime === "true") { + setRequired(pimReceivedOnFieldTime, pimReceivedOnGroup, !isInInventoryChecked); + } - pimInInventoryField.addEventListener("change", function() { - if (!pimInInventoryField.checked && previousPimInInventoryState) { - pimReceivedBackOnField.value = ""; - if ('.$datetime.' === "true") { - pimReceivedBackOnFieldTime.value = ""; + console.log("Receiver: " + lastReceiverValue); + if (!isInInventoryChecked && (lastReceiverValue === "undefined" || !lastReceiverValue)) { + pimReceivedOnField.value = ""; + if (pDateTime === "true") { + pimReceivedOnFieldTime.value = ""; + } } - } - previousPimInInventoryState = pimInInventoryField.checked; - }); - } - function validateReceivedOnAndBackOn() { - if ('.$datetime.' === "true") { - var receivedOnDate = new Date(pimReceivedOnField.value + " " + pimReceivedOnFieldTime.value); - var receivedBackOnDate = new Date(pimReceivedBackOnField.value + " " + pimReceivedBackOnFieldTime.value); - } else { - var receivedOnDate = new Date(pimReceivedOnField.value); - var receivedBackOnDate = new Date(pimReceivedBackOnField.value); + if (receivedBackOnValue !== "") { + setRequired(pimLastReceiverField, pimLastReceiverGroup, true); + setRequired(pimReceivedOnField, pimReceivedOnGroup, true); + if (pDateTime === "true") { + setRequired(pimReceivedOnFieldTime, pimReceivedOnGroup, true); + setRequired(pimReceivedBackOnFieldTime, pimReceivedBackOnGroup, true); + } + } + + var previousPimInInventoryState = isInInventoryChecked; + + pimInInventoryField.addEventListener("change", function() { + if (!pimInInventoryField.checked && previousPimInInventoryState) { + pimReceivedBackOnField.value = ""; + if (pDateTime === "true") { + pimReceivedBackOnFieldTime.value = ""; + } + } + previousPimInInventoryState = pimInInventoryField.checked; + window.checkPimInInventory(); + }); + + pimLastReceiverFieldHidden.addEventListener("change", window.checkPimInInventory); + pimReceivedBackOnField.addEventListener("input", window.checkPimInInventory); + pimReceivedOnField.addEventListener("input", validateReceivedOnAndBackOn); + if (pDateTime === "true") { + pimReceivedOnFieldTime.addEventListener("input", validateReceivedOnAndBackOn); + pimReceivedBackOnFieldTime.addEventListener("input", validateReceivedOnAndBackOn); + } } - if (receivedOnDate > receivedBackOnDate) { - pimReceivedOnField.setCustomValidity("ReceivedOn date cannot be after ReceivedBack date."); - } else { - pimReceivedOnField.setCustomValidity(""); + function validateReceivedOnAndBackOn() { + if (pDateTime === "true") { + var receivedOnDate = new Date(pimReceivedOnField.value + " " + pimReceivedOnFieldTime.value); + var receivedBackOnDate = new Date(pimReceivedBackOnField.value + " " + pimReceivedBackOnFieldTime.value); + } else { + var receivedOnDate = new Date(pimReceivedOnField.value); + var receivedBackOnDate = new Date(pimReceivedBackOnField.value); + } + + if (receivedOnDate > receivedBackOnDate) { + pimReceivedOnField.setCustomValidity("ReceivedOn date cannot be after ReceivedBack date."); + } else { + pimReceivedOnField.setCustomValidity(""); + } } - } - pimInInventoryField.addEventListener("change", checkPimInInventory); - pimLastReceiverField.addEventListener("input", checkPimInInventory); - pimReceivedBackOnField.addEventListener("input", checkPimInInventory); - pimReceivedOnField.addEventListener("input", validateReceivedOnAndBackOn); - - if ('.$datetime.' === "true") { - pimReceivedOnFieldTime.addEventListener("input", validateReceivedOnAndBackOn); - pimReceivedBackOnFieldTime.addEventListener("input", validateReceivedOnAndBackOn); - } - pimReceivedBackOnField.addEventListener("input", validateReceivedOnAndBackOn); - checkPimInInventory(); + pimInInventoryField.addEventListener("change", window.checkPimInInventory); + pimLastReceiverFieldHidden.addEventListener("change", window.checkPimInInventory); + + pimReceivedOnField.addEventListener("input", validateReceivedOnAndBackOn); + pimReceivedBackOnField.addEventListener("input", window.checkPimInInventory); + + if (pDateTime === "true") { + pimReceivedOnFieldTime.addEventListener("input", validateReceivedOnAndBackOn); + pimReceivedBackOnFieldTime.addEventListener("input", validateReceivedOnAndBackOn); + } + pimReceivedBackOnField.addEventListener("input", validateReceivedOnAndBackOn); + window.checkPimInInventory(); }); '); } - + if ($itemField->getValue('imf_type') === 'DATE' && $itemField->getValue('imf_sequence') === '1') { $form->addInput('dummy', 'dummy', 'dummy', ['type' => $pPreferences->config['Optionen']['field_date_time_format'], 'property' => HtmlForm::FIELD_HIDDEN]); } @@ -314,6 +333,16 @@ function validateReceivedOnAndBackOn() { ) ); + $form->addInput( + 'imf-' . $items->getProperty($imfNameIntern, 'imf_id') . '-hidden', + '', + $items->getValue($imfNameIntern), + array( + 'type' => 'hidden', + 'property' => HtmlForm::FIELD_DISABLED + ) + ); + if ($page instanceof HtmlPage) { $page->addCssFile(ADMIDIO_URL . FOLDER_LIBS_CLIENT . '/select2/css/select2.css'); $page->addCssFile(ADMIDIO_URL . FOLDER_LIBS_CLIENT . '/select2-bootstrap-theme/select2-bootstrap4.css'); @@ -323,42 +352,19 @@ function validateReceivedOnAndBackOn() { $page->addJavascript(' $(document).ready(function() { - var pimInInventoryField = document.querySelector("[id=\'imf-' . $pimInInventoryId . '\']"); - var pimReceivedBackOnField = document.querySelector("[id=\'imf-' . $pimReceivedBackOnId . '\']"); - if ('.$datetime.' === "true") { - var pimReceivedBackOnFieldTime = document.querySelector("[id=\'imf-' . $pimReceivedBackOnId . '_time\']"); - } - var pimReceivedBackOnGroup = document.getElementById("imf-' . $pimReceivedBackOnId . '_group"); + var selectId = "#imf-' . $pimLastReceiverId . '"; - var selectId = "#imf-' . $items->getProperty($imfNameIntern, 'imf_id') . '"; var defaultValue = "' . htmlspecialchars($items->getValue($imfNameIntern)) . '"; var defaultText = "' . htmlspecialchars($items->getValue($imfNameIntern)) . '"; // Der Text für den Default-Wert - function setRequired(field, group, required) { - if (required) { - field.setAttribute("required", "required"); - group.classList.add("admidio-form-group-required"); - } else { - field.removeAttribute("required"); - group.classList.remove("admidio-form-group-required"); - } - } - function isSelect2Empty(selectId) { // Hole den aktuellen Wert des Select2-Feldes - var value = $(selectId).val(); - - // Überprüfe, ob der Wert leer ist - if (!value || value.length === 0 || !pimInInventoryField.checked) { - setRequired(pimReceivedBackOnField, pimReceivedBackOnGroup, false); - if ('.$datetime.' === "true") { - setRequired(pimReceivedBackOnFieldTime, pimReceivedBackOnGroup, false); - } - } else { - setRequired(pimReceivedBackOnField, pimReceivedBackOnGroup, true); - if ('.$datetime.' === "true") { - setRequired(pimReceivedBackOnFieldTime, pimReceivedBackOnGroup, true); - } + var lastReceiverValueHidden = document.querySelector("[id=\'imf-' . $pimLastReceiverId . '-hidden\']"); + var renderedElement = $("#select2-imf-' . $pimLastReceiverId .'-container"); + if (renderedElement.length) { + lastReceiverValueHidden.value = renderedElement.attr("title"); + console.log("Hidden: " + lastReceiverValueHidden.value); + window.checkPimInInventory(); } } // Prüfe, ob der Default-Wert in den Optionen enthalten ist @@ -368,12 +374,12 @@ function isSelect2Empty(selectId) { $(selectId).append(newOption).trigger("change"); } - $("#imf-' . $items->getProperty($imfNameIntern, 'imf_id').'").select2({ - theme: "bootstrap4", - allowClear: true, - placeholder: "", - language: "' . $gL10n->getLanguageLibs() . '", - tags: true + $("#imf-' . $pimLastReceiverId .'").select2({ + theme: "bootstrap4", + allowClear: true, + placeholder: "", + language: "' . $gL10n->getLanguageLibs() . '", + tags: true }); // Überwache Änderungen im Select2-Feld diff --git a/items/items_history.php b/items/items_history.php index 921fbb0..f19a4ae 100644 --- a/items/items_history.php +++ b/items/items_history.php @@ -115,8 +115,13 @@ $imlValueNew = $items->getHtmlValue($items->getPropertyById((int) $row['iml_imf_id'], 'imf_name_intern'), $row['iml_value_new']); if ($imlValueNew !== '') { if ($items->getPropertyById((int) $row['iml_imf_id'], 'imf_name_intern') === 'KEEPER' || $items->getPropertyById((int) $row['iml_imf_id'], 'imf_name_intern') === 'LAST_RECEIVER') { - $user->readDataById((int) $imlValueNew); - $columnValues[] = ''.$user->getValue('LAST_NAME').', '.$user->getValue('FIRST_NAME').''; + if (is_numeric($imlValueNew)) { + $user->readDataById($imlValueNew); + $columnValues[] = ''.$user->getValue('LAST_NAME').', '.$user->getValue('FIRST_NAME').''; + } + else { + $columnValues[] = $imlValueNew; + } } else { $columnValues[] = $imlValueNew; @@ -129,8 +134,13 @@ $imlValueOld = $items->getHtmlValue($items->getPropertyById((int) $row['iml_imf_id'], 'imf_name_intern'), $row['iml_value_old']); if ($imlValueOld !== '') { if ($items->getPropertyById((int) $row['iml_imf_id'], 'imf_name_intern') === 'KEEPER' || $items->getPropertyById((int) $row['iml_imf_id'], 'imf_name_intern') === 'LAST_RECEIVER') { - $user->readDataById((int) $imlValueOld); - $columnValues[] = ''.$user->getValue('LAST_NAME').', '.$user->getValue('FIRST_NAME').''; + if (is_numeric($imlValueOld)) { + $user->readDataById($imlValueOld); + $columnValues[] = ''.$user->getValue('LAST_NAME').', '.$user->getValue('FIRST_NAME').''; + } + else { + $columnValues[] = $imlValueNew; + } } else { $columnValues[] = $imlValueOld; diff --git a/preferences/preferences.php b/preferences/preferences.php index a579681..50f1e75 100644 --- a/preferences/preferences.php +++ b/preferences/preferences.php @@ -140,13 +140,11 @@ function addPreferencePanel($page, $id, $title, $icon, $content) { $items = new CItems($gDb, $gCurrentOrgId); $valueList = array(); foreach ($items->mItemFields as $itemField) { - if (!in_array($itemField->getValue('imf_name_intern'), array('ITEMNAME', 'KEEPER', 'LAST_RECEIVER'), true)) { - $valueList[$itemField->getValue('imf_name_intern')] = $itemField->getValue('imf_name'); - } + $valueList[$itemField->getValue('imf_name_intern')] = $itemField->getValue('imf_name'); } $helpTextIdLabelLink = 'GitHub Wiki'; $helpTextIdLabel = $gL10n->get('PLG_INVENTORY_MANAGER_PROFILE_ADDIN_DESC2', array($helpTextIdLabelLink)); -$formProfileAddin->addSelectBox('profile_addin', $gL10n->get('PLG_INVENTORY_MANAGER_ITEMFIELD'), $valueList, array('defaultValue' => $pPreferences->config['Optionen']['profile_addin'], 'showContextDependentFirstEntry' => true, 'helpTextIdInline' => 'PLG_INVENTORY_MANAGER_PROFILE_ADDIN_DESC', 'helpTextIdLabel' => $helpTextIdLabel)); +$formProfileAddin->addSelectBox('profile_addin', $gL10n->get('PLG_INVENTORY_MANAGER_ITEMFIELD'), $valueList, array('defaultValue' => $pPreferences->config['Optionen']['profile_addin'], 'helpTextIdInline' => 'PLG_INVENTORY_MANAGER_PROFILE_ADDIN_DESC', 'multiselect' => true, 'helpTextIdLabel' => $helpTextIdLabel)); $formProfileAddin->addSubmitButton('btn_save_configurations', $gL10n->get('SYS_SAVE'), array('icon' => 'fa-check', 'class' => ' offset-sm-3')); addPreferencePanel($page, 'profile_addin', $gL10n->get('PLG_INVENTORY_MANAGER_PROFILE_ADDIN'), 'fas fa-users-cog', $formProfileAddin->show()); diff --git a/preferences/preferences_function.php b/preferences/preferences_function.php index 251a4be..ad558b5 100644 --- a/preferences/preferences_function.php +++ b/preferences/preferences_function.php @@ -76,7 +76,7 @@ function handleFormSubmission($form, $preferences) { break; case 'profile_addin': - $preferences->config['Optionen']['profile_addin'] = $_POST['profile_addin']; + $preferences->config['Optionen']['profile_addin'] = isset($_POST['profile_addin']) ? array_filter($_POST['profile_addin']) : array(); break; case 'export':