protected function UpdateEntityQtypeCustomFields() { // Delete any EntityQtypeCustomFields that were selected but are no longer selected $objEntityQtypeCustomFieldArray = EntityQtypeCustomField::LoadArrayByCustomFieldId($this->objCustomField->CustomFieldId); if ($objEntityQtypeCustomFieldArray) { foreach ($objEntityQtypeCustomFieldArray as $objEntityQtypeCustomField) { // Determines whether or not a entityqtypecustomfield can stay or gets deleted $blnKeep = false; if ($this->chkEntityQtype->SelectedItems) { foreach ($this->chkEntityQtype->SelectedItems as $objEntityQtypeItem) { if ($objEntityQtypeCustomField->EntityQtypeId == $objEntityQtypeItem->Value) { $blnKeep = true; } } } // If the EntityQtype needs to be deleted, you must delete the CustomFieldValues for text and textarea, and CustomFieldSelections for all types if (!$blnKeep) { /*$objAndCondition = QQ::AndCondition(QQ::Equal(QQN::CustomFieldSelection()->EntityQtypeId, $objEntityQtypeCustomField->EntityQtypeId), QQ::Equal(QQN::CustomFieldSelection()->CustomFieldValue->CustomFieldId, $this->objCustomField->CustomFieldId)); $objClauses = QQ::Clause(QQ::Expand(QQN::CustomFieldSelection()->CustomFieldValue)); // Select all CustomFieldSelections (and expanded CustomFieldValues) by EntityQtypeId and CustomFieldId $objCustomFieldSelectionArray = CustomFieldSelection::QueryArray($objAndCondition, $objClauses); if ($objCustomFieldSelectionArray) { foreach ($objCustomFieldSelectionArray as $objCustomFieldSelection) { if ($this->objCustomField->CustomFieldQtypeId != 2) { // Deleting the CustomFieldValue will MySQL CASCADE to delete the CustomFieldSelection also $objCustomFieldSelection->CustomFieldValue->Delete(); } else { // If it is a select box, only delete the CustomFieldSelection (the CustomFieldValue stays unless it is removed as a selection entirely) $objCustomFieldSelection->Delete(); } } }*/ // If the EntityQtype needs to be deleted, you must delete EntityQtypeId for all roles in RoleEntityQTypeCustomFieldAuthorization $objRoleEntityCustomAuthArray = RoleEntityQtypeCustomFieldAuthorization::LoadArrayByEntityQtypeCustomFieldId($objEntityQtypeCustomField->EntityQtypeCustomFieldId); if ($objRoleEntityCustomAuthArray) { foreach ($objRoleEntityCustomAuthArray as $objRoleEntityCustomAuth) { $objRoleEntityCustomAuth->Delete(); } } // If the helper table exists for that EntityQtype then will delete the column in the helper table if ($strHelperTableArray = CustomFieldValue::GetHelperTableByEntityQtypeId($objEntityQtypeCustomField->EntityQtypeId)) { $strHelperTable = $strHelperTableArray[0]; $objDatabase = CustomField::GetDatabase(); $strQuery = sprintf("ALTER TABLE %s DROP `cfv_%s`;", $strHelperTable, $this->objCustomField->CustomFieldId); $objDatabase->NonQuery($strQuery); } if ($objEntityQtypeCustomField->EntityQtypeId == 1) { $this->DeleteAssetCustomFieldAssetModels(); } // Delete the EntityQtypeCustomField last $objEntityQtypeCustomField->Delete(); } else { if ($objEntityQtypeCustomField->EntityQtypeId == 1) { $this->UpadateAssetModels(); } } } } // Insert the new EntityQtypeCustomFields if ($this->lstCustomFieldQtype->SelectedItems) { foreach ($this->chkEntityQtype->SelectedItems as $objEntityQtypeItem) { // If the field doesn't already exist, then it needs to be created if (!($objEntityQtypeCustomField = EntityQtypeCustomField::LoadByEntityQtypeIdCustomFieldId($objEntityQtypeItem->Value, $this->objCustomField->CustomFieldId))) { // add asset models if ($objEntityQtypeItem->Value == 1) { $this->AppendAssetModels(); } $objEntityQtypeCustomField = new EntityQtypeCustomField(); $objEntityQtypeCustomField->CustomFieldId = $this->objCustomField->CustomFieldId; $objEntityQtypeCustomField->EntityQtypeId = $objEntityQtypeItem->Value; $objEntityQtypeCustomField->Save(); // If the helper table exists for that EntityQtype then create new column in the helper table if ($strHelperTableArray = CustomFieldValue::GetHelperTableByEntityQtypeId($objEntityQtypeItem->Value)) { $strHelperTable = $strHelperTableArray[0]; $objDatabase = CustomField::GetDatabase(); $strQuery = sprintf("ALTER TABLE %s ADD `cfv_%s` TEXT DEFAULT NULL;", $strHelperTable, $this->objCustomField->CustomFieldId); $objDatabase->NonQuery($strQuery); // If the helper table exists and have no values (empty). // It happens when the QtypeItem does not yet have the custom fields. // Uses SQL-hack to fix this issue. $strParentTableName = $strHelperTableArray[1]; $strHelperTableItemId = sprintf("%s_id", $strParentTableName); $strQuery = sprintf("INSERT INTO %s (`%s`) (SELECT `%s` FROM `%s` WHERE `%s` NOT IN (SELECT `%s` FROM %s));", $strHelperTable, $strHelperTableItemId, $strHelperTableItemId, $strParentTableName, $strHelperTableItemId, $strHelperTableItemId, $strHelperTable); $objDatabase->NonQuery($strQuery); } // Insert the new EntityQtypeCustomField to the RoleEntityQTypeCustomFieldAuthorization table, to all the roles, with authorized_flag set to true, one for View Auth and another for Edit Auth foreach (Role::LoadAll() as $objRole) { //Insert the view Auth $objRoleEntityQtypeCustomFieldAuth = new RoleEntityQtypeCustomFieldAuthorization(); $objRoleEntityQtypeCustomFieldAuth->RoleId = $objRole->RoleId; $objRoleEntityQtypeCustomFieldAuth->EntityQtypeCustomFieldId = $objEntityQtypeCustomField->EntityQtypeCustomFieldId; $objRoleEntityQtypeCustomFieldAuth->AuthorizationId = 1; $objRoleEntityQtypeCustomFieldAuth->AuthorizedFlag = 1; $objRoleEntityQtypeCustomFieldAuth->Save(); //Insert the Edit Auth $objRoleEntityQtypeCustomFieldAuth = new RoleEntityQtypeCustomFieldAuthorization(); $objRoleEntityQtypeCustomFieldAuth->RoleId = $objRole->RoleId; $objRoleEntityQtypeCustomFieldAuth->EntityQtypeCustomFieldId = $objEntityQtypeCustomField->EntityQtypeCustomFieldId; $objRoleEntityQtypeCustomFieldAuth->AuthorizationId = 2; $objRoleEntityQtypeCustomFieldAuth->AuthorizedFlag = 1; $objRoleEntityQtypeCustomFieldAuth->Save(); } } // If this field is a required field if ($this->objCustomField->RequiredFlag) { // Add the DefaultValue into the helper table if ($strHelperTableArray = CustomFieldValue::GetHelperTableByEntityQtypeId($objEntityQtypeItem->Value)) { $strHelperTable = $strHelperTableArray[0]; $blnError = false; // If the custom field is text or textarea if ($this->objCustomField->CustomFieldQtypeId != 2) { if ($this->txtDefaultValue->Text != null) { $txtDefaultValue = $this->txtDefaultValue->Text; } else { $blnError = true; } } elseif ($this->objCustomField->DefaultCustomFieldValueId != null) { $txtDefaultValue = CustomFieldValue::LoadByCustomFieldValueId($this->objCustomField->DefaultCustomFieldValueId); } else { $blnError = true; } if (!$blnError) { if (!($objEntityQtypeItem->Value == 1 && $this->rblAllAssetModels->SelectedValue == 2)) { //print($objEntityQtypeItem->Value.$this->rblAllAssetModels->SelectedValue);exit; $objDatabase = CustomField::GetDatabase(); $strQuery = sprintf("UPDATE %s SET `cfv_%s`='%s' WHERE `cfv_%s` is NULL;", $strHelperTable, $this->objCustomField->CustomFieldId, $txtDefaultValue, $this->objCustomField->CustomFieldId); $objDatabase->NonQuery($strQuery); } else { // define assets to set default value $chosenAssetModels = array(); foreach ($this->arrAssetModels as $chosenAssetModel) { $assetsToFill = Asset::LoadArrayByAssetModelId($chosenAssetModel->AssetModelId); if (count($assetsToFill > 0)) { foreach ($assetsToFill as $assetToFill) { array_push($chosenAssetModels, $assetToFill->AssetId); } } } $chosenAssetModels = implode(",", $chosenAssetModels); // Check if Model has any Assets need to be updated with new custom field and update them if ($chosenAssetModels) { $objDatabase = CustomField::GetDatabase(); $strQuery = sprintf("UPDATE %s SET `cfv_%s`='%s' WHERE `asset_id` IN ({$chosenAssetModels}) AND cfv_%s IS NULL;", $strHelperTable, $this->objCustomField->CustomFieldId, $txtDefaultValue, $this->objCustomField->CustomFieldId, $this->objCustomField->CustomFieldId); $objDatabase->NonQuery($strQuery); $strQuery = sprintf("UPDATE %s SET `cfv_%s`= NULL WHERE `asset_id` NOT IN({$chosenAssetModels});", $strHelperTable, $this->objCustomField->CustomFieldId); $objDatabase->NonQuery($strQuery); } } } } } } } }
protected function UpdateFieldLevelAuthorizations() { if ($this->objModuleArray) { //First, we get all the panels that we need to manipulate foreach ($this->objModuleArray as $objModule) { switch ($objModule->ModuleId) { case 2: $arrEntity[] = array('objPanel' => $this->pnlAssets, 'intEntity' => EntityQtype::Asset); $arrEntity[] = array('objPanel' => $this->pnlAssetModel, 'intEntity' => EntityQtype::AssetModel); break; case 3: $arrEntity[] = array('objPanel' => $this->pnlInventory, 'intEntity' => EntityQtype::Inventory); break; case 4: $arrEntity[] = array('objPanel' => $this->pnlCompany, 'intEntity' => EntityQtype::Company); $arrEntity[] = array('objPanel' => $this->pnlContact, 'intEntity' => EntityQtype::Contact); $arrEntity[] = array('objPanel' => $this->pnlAddress, 'intEntity' => EntityQtype::Address); break; case 5: $arrEntity[] = array('objPanel' => $this->pnlShipping, 'intEntity' => EntityQtype::Shipment); break; case 6: $arrEntity[] = array('objPanel' => $this->pnlReceiving, 'intEntity' => EntityQtype::Receipt); break; } } //One Panel= One Entity. For each entity, we must save chkBuiltIn for View and Edit and several CustomChecks, for View and Edit foreach ($arrEntity as $entity) { //We look for the BuiltIn View entry, searching by RoleId, EntityId and authorizationId=1 (View) $objRoleEntityQTypeBuiltInAuthView = RoleEntityQtypeBuiltInAuthorization::LoadByRoleIdEntityQtypeIdAuthorizationId($this->objRole->RoleId, $entity['intEntity'], 1); // If the entry doesn't exists, we create it. if (!$objRoleEntityQTypeBuiltInAuthView) { $objRoleEntityQTypeBuiltInAuthView = new RoleEntityQtypeBuiltInAuthorization(); $objRoleEntityQTypeBuiltInAuthView->RoleId = $this->objRole->RoleId; $objRoleEntityQTypeBuiltInAuthView->EntityQtypeId = $entity['intEntity']; $objRoleEntityQTypeBuiltInAuthView->AuthorizationId = 1; } $objRoleEntityQTypeBuiltInAuthView->AuthorizedFlag = $entity['objPanel']->chkBuiltInView->Checked; $objRoleEntityQTypeBuiltInAuthView->Save(); //We look for the BuiltIn Edit entry, searching by RoleId, EntityId and authorizationId=2 (Edit) $objRoleEntityQTypeBuiltInAuthEdit = RoleEntityQtypeBuiltInAuthorization::LoadByRoleIdEntityQtypeIdAuthorizationId($this->objRole->RoleId, $entity['intEntity'], 2); // If the entry doesn't exists, we create it. if (!$objRoleEntityQTypeBuiltInAuthEdit) { $objRoleEntityQTypeBuiltInAuthEdit = new RoleEntityQtypeBuiltInAuthorization(); $objRoleEntityQTypeBuiltInAuthEdit->RoleId = $this->objRole->RoleId; $objRoleEntityQTypeBuiltInAuthEdit->EntityQtypeId = $entity['intEntity']; $objRoleEntityQTypeBuiltInAuthEdit->AuthorizationId = 2; } $objRoleEntityQTypeBuiltInAuthEdit->AuthorizedFlag = $entity['objPanel']->chkBuiltInEdit->Checked; $objRoleEntityQTypeBuiltInAuthEdit->Save(); //We must now save the View and Edit checkboxs values of the Custom checks. if ($entity['objPanel']->arrCustomChecks) { foreach ($entity['objPanel']->arrCustomChecks as $objCustomCheck) { //We look into EntityQtypeCustomFieldId because we need to get EntityQtypeCustomFieldId in order to save into the RoleEntityCustom tables $objEntityQtypeCustomField = EntityQtypeCustomField::LoadByEntityQtypeIdCustomFieldId($entity['intEntity'], $objCustomCheck['id']); //We look for the Custom View entry, searching by RoleId, EntityQtypeCustomFieldId and authorization_id=1(View) $objRoleEntityQtypeCustomFieldView = RoleEntityQtypeCustomFieldAuthorization::LoadByRoleIdEntityQtypeCustomFieldIdAuthorizationId($this->objRole->RoleId, $objEntityQtypeCustomField->EntityQtypeCustomFieldId, 1); // If the entry doesn't exists, we create it. if (!$objRoleEntityQtypeCustomFieldView) { $objRoleEntityQtypeCustomFieldView = new RoleEntityQtypeCustomFieldAuthorization(); $objRoleEntityQtypeCustomFieldView->RoleId = $this->objRole->RoleId; $objRoleEntityQtypeCustomFieldView->EntityQtypeCustomFieldId = $objEntityQtypeCustomField->EntityQtypeCustomFieldId; $objRoleEntityQtypeCustomFieldView->AuthorizationId = 1; } $objRoleEntityQtypeCustomFieldView->AuthorizedFlag = $objCustomCheck['view']->Checked; $objRoleEntityQtypeCustomFieldView->Save(); //We look for the Custom View entry, searching by RoleId, EntityQtypeCustomFieldId and authorization_id=2(Edit) $objRoleEntityQtypeCustomFieldEdit = RoleEntityQtypeCustomFieldAuthorization::LoadByRoleIdEntityQtypeCustomFieldIdAuthorizationId($this->objRole->RoleId, $objEntityQtypeCustomField->EntityQtypeCustomFieldId, 2); // If the entry doesn't exists, we create it. if (!$objRoleEntityQtypeCustomFieldEdit) { $objRoleEntityQtypeCustomFieldEdit = new RoleEntityQtypeCustomFieldAuthorization(); $objRoleEntityQtypeCustomFieldEdit->RoleId = $this->objRole->RoleId; $objRoleEntityQtypeCustomFieldEdit->EntityQtypeCustomFieldId = $objEntityQtypeCustomField->EntityQtypeCustomFieldId; $objRoleEntityQtypeCustomFieldEdit->AuthorizationId = 2; } $objRoleEntityQtypeCustomFieldEdit->AuthorizedFlag = $objCustomCheck['edit']->Checked; $objRoleEntityQtypeCustomFieldEdit->Save(); } } } } }
protected function UpdateEntityQtypeCustomFields() { // Delete any EntityQtypeCustomFields that were selected but are no longer selected $objEntityQtypeCustomFieldArray = EntityQtypeCustomField::LoadArrayByCustomFieldId($this->objCustomField->CustomFieldId); if ($objEntityQtypeCustomFieldArray) { foreach ($objEntityQtypeCustomFieldArray as $objEntityQtypeCustomField) { // Determines whether or not a entityqtypecustomfield can stay or gets deleted $blnKeep = false; if ($this->lstEntityQtype->SelectedItems) { foreach ($this->lstEntityQtype->SelectedItems as $objEntityQtypeItem) { if ($objEntityQtypeCustomField->EntityQtypeId == $objEntityQtypeItem->Value) { $blnKeep = true; } } } // If the EntityQtype needs to be deleted, you must delete the CustomFieldValues for text and textarea, and CustomFieldSelections for all types if (!$blnKeep) { $objAndCondition = QQ::AndCondition(QQ::Equal(QQN::CustomFieldSelection()->EntityQtypeId, $objEntityQtypeCustomField->EntityQtypeId), QQ::Equal(QQN::CustomFieldSelection()->CustomFieldValue->CustomFieldId, $this->objCustomField->CustomFieldId)); $objClauses = QQ::Clause(QQ::Expand(QQN::CustomFieldSelection()->CustomFieldValue)); // Select all CustomFieldSelections (and expanded CustomFieldValues) by EntityQtypeId and CustomFieldId $objCustomFieldSelectionArray = CustomFieldSelection::QueryArray($objAndCondition, $objClauses); if ($objCustomFieldSelectionArray) { foreach ($objCustomFieldSelectionArray as $objCustomFieldSelection) { if ($this->objCustomField->CustomFieldQtypeId != 2) { // Deleting the CustomFieldValue will MySQL CASCADE to delete the CustomFieldSelection also $objCustomFieldSelection->CustomFieldValue->Delete(); } else { // If it is a select box, only delete the CustomFieldSelection (the CustomFieldValue stays unless it is removed as a selection entirely) $objCustomFieldSelection->Delete(); } } } // If the EntityQtype needs to be deleted, you must delete EntityQtypeId for all roles in RoleEntityQTypeCustomFieldAuthorization $objRoleEntityCustomAuthArray = RoleEntityQtypeCustomFieldAuthorization::LoadArrayByEntityQtypeCustomFieldId($objEntityQtypeCustomField->EntityQtypeCustomFieldId); if ($objRoleEntityCustomAuthArray) { foreach ($objRoleEntityCustomAuthArray as $objRoleEntityCustomAuth) { $objRoleEntityCustomAuth->Delete(); } } // Delete the EntityQtypeCustomField last $objEntityQtypeCustomField->Delete(); } } } // Insert the new EntityQtypeCustomFields if ($this->lstCustomFieldQtype->SelectedItems) { foreach ($this->lstEntityQtype->SelectedItems as $objEntityQtypeItem) { // If the field doesn't already exist, then it needs to be created if (!($objEntityQtypeCustomField = EntityQtypeCustomField::LoadByEntityQtypeIdCustomFieldId($objEntityQtypeItem->Value, $this->objCustomField->CustomFieldId))) { $objEntityQtypeCustomField = new EntityQtypeCustomField(); $objEntityQtypeCustomField->CustomFieldId = $this->objCustomField->CustomFieldId; $objEntityQtypeCustomField->EntityQtypeId = $objEntityQtypeItem->Value; $objEntityQtypeCustomField->Save(); //// Insert the new EntityQtypeCustomField to the RoleEntityQTypeCustomFieldAuthorization table, to all the roles, with authorized_flag set to true, one for View Auth and another for Edit Auth foreach (Role::LoadAll() as $objRole) { //Insert the view Auth $objRoleEntityQtypeCustomFieldAuth = new RoleEntityQtypeCustomFieldAuthorization(); $objRoleEntityQtypeCustomFieldAuth->RoleId = $objRole->RoleId; $objRoleEntityQtypeCustomFieldAuth->EntityQtypeCustomFieldId = $objEntityQtypeCustomField->EntityQtypeCustomFieldId; $objRoleEntityQtypeCustomFieldAuth->AuthorizationId = 1; $objRoleEntityQtypeCustomFieldAuth->AuthorizedFlag = 1; $objRoleEntityQtypeCustomFieldAuth->Save(); //Insert the Edit Auth $objRoleEntityQtypeCustomFieldAuth = new RoleEntityQtypeCustomFieldAuthorization(); $objRoleEntityQtypeCustomFieldAuth->RoleId = $objRole->RoleId; $objRoleEntityQtypeCustomFieldAuth->EntityQtypeCustomFieldId = $objEntityQtypeCustomField->EntityQtypeCustomFieldId; $objRoleEntityQtypeCustomFieldAuth->AuthorizationId = 2; $objRoleEntityQtypeCustomFieldAuth->AuthorizedFlag = 1; $objRoleEntityQtypeCustomFieldAuth->Save(); } } } } }