using System;
using System.Data;
using System.Text;
using System.Web.UI;
using System.Web.UI.WebControls;
using CMS.CMSHelper;
using CMS.GlobalHelper;
using CMS.SettingsProvider;
using CMS.SiteProvider;
using CMS.DocumentEngine;
using CMS.UIControls;
using CMS.UIControls.UniGridConfig;
using CMS.WorkflowEngine;
using Action = CMS.UIControls.UniGridConfig.Action;
public partial class CMSModules_AdminControls_Controls_Documents_Documents : CMSAdminEditControl
{
#region "Constants"
// Source fields
private const string SOURCE_SITENAME = "SiteName";
private const string SOURCE_MODIFIEDWHEN = "DocumentModifiedWhen";
private const string SOURCE_CLASSDISPLAYNAME = "ClassDisplayName";
private const string SOURCE_WORKFLOWSTEPID = "DocumentWorkflowStepID";
private const string SOURCE_WORKFLOWSTEPDISPLAYNAME = "StepDisplayName";
private const string SOURCE_VERSION = "DocumentLastVersionNumber";
private const string SOURCE_DOCUMENTNAME = "DocumentName";
private const string SOURCE_NODEID = "NodeID";
private const string SOURCE_CLASSNAME = "ClassName";
private const string SOURCE_NODESITEID = "NodeSiteID";
private const string SOURCE_NODELINKEDNODEID = "NodeLinkedNodeID";
private const string SOURCE_DOCUMENTCULTURE = "DocumentCulture";
private const string SOURCE_CULTURENAME = "CultureName";
private const string SOURCE_DOCUMENTNAMEPATH = "DocumentNamePath";
private const string SOURCE_NODEALIASPATH = "NodeAliasPath";
private const string SOURCE_TYPE = "Type";
// External source fields
private const string EXTERNALSOURCE_SITENAME = "sitename";
private const string EXTERNALSOURCE_SITEID = "siteid";
private const string EXTERNALSOURCE_STEPDISPLAYNAME = "stepdisplayname";
private const string EXTERNALSOURCE_MODIFIEDWHEN = "modifiedwhen";
private const string EXTERNALSOURCE_MODIFIEDWHENTOOLTIP = "modifiedwhentooltip";
private const string EXTERNALSOURCE_VERSION = "versionnumber";
private const string EXTERNALSOURCE_CULTURE = "culture";
private const string EXTERNALSOURCE_DOCUMENTNAME = "documentname";
private const string EXTERNALSOURCE_DOCUMENTNAMETOOLTIP = "documentnametooltip";
private const string EXTERNALSOURCE_CLASSDISPLAYNAME = "classdisplayname";
private const string EXTERNALSOURCE_CLASSDISPLAYNAMETOOLTIP = "classdisplaynametooltip";
private const string EXTERNALSOURCE_STEPNAME = "stepname";
private const string EXTERNALSOURCE_PREVIEW = "preview";
private const string EXTERNALSOURCE_EDIT = "edit";
private const string SELECTION_COLUMN = "DocumentID";
// Listing type
private const string LISTINGTYPE_RECYCLEBIN = "Recycle bin";
#endregion
#region "Private variables"
private CurrentUserInfo currentUserInfo = null;
private SiteInfo currentSiteInfo = null;
private SiteInfo siteInfo = null;
private TreeProvider mTree = null;
// Property variables
private string mOrderBy = "DocumentModifiedWhen";
private string mPath = "/%";
private string mSiteName = String.Empty;
private string mDocumentType = String.Empty;
private string mItemsPerPage = String.Empty;
private string mDocumentAge = String.Empty;
private string mDocumentName = String.Empty;
private bool mDisplayOnlyRunningSites = false;
private ListingTypeEnum mListingType = ListingTypeEnum.MyDocuments;
#endregion
#region "Public properties"
///
/// Site name for filtr.
///
public string SiteName
{
get
{
return mSiteName;
}
set
{
mSiteName = value;
}
}
///
/// Order by for grid.
///
public string OrderBy
{
get
{
return mOrderBy;
}
set
{
UniGrid.OrderBy = value;
mOrderBy = value;
}
}
///
/// Gets the number of document age conditions.
///
protected int AgeModifiersCount
{
get
{
int count = 0;
if (!String.IsNullOrEmpty(DocumentAge))
{
string[] ages = DocumentAge.Split(';');
if (ages.Length == 2)
{
if (ValidationHelper.GetInteger(ages[1], 0) > 0)
{
count++;
}
if (ValidationHelper.GetInteger(ages[0], 0) > 0)
{
count++;
}
}
}
return count;
}
}
///
/// Items per page.
///
public string ItemsPerPage
{
get
{
return mItemsPerPage;
}
set
{
mItemsPerPage = value;
}
}
///
/// If true, only documents from running sites are displayed
///
public bool DisplayOnlyRunningSites
{
get
{
return mDisplayOnlyRunningSites;
}
set
{
mDisplayOnlyRunningSites = value;
}
}
///
/// Path filter for grid.
///
public string Path
{
get
{
if (String.IsNullOrEmpty(mPath))
{
return "/%";
}
return mPath;
}
set
{
mPath = value;
}
}
///
/// Age of documents in days.
///
public string DocumentAge
{
get
{
return mDocumentAge;
}
set
{
mDocumentAge = value;
}
}
///
/// Document name for grid filetr.
///
public string DocumentName
{
get
{
return mDocumentName;
}
set
{
mDocumentName = value;
}
}
///
/// Document type for filter.
///
public string DocumentType
{
get
{
return mDocumentType;
}
set
{
mDocumentType = value;
}
}
///
/// Type of items to show.
///
public ListingTypeEnum ListingType
{
get
{
return mListingType;
}
set
{
mListingType = value;
}
}
///
/// Is one of 'my desk' document listings.
///
public bool MyDeskDocuments
{
get
{
return (ListingType == ListingTypeEnum.CheckedOut) || (ListingType == ListingTypeEnum.RecentDocuments) || (ListingType == ListingTypeEnum.MyDocuments) || (ListingType == ListingTypeEnum.PendingDocuments) || (ListingType == ListingTypeEnum.OutdatedDocuments) || (ListingType == ListingTypeEnum.All);
}
}
///
/// Indicates if control is used on live site.
///
public override bool IsLiveSite
{
get
{
return base.IsLiveSite;
}
set
{
gridElem.IsLiveSite = value;
base.IsLiveSite = value;
}
}
///
/// Text displayed when datasource is empty.
///
public string ZeroRowsText
{
get
{
return UniGrid.ZeroRowsText;
}
set
{
UniGrid.ZeroRowsText = value;
}
}
///
/// Inner grid control.
///
public UniGrid UniGrid
{
get
{
return gridElem;
}
}
///
/// Tree provider.
///
public TreeProvider Tree
{
get
{
return mTree ?? (mTree = new TreeProvider(CMSContext.CurrentUser));
}
set
{
mTree = value;
}
}
#endregion
#region "Page events"
protected void Page_Init(object sender, EventArgs e)
{
// Initialize UniGrid collections
gridElem.GridColumns = new UniGridColumns();
gridElem.GridOptions = new UniGridOptions();
gridElem.GridActions = new UniGridActions();
// Add edit action
Action editAction = new Action();
editAction.Name = "Edit";
editAction.ExternalSourceName = EXTERNALSOURCE_EDIT;
editAction.Icon = "edit.png";
editAction.Caption = "$contentmenu.edit$";
gridElem.GridActions.Actions.Add(editAction);
// Add view action
Action viewAction = new Action();
viewAction.Name = "Preview";
viewAction.ExternalSourceName = EXTERNALSOURCE_PREVIEW;
viewAction.Icon = "view.png";
viewAction.Caption = "$documents.navigatetodocument$";
gridElem.GridActions.Actions.Add(viewAction);
// Add document name column
Column documentName = new Column();
documentName.Source = UniGrid.ALL;
documentName.Sort = SOURCE_DOCUMENTNAME;
documentName.ExternalSourceName = EXTERNALSOURCE_DOCUMENTNAME;
documentName.Caption = "$general.documentname$";
documentName.Wrap = false;
documentName.Tooltip = new ColumnTooltip();
documentName.Tooltip.Source = UniGrid.ALL;
documentName.Tooltip.ExternalSourceName = EXTERNALSOURCE_DOCUMENTNAMETOOLTIP;
documentName.Tooltip.Width = "0";
documentName.Tooltip.Encode = false;
switch (ListingType)
{
case ListingTypeEnum.OutdatedDocuments:
break;
default:
documentName.Filter = new ColumnFilter();
documentName.Filter.Type = "text";
documentName.Filter.Source = SOURCE_DOCUMENTNAME;
break;
}
switch (ListingType)
{
case ListingTypeEnum.All:
documentName.Width = "80%";
break;
default:
documentName.Width = "100%";
break;
}
// Add filter for specific listing types
if ((ListingType == ListingTypeEnum.MyDocuments) || (ListingType == ListingTypeEnum.CheckedOut) || (ListingType == ListingTypeEnum.RecentDocuments) ||
(ListingType == ListingTypeEnum.PendingDocuments))
{
gridElem.GridOptions.DisplayFilter = true;
}
gridElem.GridColumns.Columns.Add(documentName);
// Add listing type (only if combined view)
Column listingType = new Column();
listingType.Source = "type";
listingType.ExternalSourceName = "type";
listingType.Sort = "type";
listingType.Wrap = false;
listingType.Caption = "$general.listingtype$";
if (ListingType == ListingTypeEnum.All)
{
gridElem.GridColumns.Columns.Add(listingType);
}
switch (ListingType)
{
case ListingTypeEnum.DocTypeDocuments:
break;
default:
// Initialize document class name column
Column classDisplayName = new Column();
classDisplayName.Source = SOURCE_CLASSDISPLAYNAME;
classDisplayName.ExternalSourceName = EXTERNALSOURCE_CLASSDISPLAYNAME;
classDisplayName.MaxLength = 50;
classDisplayName.Caption = "$general.documenttype$";
classDisplayName.Wrap = false;
classDisplayName.Tooltip = new ColumnTooltip();
classDisplayName.Tooltip.Source = SOURCE_CLASSDISPLAYNAME;
classDisplayName.Tooltip.ExternalSourceName = EXTERNALSOURCE_CLASSDISPLAYNAMETOOLTIP;
classDisplayName.Tooltip.Width = "0";
switch (ListingType)
{
case ListingTypeEnum.OutdatedDocuments:
break;
default:
classDisplayName.Filter = new ColumnFilter();
classDisplayName.Filter.Type = "text";
classDisplayName.Filter.Source = SOURCE_CLASSDISPLAYNAME;
break;
}
gridElem.GridColumns.Columns.Add(classDisplayName);
break;
}
// Add timestamp column
Column modifiedWhen = new Column();
modifiedWhen.Source = SOURCE_MODIFIEDWHEN;
modifiedWhen.ExternalSourceName = EXTERNALSOURCE_MODIFIEDWHEN;
modifiedWhen.Wrap = false;
modifiedWhen.Tooltip = new ColumnTooltip();
modifiedWhen.Tooltip.ExternalSourceName = EXTERNALSOURCE_MODIFIEDWHENTOOLTIP;
switch (ListingType)
{
case ListingTypeEnum.CheckedOut:
modifiedWhen.Caption = "$general.checkouttime$";
break;
default:
modifiedWhen.Caption = "$general.modified$";
break;
}
gridElem.GridColumns.Columns.Add(modifiedWhen);
// Add column with workflow information
Column workflowStep = new Column();
workflowStep.Caption = "$general.workflowstep$";
workflowStep.Wrap = false;
switch (ListingType)
{
case ListingTypeEnum.All:
workflowStep.Source = SOURCE_WORKFLOWSTEPID;
workflowStep.ExternalSourceName = EXTERNALSOURCE_STEPNAME;
break;
default:
workflowStep.Source = SOURCE_WORKFLOWSTEPDISPLAYNAME;
workflowStep.ExternalSourceName = EXTERNALSOURCE_STEPDISPLAYNAME;
break;
}
gridElem.GridColumns.Columns.Add(workflowStep);
// Add version information
switch (ListingType)
{
case ListingTypeEnum.WorkflowDocuments:
Column versionNumber = new Column();
versionNumber.Source = SOURCE_VERSION;
versionNumber.ExternalSourceName = EXTERNALSOURCE_VERSION;
versionNumber.Caption = "$general.version$";
versionNumber.Wrap = false;
gridElem.GridColumns.Columns.Add(versionNumber);
break;
}
// Add culture column
Column culture = new Column();
culture.Source = UniGrid.ALL;
culture.ExternalSourceName = EXTERNALSOURCE_CULTURE;
culture.Caption = "$general.language$";
culture.Sort = SOURCE_CULTURENAME;
culture.Wrap = false;
gridElem.GridColumns.Columns.Add(culture);
// Add site name column
Column siteName = null;
switch (ListingType)
{
default:
siteName = new Column();
siteName.Source = SOURCE_SITENAME;
siteName.ExternalSourceName = EXTERNALSOURCE_SITENAME;
siteName.Caption = "$general.site$";
siteName.Wrap = false;
gridElem.GridColumns.Columns.Add(siteName);
break;
case ListingTypeEnum.All:
siteName = new Column();
siteName.Source = SOURCE_NODESITEID;
siteName.ExternalSourceName = EXTERNALSOURCE_SITEID;
siteName.Caption = "$general.site$";
siteName.Wrap = false;
gridElem.GridColumns.Columns.Add(siteName);
break;
}
// Prepare columns to select
string baseColumns = SqlHelperClass.MergeColumns(new string[] { SOURCE_CLASSNAME, SOURCE_SITENAME, SOURCE_CLASSDISPLAYNAME, SOURCE_MODIFIEDWHEN, SOURCE_WORKFLOWSTEPDISPLAYNAME, SOURCE_NODEID, SOURCE_DOCUMENTCULTURE, SOURCE_DOCUMENTNAME, SOURCE_DOCUMENTNAMEPATH, SOURCE_NODEALIASPATH, SOURCE_NODELINKEDNODEID, SOURCE_CULTURENAME });
// Set UniGrid options
switch (ListingType)
{
case ListingTypeEnum.PageTemplateDocuments:
gridElem.Columns = SqlHelperClass.MergeColumns(new string[] { baseColumns, SOURCE_NODESITEID, "NodeACLID", "NodeOwner" });
gridElem.ObjectType = "cms.documentlist";
break;
case ListingTypeEnum.WorkflowDocuments:
gridElem.Columns = SqlHelperClass.MergeColumns(new string[] { baseColumns, SELECTION_COLUMN, SOURCE_VERSION });
gridElem.ObjectType = "cms.documentlist";
break;
case ListingTypeEnum.All:
gridElem.ObjectType = "cms.userdocumentslist";
break;
default:
gridElem.Columns = baseColumns;
gridElem.ObjectType = "cms.documentlist";
break;
}
switch (ListingType)
{
case ListingTypeEnum.OutdatedDocuments:
case ListingTypeEnum.WorkflowDocuments:
break;
case ListingTypeEnum.All:
gridElem.GridOptions.DisplayFilter = true;
break;
}
switch (ListingType)
{
case ListingTypeEnum.WorkflowDocuments:
gridElem.GridOptions.ShowSelection = true;
gridElem.GridOptions.SelectionColumn = SELECTION_COLUMN;
break;
}
}
protected void Page_Load(object sender, EventArgs e)
{
if (StopProcessing)
{
// Do nothing
return;
}
gridElem.IsLiveSite = IsLiveSite;
gridElem.OnExternalDataBound += gridElem_OnExternalDataBound;
gridElem.HideControlForZeroRows = false;
currentUserInfo = CMSContext.CurrentUser;
// Initialize strings
string strDays = GetString("MyDesk.OutdatedDocuments.Days");
string strWeeks = GetString("MyDesk.OutdatedDocuments.Weeks");
string strMonths = GetString("MyDesk.OutdatedDocuments.Months");
string strYears = GetString("MyDesk.OutdatedDocuments.Years");
// Set proper XML for control type
switch (ListingType)
{
case ListingTypeEnum.CheckedOut:
gridElem.ZeroRowsText = GetString("mydesk.ui.nochecked");
gridElem.WhereCondition = "View_CMS_Tree_Joined.DocumentCheckedOutByUserID = @UserID";
break;
case ListingTypeEnum.MyDocuments:
gridElem.ZeroRowsText = GetString("general.nodatafound");
gridElem.WhereCondition = "View_CMS_Tree_Joined.NodeOwner = @UserID";
break;
case ListingTypeEnum.RecentDocuments:
gridElem.ZeroRowsText = GetString("general.nodatafound");
gridElem.WhereCondition = "((View_CMS_Tree_Joined.DocumentCreatedByUserID = @UserID OR View_CMS_Tree_Joined.DocumentModifiedByUserID = @UserID OR View_CMS_Tree_Joined.DocumentCheckedOutByUserID = @UserID))";
break;
case ListingTypeEnum.PendingDocuments:
gridElem.ZeroRowsText = GetString("mydesk.ui.nowaitingdocs");
gridElem.WhereCondition = WorkflowStepInfoProvider.GetWorkflowPendingStepsWhereCondition(currentUserInfo, SiteName);
break;
case ListingTypeEnum.OutdatedDocuments:
// Initialize controls
if (!RequestHelper.IsPostBack())
{
// Fill the dropdown list
drpFilter.Items.Add(strDays);
drpFilter.Items.Add(strWeeks);
drpFilter.Items.Add(strMonths);
drpFilter.Items.Add(strYears);
// Load default value
txtFilter.Text = "1";
drpFilter.SelectedValue = strYears;
// Bind dropdown lists
BindDropDowns();
}
gridElem.WhereCondition = "((DocumentCreatedByUserID = @UserID OR DocumentModifiedByUserID = @UserID OR DocumentCheckedOutByUserID = @UserID) AND " + SOURCE_MODIFIEDWHEN + "<=@OlderThan AND " + SOURCE_NODESITEID + "=@SiteID)";
// Add where condition
if (!string.IsNullOrEmpty(txtDocumentName.Text))
{
gridElem.WhereCondition = SqlHelperClass.AddWhereCondition(gridElem.WhereCondition, GetOutdatedWhereCondition(SOURCE_DOCUMENTNAME, drpDocumentName, txtDocumentName));
}
if (!string.IsNullOrEmpty(txtDocumentType.Text))
{
gridElem.WhereCondition = SqlHelperClass.AddWhereCondition(gridElem.WhereCondition, GetOutdatedWhereCondition(SOURCE_CLASSDISPLAYNAME, drpDocumentType, txtDocumentType));
}
gridElem.ZeroRowsText = GetString("mydesk.ui.nooutdated");
// Show custom filter
plcOutdatedFilter.Visible = true;
break;
case ListingTypeEnum.WorkflowDocuments:
break;
case ListingTypeEnum.PageTemplateDocuments:
gridElem.ZeroRowsText = GetString("Administration-PageTemplate_Header.Documents.nodata");
break;
case ListingTypeEnum.CategoryDocuments:
gridElem.ZeroRowsText = GetString("Category_Edit.Documents.nodata");
break;
case ListingTypeEnum.ProductDocuments:
break;
case ListingTypeEnum.TagDocuments:
gridElem.ZeroRowsText = GetString("taggroup_edit.documents.nodata");
break;
case ListingTypeEnum.DocTypeDocuments:
gridElem.ZeroRowsText = GetString("DocumentType_Edit_General.Documents.nodata");
break;
case ListingTypeEnum.All:
gridElem.ZeroRowsText = GetString("mydesk.ui.nodata");
break;
}
// Page Size
if (!RequestHelper.IsPostBack() && !String.IsNullOrEmpty(ItemsPerPage))
{
gridElem.Pager.DefaultPageSize = ValidationHelper.GetInteger(ItemsPerPage, -1);
}
// Order
switch (ListingType)
{
case ListingTypeEnum.WorkflowDocuments:
case ListingTypeEnum.OutdatedDocuments:
case ListingTypeEnum.PageTemplateDocuments:
case ListingTypeEnum.CategoryDocuments:
case ListingTypeEnum.TagDocuments:
case ListingTypeEnum.ProductDocuments:
case ListingTypeEnum.DocTypeDocuments:
gridElem.OrderBy = SOURCE_DOCUMENTNAME;
break;
default:
gridElem.OrderBy = OrderBy;
break;
}
if (ListingType == ListingTypeEnum.All)
{
gridElem.WhereCondition = SqlHelperClass.AddWhereCondition(gridElem.WhereCondition, String.Format("(UserID1 = {0} OR UserID2 = {0} OR UserID3 = {0})", currentUserInfo.UserID));
}
// Create query parameters
QueryDataParameters parameters = new QueryDataParameters();
parameters.Add("@Now", DateTime.Now);
if (ListingType == ListingTypeEnum.OutdatedDocuments)
{
parameters.Add("@SiteID", CMSContext.CurrentSite.SiteID);
DateTime olderThan = DateTime.Now;
int dateTimeValue = ValidationHelper.GetInteger(txtFilter.Text, 0);
if (drpFilter.SelectedValue == strDays)
{
olderThan = olderThan.AddDays(-dateTimeValue);
}
else if (drpFilter.SelectedValue == strWeeks)
{
olderThan = olderThan.AddDays(-dateTimeValue * 7);
}
else if (drpFilter.SelectedValue == strMonths)
{
olderThan = olderThan.AddMonths(-dateTimeValue);
}
else if (drpFilter.SelectedValue == strYears)
{
olderThan = olderThan.AddYears(-dateTimeValue);
}
parameters.Add("@OlderThan", olderThan);
}
// Initialize UserID query parameter
int userID = currentUserInfo.UserID;
if (ListingType == ListingTypeEnum.PendingDocuments)
{
parameters.Add("@SiteID", SiteInfoProvider.GetSiteID(SiteName));
if ((currentUserInfo.IsGlobalAdministrator) || (currentUserInfo.IsAuthorizedPerResource("CMS.Content", "manageworkflow")))
{
userID = -1;
}
}
parameters.Add("@UserID", userID);
// Document Age
if (DocumentAge != String.Empty)
{
string[] ages = DocumentAge.Split(';');
if (ages.Length == 2)
{
// Add from a to values to temp parameters
int from = ValidationHelper.GetInteger(ages[1], 0);
int to = ValidationHelper.GetInteger(ages[0], 0);
if (from > 0)
{
gridElem.WhereCondition = SqlHelperClass.AddWhereCondition(gridElem.WhereCondition, SOURCE_MODIFIEDWHEN + " >= @FROM");
parameters.Add("@FROM", DateTime.Now.AddDays((-1) * from));
}
if (to > 0)
{
gridElem.WhereCondition = SqlHelperClass.AddWhereCondition(gridElem.WhereCondition, SOURCE_MODIFIEDWHEN + " <= @TO");
parameters.Add("@TO", DateTime.Now.AddDays((-1) * to));
}
}
}
// Site name
if (!String.IsNullOrEmpty(SiteName) && (SiteName != UniGrid.ALL))
{
SiteInfo site = SiteInfoProvider.GetSiteInfo(SiteName);
if (site != null)
{
gridElem.WhereCondition = SqlHelperClass.AddWhereCondition(gridElem.WhereCondition, SOURCE_NODESITEID + " = " + site.SiteID);
UniGrid.GridColumns.Columns.RemoveAll(c => (c.Source == SOURCE_SITENAME || c.Source == SOURCE_NODESITEID));
}
}
// Path filter
if (Path != String.Empty)
{
if (ListingType == ListingTypeEnum.All)
{
gridElem.WhereCondition = SqlHelperClass.AddWhereCondition(gridElem.WhereCondition, SOURCE_DOCUMENTNAMEPATH + " LIKE N'" + CMSContext.ResolveCurrentPath(Path).Replace("'", "''") + "'");
}
else
{
gridElem.WhereCondition = SqlHelperClass.AddWhereCondition(gridElem.WhereCondition, SOURCE_NODEALIASPATH + " LIKE N'" + CMSContext.ResolveCurrentPath(Path).Replace("'", "''") + "'");
}
}
// Document type filer
if (!String.IsNullOrEmpty(DocumentType))
{
string[] types = DocumentType.Split(';');
gridElem.WhereCondition = SqlHelperClass.AddWhereCondition(gridElem.WhereCondition, SqlHelperClass.GetWhereCondition(SOURCE_CLASSNAME, types, true));
}
// Document name filter
if (DocumentName != String.Empty)
{
gridElem.WhereCondition = SqlHelperClass.AddWhereCondition(gridElem.WhereCondition, SOURCE_DOCUMENTNAME + " LIKE N'%" + SqlHelperClass.GetSafeQueryString(DocumentName, false) + "%'");
}
// Site running filter
if ((SiteName == UniGrid.ALL) && DisplayOnlyRunningSites)
{
gridElem.WhereCondition = SqlHelperClass.AddWhereCondition(gridElem.WhereCondition, "SiteName IN (SELECT SiteName FROM CMS_Site WHERE SiteStatus = 'RUNNING')");
}
// Set parameters
gridElem.QueryParameters = parameters;
}
protected void Page_PreRender(object sender, EventArgs e)
{
string action = "window.top.location.href = completeUrl;";
switch (ListingType)
{
case ListingTypeEnum.PageTemplateDocuments:
if (IsCMSDesk)
{
action = "window.open(completeUrl, 'PageTemplateWindow');";
}
break;
}
// Initialize JavaScripts
StringBuilder redirectScript = new StringBuilder();
redirectScript.Append(
@"function SelectItem(nodeId, culture, url) {
if (nodeId > 0) {
var completeUrl = url + 'default.aspx?section=content&action=edit&nodeid=' + nodeId + '&culture=' + culture;
", action, @"
}
return false;
}");
ScriptHelper.RegisterClientScriptBlock(this, typeof(string), "docRedir", ScriptHelper.GetScript(redirectScript.ToString()));
}
#endregion
#region "Grid events"
///
/// External data binding handler.
///
protected object gridElem_OnExternalDataBound(object sender, string sourceName, object parameter)
{
// Prepare variables
int nodeId = 0;
string culture = string.Empty;
DataRowView data = null;
sourceName = sourceName.ToLowerCSafe();
SiteInfo site = null;
switch (sourceName)
{
// Edit button
case EXTERNALSOURCE_EDIT:
if (sender is ImageButton)
{
ImageButton editButton = (ImageButton)sender;
data = UniGridFunctions.GetDataRowView(editButton.Parent as DataControlFieldCell);
site = GetSiteFromRow(data);
nodeId = ValidationHelper.GetInteger(data[SOURCE_NODEID], 0);
culture = ValidationHelper.GetString(data[SOURCE_DOCUMENTCULTURE], string.Empty);
string type = ValidationHelper.GetString(DataHelper.GetDataRowViewValue(data, SOURCE_TYPE), string.Empty);
// Check permissions
if ((site.Status != SiteStatusEnum.Running) || (!CMSMyDeskPage.IsUserAuthorizedPerContent(site.SiteName) || ((ListingType == ListingTypeEnum.All) && (type == LISTINGTYPE_RECYCLEBIN))))
{
editButton.ImageUrl = GetImageUrl("Design/Controls/UniGrid/Actions/Editdisabled.png");
editButton.OnClientClick = "return false";
editButton.Style.Add(HtmlTextWriterStyle.Cursor, "default");
}
else
{
editButton.OnClientClick = "return SelectItem(" + nodeId + ", '" + culture + "','" + ResolveSiteUrl(site) + "');";
}
return editButton;
}
return sender;
// Preview button
case EXTERNALSOURCE_PREVIEW:
if (sender is ImageButton)
{
ImageButton previewButton = (ImageButton)sender;
data = UniGridFunctions.GetDataRowView(previewButton.Parent as DataControlFieldCell);
site = GetSiteFromRow(data);
string type = ValidationHelper.GetString(DataHelper.GetDataRowViewValue(data, SOURCE_TYPE), string.Empty);
if ((site.Status != SiteStatusEnum.Running) || ((ListingType == ListingTypeEnum.All) && (type == LISTINGTYPE_RECYCLEBIN)))
{
previewButton.ImageUrl = GetImageUrl("Design/Controls/UniGrid/Actions/Viewdisabled.png");
previewButton.OnClientClick = "return false";
previewButton.Style.Add(HtmlTextWriterStyle.Cursor, "default");
}
else
{
nodeId = ValidationHelper.GetInteger(data[SOURCE_NODEID], 0);
culture = ValidationHelper.GetString(data[SOURCE_DOCUMENTCULTURE], string.Empty);
string nodeAliasPath = ValidationHelper.GetString(data[SOURCE_NODEALIASPATH], string.Empty);
// Generate preview URL
string url = CMSContext.GetUrl(nodeAliasPath, null, site.SiteName);
url = URLHelper.AddParameterToUrl(url, "viewmode", "2");
url = URLHelper.AddParameterToUrl(url, URLHelper.LanguageParameterName, culture);
previewButton.OnClientClick = "window.open('" + URLHelper.ResolveUrl(url) + "','LiveSite');return false;";
}
return previewButton;
}
return sender;
// Document name column
case EXTERNALSOURCE_DOCUMENTNAME:
data = (DataRowView)parameter;
string name = ValidationHelper.GetString(data[SOURCE_DOCUMENTNAME], string.Empty);
nodeId = ValidationHelper.GetInteger(data[SOURCE_NODEID], 0);
culture = ValidationHelper.GetString(data[SOURCE_DOCUMENTCULTURE], string.Empty);
string className = ValidationHelper.GetString(data[SOURCE_CLASSNAME], string.Empty);
site = GetSiteFromRow(data);
if (name == string.Empty)
{
name = GetString("general.notspecified");
}
// Add document type icon
string result = string.Empty;
switch (ListingType)
{
case ListingTypeEnum.DocTypeDocuments:
break;
default:
result = "
";
break;
}
result += "" + HTMLHelper.HTMLEncode(TextHelper.LimitLength(name, 50)) + "";
if (ListingType != ListingTypeEnum.All)
{
bool isLink = (data.Row.Table.Columns.Contains(SOURCE_NODELINKEDNODEID) && (data[SOURCE_NODELINKEDNODEID] != DBNull.Value));
if (isLink)
{
// Add link icon
result += UIHelper.GetDocumentMarkImage(Parent.Page, DocumentMarkEnum.Link);
}
}
return result;
// Class name column
case EXTERNALSOURCE_CLASSDISPLAYNAME:
string displayName = ValidationHelper.GetString(parameter, string.Empty);
if (sourceName.ToLowerCSafe() == EXTERNALSOURCE_CLASSDISPLAYNAMETOOLTIP)
{
displayName = TextHelper.LimitLength(displayName, 50);
}
if (displayName == string.Empty)
{
displayName = "-";
}
return HTMLHelper.HTMLEncode(ResHelper.LocalizeString(displayName));
case EXTERNALSOURCE_DOCUMENTNAMETOOLTIP:
data = (DataRowView)parameter;
return UniGridFunctions.DocumentNameTooltip(data);
case EXTERNALSOURCE_STEPDISPLAYNAME:
// Step display name
string stepName = ValidationHelper.GetString(parameter, string.Empty);
if (stepName == string.Empty)
{
stepName = "-";
}
return HTMLHelper.HTMLEncode(ResHelper.LocalizeString(stepName));
case EXTERNALSOURCE_STEPNAME:
// Step display name from ID
int stepId = ValidationHelper.GetInteger(parameter, 0);
if (stepId > 0)
{
WorkflowStepInfo wsi = WorkflowStepInfoProvider.GetWorkflowStepInfo(stepId);
if (wsi != null)
{
return HTMLHelper.HTMLEncode(ResHelper.LocalizeString(wsi.StepDisplayName));
}
}
return "-";
case EXTERNALSOURCE_CULTURE:
data = (DataRowView)parameter;
culture = ValidationHelper.GetString(data[SOURCE_DOCUMENTCULTURE], string.Empty);
// Add icon
if (culture != String.Empty)
{
return UniGridFunctions.DocumentCultureFlag(data, Page);
}
return "-";
// Version column
case EXTERNALSOURCE_VERSION:
if (parameter == DBNull.Value)
{
parameter = "-";
}
parameter = HTMLHelper.HTMLEncode(parameter.ToString());
return parameter;
// Site name column
case EXTERNALSOURCE_SITENAME:
string siteName = ValidationHelper.GetString(parameter, string.Empty);
siteInfo = SiteInfoProvider.GetSiteInfo(siteName);
return HTMLHelper.HTMLEncode(siteInfo.DisplayName);
case EXTERNALSOURCE_SITEID:
int siteId = ValidationHelper.GetInteger(parameter, 0);
siteInfo = SiteInfoProvider.GetSiteInfo(siteId);
return HTMLHelper.HTMLEncode(siteInfo.DisplayName);
// Document timestamp column
case EXTERNALSOURCE_MODIFIEDWHEN:
case EXTERNALSOURCE_MODIFIEDWHENTOOLTIP:
if (string.IsNullOrEmpty(parameter.ToString()))
{
return string.Empty;
}
else
{
if (currentSiteInfo == null)
{
currentSiteInfo = CMSContext.CurrentSite;
}
bool displayGMT = (sourceName == EXTERNALSOURCE_MODIFIEDWHENTOOLTIP);
DateTime time = ValidationHelper.GetDateTime(parameter, DateTimeHelper.ZERO_TIME);
return TimeZoneHelper.ConvertToUserTimeZone(time, displayGMT, currentUserInfo, currentSiteInfo);
}
}
return parameter;
}
#endregion
#region "Methods"
///
/// Gets where condition based on value of given controls.
///
/// Column to compare
/// List control with operator
/// Text control with value
/// Where condition for outdated documents
private static string GetOutdatedWhereCondition(string column, ListControl drpOperator, ITextControl valueBox)
{
string condition = drpOperator.SelectedValue;
string value = SqlHelperClass.GetSafeQueryString(valueBox.Text, false);
value = TextHelper.LimitLength(value, 100);
string where = column + " ";
if (string.IsNullOrEmpty(value))
{
where = string.Empty;
}
else
{
// Create condition based on operator
switch (condition)
{
case "LIKE":
case "NOT LIKE":
where += condition + " N'%" + value + "%'";
break;
case "=":
case "<>":
where += condition + " N'" + value + "'";
break;
default:
where = string.Empty;
break;
}
}
return where;
}
///
/// Fills given site object based on data from given row.
///
/// Row with site reference
/// Initialized site info
private SiteInfo GetSiteFromRow(DataRowView data)
{
SiteInfo site = null;
if (ListingType == ListingTypeEnum.All)
{
site = SiteInfoProvider.GetSiteInfo(ValidationHelper.GetInteger(data[SOURCE_NODESITEID], 0));
}
else
{
site = SiteInfoProvider.GetSiteInfo(ValidationHelper.GetString(data[SOURCE_SITENAME], String.Empty));
}
return site;
}
///
/// Binds filter dropdown lists with conditions.
///
private void BindDropDowns()
{
string[] conditions = { "LIKE", "NOT LIKE", "=", "<>" };
drpDocumentName.DataSource = conditions;
drpDocumentType.DataSource = conditions;
drpDocumentName.DataBind();
drpDocumentType.DataBind();
}
///
/// Make url for site in form 'http(s)://sitedomain/application/cmsdesk'.
///
/// Site info object
private string ResolveSiteUrl(SiteInfo site)
{
string sitedomain = site.DomainName.TrimEnd('/');
string application = null;
// Support of multiple web sites on single domain
if (!sitedomain.Contains("/"))
{
application = ResolveUrl("~/.").TrimEnd('/');
}
// Application includes string '/cmsdesk'.
application += "/cmsdesk/";
return URLHelper.Url.Scheme + "://" + sitedomain + application;
}
#endregion
}