protected function btnMassDeleteConfirm_Click() { $this->dlgMassDelete->HideDialogBox(); $items = $this->dtgAssetModel->getSelected('AssetModelId'); $this->lblWarning->Text = ""; $arrToSkip = array(); foreach ($items as $item) { // First check that the user is authorized to edit this model $objAssetModel = AssetModel::Load($item); if (!QApplication::AuthorizeEntityBoolean($objAssetModel, 3)) { $this->lblWarning->Text = 'You are not authorized to delete one or more of the selected models.'; $this->dlgMassDelete->HideDialogBox(); return; } } // Separating items able to be deleted foreach ($items as $item) { $arrAssetAssigned = Asset::LoadArrayByAssetModelId($item); if (!$arrAssetAssigned || count($arrAssetAssigned) <= 0) { $this->arrToDelete[] = $item; } else { $arrToSkip[] = $item; } } if (count($arrToSkip) > 0) { if (count($arrToSkip) == 1) { $toBe = 'is'; $ending = ''; $skipping = 'this'; } else { $toBe = 'are'; $ending = 's'; $skipping = 'these'; } if (count($arrToSkip) == count($items)) { $this->lblWarning->Text = 'Models with assigned assets cannot be deleted.'; $this->dlgMassDelete->HideDialogBox(); return; } $intToDelete = count($items) - count($arrToSkip); $this->dlgMassDelete->Text = sprintf('<div class="title"> Model Mass Delete - %s records</div><hr/>', $intToDelete); $this->dlgMassDelete->Text .= sprintf("%s of the selected Models %s assigned to an asset and cannot be deleted.\n\t\t\t\t\t\t\t\t Would you like to continue the deletion process,\n\t\t\t\t\t\t\t\t skipping %s Model%s?<br /><br />", count($arrToSkip), $toBe, count($arrToSkip) > 1 ? $skipping . ' ' . count($arrToSkip) : $skipping, $ending); $this->btnMassDeleteConfirm->Display = false; $this->btnMassDeleteConfirmSkip->Display = true; $this->dlgMassDelete->ShowDialogBox(); } else { if (count($this->arrToDelete) > 0) { AssetModel::DeleteSelected($this->arrToDelete); $this->arrToDelete = array(); QApplication::Redirect(''); } } }
/** * Gets all associated Assets as an array of Asset objects * @param QQClause[] $objOptionalClauses additional optional QQClause objects for this query * @return Asset[] */ public function GetAssetArray($objOptionalClauses = null) { if (is_null($this->intAssetModelId)) { return array(); } try { return Asset::LoadArrayByAssetModelId($this->intAssetModelId, $objOptionalClauses); } catch (QCallerException $objExc) { $objExc->IncrementOffset(); throw $objExc; } }
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); } } } } } } } }
/** * Deletes all associated Assets * @return void */ public function DeleteAllAssets() { if (is_null($this->intAssetModelId)) { throw new QUndefinedPrimaryKeyException('Unable to call UnassociateAsset on this unsaved AssetModel.'); } // Get the Database Object for this Class $objDatabase = AssetModel::GetDatabase(); // Journaling if ($objDatabase->JournalingDatabase) { foreach (Asset::LoadArrayByAssetModelId($this->intAssetModelId) as $objAsset) { $objAsset->Journal('DELETE'); } } // Perform the SQL Query $objDatabase->NonQuery(' DELETE FROM `asset` WHERE `asset_model_id` = ' . $objDatabase->SqlVariable($this->intAssetModelId) . ' '); }