private void BindGrid() { // Get the brand for which metadata is being edited int brandId = (BrandSelector.Visible) ? BrandDropDownList1.SelectedId : CurrentUser.PrimaryBrandId; Brand brand = BrandCache.Instance.GetById(brandId); // Initialize list to store our metadata List <MetadataInfo> metadataList = new List <MetadataInfo>(); var settings = BrandMetadataSettingManager.GetCustomMetadataSettings(brandId); foreach (var setting in settings.Where(s => s.UiControlType == (int)BrandMetadataUiControlType.Select)) { // Only add it to the list if this metadata field is available for cataloguing // Otherwise, we'll just skip it as it's of no use to us. if (setting.OnAssetForm) { MetadataInfo info = new MetadataInfo { BrandId = brand.BrandId.GetValueOrDefault(), GroupNumber = setting.GroupNumber, Name = setting.FieldName }; metadataList.Add(info); } } // Toggle control visibility based on results NoMetadataPanel.Visible = (metadataList.Count == 0); MetadataGroupsRepeater.Visible = (!NoMetadataPanel.Visible); // Only bind the grid if we have metadata to display if (MetadataGroupsRepeater.Visible) { // Sort the list by name metadataList.Sort((a, b) => a.Name.CompareTo(b.Name)); // Bind the list to the repeater MetadataGroupsRepeater.DataSource = metadataList; MetadataGroupsRepeater.DataBind(); } }
protected void Page_Load(object sender, EventArgs e) { if (!Page.IsPostBack) { if (CurrentAsset.IsNull) { Page.ClientScript.RegisterClientScriptBlock(GetType(), "close", "self.close();", true); return; } // Get the asset ID int assetId = CurrentAsset.AssetId.GetValueOrDefault(); // Get the asset type info AssetTypeInfo assetType = AssetTypeInfo.Get(CurrentAsset.FileExtension); //----------------------------------------------------------------------------------------------------- // Set up UI elements based on asset type //----------------------------------------------------------------------------------------------------- OrientationRow.Visible = assetType.HasOrientation; DurationRow.Visible = assetType.HasDuration; DimensionsRow.Visible = assetType.HasDimensions; //----------------------------------------------------------------------------------------------------- // Set up asset breadcrumbs based on category //----------------------------------------------------------------------------------------------------- AssetBreadcrumb.CategoryId = CurrentAsset.PrimaryCategoryId; //----------------------------------------------------------------------------------------------------- // Update the audit log //----------------------------------------------------------------------------------------------------- AuditLogManager.LogAssetAction(assetId, CurrentUser, AuditAssetAction.ViewedAssetDetail); AuditLogManager.LogUserAction(CurrentUser, AuditUserAction.ViewedAssetDetail, string.Format("Viewed asset detail for AssetId: {0}", assetId)); //----------------------------------------------------------------------------------------------------- // Initialise the asset preview and buttons //----------------------------------------------------------------------------------------------------- AssetPreview1.Asset = CurrentAsset; AssetButtons1.Initialise(CurrentAsset); //----------------------------------------------------------------------------------------------------- // Bind categories list //----------------------------------------------------------------------------------------------------- AssetCategoriesContainer.Visible = (CurrentAsset.CategoryList.Count > 0); CategoriesRepeater.DataSource = CurrentAsset.CategoryList; CategoriesRepeater.DataBind(); //----------------------------------------------------------------------------------------------------- // Bind attached files //----------------------------------------------------------------------------------------------------- List <AssetFile> attachedFiles = CurrentAsset.GetAttachedFiles(); AttachedFilesRow.Visible = (attachedFiles.Count > 0); AttachedFilesDataList.DataSource = attachedFiles; AttachedFilesDataList.DataBind(); //----------------------------------------------------------------------------------------------------- // Bind linked assets //----------------------------------------------------------------------------------------------------- LinkedAssetsRow.Visible = (CurrentAsset.ReciprocalLinkedAssetList.Count > 0); LinkedAssetsRepeater.DataSource = CurrentAsset.ReciprocalLinkedAssetList; LinkedAssetsRepeater.DataBind(); //----------------------------------------------------------------------------------------------------- // Set up the file type icon //----------------------------------------------------------------------------------------------------- FileTypeIconImage.ImageUrl = SiteUtils.GetFileTypeImageUrl(CurrentAsset.FileExtension); FileTypeIconImage.ToolTip = CurrentAsset.Filename; //----------------------------------------------------------------------------------------------------- // Brand controlled metadata //----------------------------------------------------------------------------------------------------- AssetIdCell.InnerText = CurrentAsset.AssetId.ToString(); DateUploadedLabel.Text = CurrentAsset.UploadDate.ToString(Global.DateFormat); FilenameCell.InnerText = FileUtils.GetTruncatedFilename(CurrentAsset.Filename, 25); FileHashLabel.Text = StringUtils.IsBlank(CurrentAsset.FileHash) ? "[Not Available]" : CurrentAsset.FileHash.Substring(0, 15) + " ..."; FileHashLabel.ToolTip = CurrentAsset.FileHash; FilesizeCell.InnerText = FileUtils.FriendlyFileSize(CurrentAsset.FileSize); AssetTypeCell.InnerText = CurrentAsset.AssetType.Name; DateProducedCell.InnerText = CurrentAsset.GetProductionDate(); OriginatorCell.InnerText = CurrentAsset.Originator; TitleCell.InnerText = CurrentAsset.Title; ProjectCodeCell.InnerText = CurrentAsset.ProjectCode; BrandCell.InnerText = CurrentAsset.Brand.Name; AssetDescriptionContainer.InnerHtml = SiteUtils.ConvertTextToHtml(CurrentAsset.Description); AdditionalKeywordsCell.InnerText = CurrentAsset.Keywords; CopyrightOwnerCell.InnerHtml = StringUtils.IgnoreCaseCompare(CurrentAsset.CopyrightOwner, WebsiteBrandManager.GetBrand().OrganisationName) ? "(c) " + CurrentAsset.CopyrightOwner : CurrentAsset.CopyrightOwner; UsageRestrictionsCell.InnerHtml = CurrentAsset.UsageRestrictions; ContactEmailHyperLink.EmailAddress = CurrentAsset.ContactEmail; PublicationDateCell.InnerText = CurrentAsset.PublishDate.ToString(Global.DateFormat); ExpiryDateCell.InnerText = CurrentAsset.ExpiryDate.ToString(Global.DateFormat); // order metas according to their meta settings asset detail order numbers TrBrand.Attributes["class"] = CurrentAsset.Brand.GetMetadataSetting(BrandMetadataSettings.BRAND).AssetDetailOrderNum.ToString(); TrAssetType.Attributes["class"] = CurrentAsset.Brand.GetMetadataSetting(BrandMetadataSettings.ASSET_TYPE).AssetDetailOrderNum.ToString(); TrFilename.Attributes["class"] = CurrentAsset.Brand.GetMetadataSetting(BrandMetadataSettings.FILENAME).AssetDetailOrderNum.ToString(); TrFileSize.Attributes["class"] = CurrentAsset.Brand.GetMetadataSetting(BrandMetadataSettings.FILESIZE).AssetDetailOrderNum.ToString(); TrFileHash.Attributes["class"] = CurrentAsset.Brand.GetMetadataSetting(BrandMetadataSettings.FILEHASH).AssetDetailOrderNum.ToString(); TrDateUploaded.Attributes["class"] = CurrentAsset.Brand.GetMetadataSetting(BrandMetadataSettings.DATE_UPLOADED).AssetDetailOrderNum.ToString(); TrTitle.Attributes["class"] = CurrentAsset.Brand.GetMetadataSetting(BrandMetadataSettings.TITLE).AssetDetailOrderNum.ToString(); TrProjectCode.Attributes["class"] = CurrentAsset.Brand.GetMetadataSetting(BrandMetadataSettings.PROJECT_CODE).AssetDetailOrderNum.ToString(); TrOriginator.Attributes["class"] = CurrentAsset.Brand.GetMetadataSetting(BrandMetadataSettings.ORIGINATOR).AssetDetailOrderNum.ToString(); TrDateProduced.Attributes["class"] = CurrentAsset.Brand.GetMetadataSetting(BrandMetadataSettings.DATE_PRODUCED).AssetDetailOrderNum.ToString(); TrContactEmail.Attributes["class"] = CurrentAsset.Brand.GetMetadataSetting(BrandMetadataSettings.CONTACT_EMAIL).AssetDetailOrderNum.ToString(); TrCopyrightOwner.Attributes["class"] = CurrentAsset.Brand.GetMetadataSetting(BrandMetadataSettings.COPYRIGHT_OWNER).AssetDetailOrderNum.ToString(); TrRestrictedDownload.Attributes["class"] = CurrentAsset.Brand.GetMetadataSetting(BrandMetadataSettings.DOWNLOAD_RESTRICTIONS).AssetDetailOrderNum.ToString(); TrUsageRestrictions.Attributes["class"] = CurrentAsset.Brand.GetMetadataSetting(BrandMetadataSettings.USAGE_RESTRICTIONS).AssetDetailOrderNum.ToString(); TrAdditionalKeywords.Attributes["class"] = CurrentAsset.Brand.GetMetadataSetting(BrandMetadataSettings.ADDITIONAL_KEYWORDS).AssetDetailOrderNum.ToString(); TrPublicationDate.Attributes["class"] = CurrentAsset.Brand.GetMetadataSetting(BrandMetadataSettings.PUBLICATION_DATE).AssetDetailOrderNum.ToString(); TrExpiryDate.Attributes["class"] = CurrentAsset.Brand.GetMetadataSetting(BrandMetadataSettings.EXPIRY_DATE).AssetDetailOrderNum.ToString(); LinkedAssetsRow.Attributes["class"] = CurrentAsset.Brand.GetMetadataSetting(BrandMetadataSettings.LINKED_ASSETS).AssetDetailOrderNum.ToString(); AttachedFilesRow.Attributes["class"] = CurrentAsset.Brand.GetMetadataSetting(BrandMetadataSettings.ATTACHED_FILES).AssetDetailOrderNum.ToString(); var allSettings = BrandMetadataSettingManager.GetCustomMetadataSettings(CurrentAsset.Brand.BrandId.GetValueOrDefault()); var lastNum = allSettings.OrderBy(s => s.AssetDetailOrderNum).LastOrDefault().AssetDetailOrderNum; DimensionsRow.Attributes["class"] = (lastNum++).ToString(); DurationRow.Attributes["class"] = (lastNum++).ToString(); OrientationRow.Attributes["class"] = (lastNum++).ToString(); //----------------------------------------------------------------------------------------------------- // Other stuff //----------------------------------------------------------------------------------------------------- OrientationCell.InnerText = CurrentAsset.GetOrientation(); DurationCell.InnerText = SiteUtils.FriendlyDuration(CurrentAsset.Duration.GetValueOrDefault(), "Unknown"); DimensionsCell.InnerText = CurrentAsset.GetDimensions(); RestrictedDownloadCell.InnerText = EntitySecurityManager.IsAssetRestricted(CurrentUser, CurrentAsset) ? "Yes" : "No"; // Only show file metadata link if we have some available // ShowFileMeta data returns true if there is File metadata to display. FileMetadataLinkButton.Visible = ShowFileMetadata(); FileMetadataLinkDivider.Visible = FileMetadataLinkButton.Visible; //----------------------------------------------------------------------------------------------------- // Setup security in UI: Only display the edit and status links of the user has access //----------------------------------------------------------------------------------------------------- if (EntitySecurityManager.CanManageAsset(CurrentUser, CurrentAsset)) { string editUrl = "~/Admin/Assets/AssetForm.aspx?assetId=" + CurrentAsset.AssetId; EditHyperLink.NavigateUrl = editUrl; EditHyperLink.Attributes.Add("onClick", string.Format("GetParentWindow().location.href='{0}';self.close();return false;", ResolveUrl(editUrl))); string statsUrl = "~/Admin/Reports/AssetStats.aspx?assetId=" + assetId; StatsHyperLink.NavigateUrl = statsUrl; StatsHyperLink.Attributes.Add("onClick", string.Format("GetParentWindow().location.href='{0}';self.close();return false;", ResolveUrl(statsUrl))); string logHyperlink = "~/Admin/Reports/AssetAuditTrail.aspx?AssetId=" + CurrentAsset.AssetId; LogHyperLink.NavigateUrl = logHyperlink; LogHyperLink.Attributes.Add("onClick", string.Format("GetParentWindow().location.href='{0}';self.close();return false;", ResolveUrl(logHyperlink))); } else { AssetLinksContainer.Visible = false; } //----------------------------------------------------------------------------------------------------- // Control access or AssetOrderHistory links. //----------------------------------------------------------------------------------------------------- if (!EntitySecurityManager.CanViewAssetOrderHistory(CurrentUser, CurrentAsset)) { // Get the asset order history, if there isn't any order history // then hide the link. // Set visiblity of order history link OrderHistoryDivider.Visible = false; OrderHistoryLinkButton.Visible = false; } else { // Get the asset order history, if there isn't any order history // then hide the link. if (!ShowOrderHistory()) { // Set visiblity of order history link OrderHistoryDivider.Visible = false; OrderHistoryLinkButton.Visible = false; } } //----------------------------------------------------------------------------------------------------- // Populate blank cells //----------------------------------------------------------------------------------------------------- SiteUtils.PopulateBlankControl(AssetDescriptionContainer); SiteUtils.PopulateBlankControl(FilenameCell); SiteUtils.PopulateBlankControl(FilesizeCell); SiteUtils.PopulateBlankControl(TitleCell); SiteUtils.PopulateBlankControl(DurationCell); SiteUtils.PopulateBlankControl(ProjectCodeCell); SiteUtils.PopulateBlankControl(OriginatorCell); SiteUtils.PopulateBlankControl(DateProducedCell); SiteUtils.PopulateBlankControl(CopyrightOwnerCell); SiteUtils.PopulateBlankControl(OrientationCell); SiteUtils.PopulateBlankControl(UsageRestrictionsCell); } //sort metas on every request ClientScript.RegisterStartupScript(GetType(), "SortMetas2", "SortMetas();", true); //bind repeater on every request as otherwise labels stuff is lost MetadataRepeater.DataSource = BrandMetadataSettingManager.GetCustomMetadataSettings(CurrentAsset.BrandId); MetadataRepeater.DataBind(); }
/// <summary> /// loads the current brand filter template and inputs /// </summary> public void LoadFilter() { if (BrandId <= 0) { return; } //use preview template if set if not //then use the brand one, //if not then the system default Template = string.IsNullOrEmpty(Template) ? BrandManager.GetBrandFilterMarkup(BrandId) : Template; var parsedGroups = ParseTemplate(); if (parsedGroups == null) { throw new Exception("template could not be parsed. examine whether you are supplying valid xml."); } //use preview selectables if available //if not query the database var all = PreviewSelectables ?? BrandMetadataSettingManager.GetCustomMetadataSettings(BrandId); var enabledFilters = all .Where(s => s.UiControlType == (int)BrandMetadataUiControlType.Select) .ToList() .Where(s => s.SelectableSetting.FilterGroup > 0) .ToList(); //reset controls so that other previous calls to this routine are not taken into account //and controls that are not required (for ex. the ones persisted from the previous postback) //are not stuffed in here with the rest TemporaryMetaControlsPlaceHolder.Controls.Clear(); foreach (var f in enabledFilters) { var parsedGrp = parsedGroups.FirstOrDefault(g => g.num == f.SelectableSetting.FilterGroup); //no group defined in the template or set in the config - therefore we shouldn't //be bothered with it and continue to the next if (parsedGrp.num <= 0 || f.SelectableSetting.FilterGroup <= 0) { continue; } var input = new MetadataInputWrapper(); //visualise as its set to be seen on the catalogue and not as in admin //we are basically overriding the default brand meta setting values for the metadata input //this way f.SelectableSetting.SelectableType = f.SelectableSetting.FilterSelectableType; f.SelectableSetting.Depth = f.SelectableSetting.FilterDepth; input.SetTempBrandMetaSetting(f); input.IncludeJqueryReference = false; input.GroupNumber = f.GroupNumber; input.BrandId = BrandId; input.ResetState(); input.InitInput(true); //apply the settings from the template input.ApplyCustomControlAttributes(parsedGrp.inputStyle, parsedGrp.inputTxt, parsedGrp.inputVal); input.RefreshFromBrandAndSelet(BrandId, new int[] { }, string.Empty); TemporaryMetaControlsPlaceHolder.Controls.Add(input); } }