Ejemplo n.º 1
0
        /// <summary>
        /// Thủ tục thực hiện chuyển vị trí của Module đã chọn xuống 1 mức
        /// </summary>
        /// <param name="idx">Vị trí hiện thời</param>
        /// <param name="list">Danh sách Module</param>
        internal void MoveModuleDown(int idx, ModuleList list)
        {
            // Nạp cấu trúc Portal
            TemplateDefinition td = TemplateDefinition.Load();

            // Lấy thông tin cột chứa Module hiện thời
            PortalDefinition.Column _objColumnContainer = td.GetColumn(list.ContainerColumnReference);

            // Lấy danh sách Module của cột
            ArrayList _arrModuleList = _objColumnContainer.ModuleList;

            // Nếu Module đang ở mức cuối cùng thì kết thúc thủ tục
            if (idx >= _arrModuleList.Count - 1)
            {
                return;
            }

            // Lấy thông tin Module hiện thời từ danh sách Module
            PortalDefinition.Module m = (PortalDefinition.Module)_arrModuleList[idx];

            // Gỡ Module ra khỏi vị trí hiện thời
            _arrModuleList.RemoveAt(idx);

            // Chèn Module vào vị trí mới
            _arrModuleList.Insert(idx + 1, m);

            // Lưu cấu trúc Portal
            td.Save();

            // Rebind
            LoadData(CurrentTemplateReference);
            ShowCurrentEditingColumn();
        }
        protected void btnBindModuleEditForm_Click(object sender, EventArgs e)
        {
            string tab = (string)ViewState["TabReference"];

            PortalDefinition pd = PortalDefinition.Load();

            PortalDefinition.Tab t = pd.GetTab(tab);

            string arg        = Request.Form["pageArg"];
            string moduleRef  = string.Empty;
            string moduleType = string.Empty;
            string columnRef  = string.Empty;
            string title      = string.Empty;

            if (arg.Split("$".ToCharArray()).Length == 4)
            {
                moduleRef  = arg.Split("$".ToCharArray())[0];
                moduleType = arg.Split("$".ToCharArray())[1];
                title      = arg.Split("$".ToCharArray())[2];
                columnRef  = arg.Split("$".ToCharArray())[3];
            }
            else
            {
                return;
            }

            PortalDefinition.Column column = pd.GetColumn(columnRef);

            if (moduleRef == null || moduleRef == string.Empty || moduleRef.ToLower() == "null")
            {
                module       = PortalDefinition.Module.Create();
                module.type  = moduleType;
                module.title = title;
                moduleRef    = module.reference;
            }
            else
            {
                module           = new PortalDefinition.Module();
                module.type      = moduleType;
                module.title     = title;
                module.reference = moduleRef;
            }

            if (module != null)
            {
                module.LoadModuleSettings();
                module.LoadRuntimeProperties();

                moduleSettings        = module.moduleSettings;
                moduleRuntimeSettings = module.moduleRuntimeSettings;

                lblModuleType.Text = moduleType;
                txtReference.Text  = module.reference;


                rptRuntimeProperties.DataSource = module.GetRuntimePropertiesSource(true);
                rptRuntimeProperties.DataBind();
                upEditModuleForm.Update();
            }
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Thủ tục thêm một Module mới
        /// </summary>
        /// <param name="_strColumnRef">Mã tham chiếu đến cột sẽ chứa Module</param>
        internal void AddModule(string _strColumnRef)
        {
            // Nạp cấu trúc portal
            TemplateDefinition td = TemplateDefinition.Load();

            // Tìm cột sẽ chứa Module mới
            PortalDefinition.Column _objColumnContainer = td.GetColumn(_strColumnRef);

            if (_objColumnContainer != null)
            {
                // Tạo Module mới
                PortalDefinition.Module _objNewModule = PortalDefinition.Module.Create();

                // Thêm Module mới vào danh sách Module của cột
                _objColumnContainer.ModuleList.Add(_objNewModule);

                // Lưu cấu trúc Portal
                td.Save();

                // Nạp lại thông tin Tab hiện thời
                LoadData(CurrentTemplateReference);

                // Hiển thị form sửa thông tin Module
                EditModule(_objNewModule.reference);
            }
        }
        HtmlTable genTable(PortalDefinition.Column column)
        {
            HtmlTable table = new HtmlTable();

            table.Style["width"] = "100%";

            HtmlTableRow trHeader = genHeaderTable(column);

            table.Controls.Add(trHeader);

            HtmlTableRow trContent = new HtmlTableRow();


            // render column inside table
            if (column.Columns.Count == 0)
            {
                trContent.Controls.Add(genColumn(column));
            }
            else
            {
                foreach (PortalDefinition.Column childColumn in column.Columns)
                {
                    trContent.Controls.Add(genColumn(childColumn));
                }
            }
            table.Controls.Add(trContent);
            return(table);
        }
Ejemplo n.º 5
0
        /// <summary>
        /// Thủ tục lấy danh sách mã tham chiếu của tất cả các vùng có thể đặt khung (bên trong chứa Module)
        /// </summary>
        /// <param name="_arrColumns">Mảng chứa danh sách cột xuất phát</param>
        /// <param name="_strColumnContainerList">
        /// Tham chiếu đến chuỗi chứa danh sách các mã tham chiếu cần lấy.
        /// Sử dụng StringBuilder để tiết kiệm bộ nhớ
        /// </param>
        private void GetContainerList(ArrayList _arrColumns, ref StringBuilder _strColumnContainerList)
        {
            // Nếu danh sách cột rỗng thì kết thúc hàm
            if (_arrColumns == null || _arrColumns.Count == 0)
            {
                return;
            }

            // Duyệt danh sách cột xuất phát
            for (int _intColumnCount = 0; _intColumnCount < _arrColumns.Count; _intColumnCount++)
            {
                // Tạo đối tượng đại diện cho cột đang xét
                PortalDefinition.Column _objColumn = (PortalDefinition.Column)_arrColumns[_intColumnCount];

                if (_objColumn != null)
                {
                    // Thêm mã tham chiếu của cột vào danh sách mã tham chiếu của các vùng có thể đặt khung
                    // Thêm vào đầu danh sách để không phải đảo ngược lại danh sách
                    // (Cần danh sách ngược do Snap Component bắt Docking theo cây Controls,
                    // chỉ Dock được các điều khiển con sau đó mới đến điều khiển cha
                    if (_strColumnContainerList.Length > 0)
                    {
                        _strColumnContainerList.Insert(0, ',');
                    }
                    _strColumnContainerList.Insert(0, _objColumn.ColumnReference.Replace('-', '_'));
                    _strColumnContainerList.Insert(0, "Cell");

                    // Tiếp tục gọi đệ quy với các cột con của cột đang xét
                    GetContainerList(_objColumn.Columns, ref _strColumnContainerList);
                }
            }
        }
 void bindColumnProperties(HtmlTableCell cell, PortalDefinition.Column column)
 {
     cell.Attributes["_style"] = column.ColumnCustomStyle;
     cell.Attributes["level"]  = column.ColumnLevel.ToString();
     cell.Attributes["name"]   = column.ColumnName;
     cell.Attributes["editablecolumnwidth"] = column.EditableColumnWidth.ToString();
     cell.Attributes["ref"]        = column.ColumnReference;
     cell.Style["width"]           = getWidthForStyle(column.ColumnWidth);
     cell.Attributes["isdragable"] = column.IsDragable.ToString();
     cell.Attributes["valign"]     = "top";
 }
Ejemplo n.º 7
0
        private void ShowCurrentEditingColumn()
        {
            PortalDefinition pd = PortalDefinition.Load();

            PortalDefinition.Column _objCurrentColumn = pd.GetColumn(CurrentColumnReference);

            if (_objCurrentColumn != null)
            {
                EditColumn(_objCurrentColumn.ColumnReference);
            }
        }
Ejemplo n.º 8
0
        private void ShowCurrentEditingParentColumn()
        {
            TemplateDefinition td = TemplateDefinition.Load();

            PortalDefinition.Column _objCurrentColumn = td.GetColumn(CurrentColumnReference);

            if (_objCurrentColumn != null && _objCurrentColumn.ColumnParent != null)
            {
                EditColumn(_objCurrentColumn.ColumnParent.ColumnReference);
            }
        }
Ejemplo n.º 9
0
        public void LoadData(string _strColumnRef)
        {
            PortalDefinition _objPortal = PortalDefinition.Load();

            PortalDefinition.Column _objColumn = _objPortal.GetColumn(_strColumnRef);

            if (_objColumn != null)
            {
                moduleList = _objColumn.ModuleList;
                Bind();
            }
        }
Ejemplo n.º 10
0
        void saveColumn(ref PortalDefinition.Column column, XmlNode htmlColumn, int level)
        {
            column.ColumnLevel = level;

            string reference = xmlNodeToText(htmlColumn.SelectSingleNode("@ref"));

            if (!string.IsNullOrEmpty(reference))
            {
                column.ColumnReference = reference;
            }

            column.ColumnName        = xmlNodeToText(htmlColumn.SelectSingleNode("@name"));
            column.ColumnCustomStyle = xmlNodeToText(htmlColumn.SelectSingleNode("@_style"));
            column.ColumnWidth       = getWidthFromStyle(xmlNodeToText(htmlColumn.SelectSingleNode("@style")));
            column.IsDragable        = xmlNodeToText(htmlColumn.SelectSingleNode("@isdragable")).ToLower() == "true";

            XmlNodeList htmlModules = htmlColumn.SelectNodes("ul/li");

            if (htmlModules.Count == 0)
            {
                htmlModules = htmlColumn.SelectNodes("ul/li".ToUpper());                                     // fix ie: UPPERCASE all tag
            }
            PortalDefinition.Module newModule;
            foreach (XmlNode htmlModule in htmlModules)
            {
                if (xmlNodeToText(htmlModule.SelectSingleNode("@class")) != "virtualElement")
                {
                    newModule = PortalDefinition.Module.Create();
                    saveModule(ref newModule, htmlModule);
                    column.ModuleList.Add(newModule);
                }
            }

            // save tables
            XmlNodeList htmlTables = htmlColumn.SelectNodes("table");

            if (htmlTables.Count == 0)
            {
                htmlTables = htmlColumn.SelectNodes("TABLE");
            }
            int countTable = 0;

            PortalDefinition.Column childColumn;
            foreach (XmlNode htmlTable in htmlTables)
            {
                childColumn = PortalDefinition.Column.Create(column);
                saveTable(ref childColumn, htmlTable, countTable++);
                column.Columns.Add(childColumn);
            }
        }
Ejemplo n.º 11
0
        public void LoadColumnList(string _strColumnRef)
        {
            PortalDefinition _objPortal = PortalDefinition.Load();

            PortalDefinition.Column _objColumn = _objPortal.GetColumn(_strColumnRef);

            if (_objColumn != null)
            {
                LoadColumnList(_objColumn.Columns);
                lnkAddColumn.Visible            = false;
                lnkAddSubColumn.Visible         = true;
                lnkAddSubColumn.CommandArgument = _objColumn.ColumnReference;
                lblColumnListTitle.LanguageRef  = "SubColumnList";
            }
        }
Ejemplo n.º 12
0
        protected void OnDelete(object sender, EventArgs args)
        {
            if (Parent is Tab)
            {
                PortalDefinition        pd = PortalDefinition.Load();
                PortalDefinition.Tab    t  = pd.GetTab(CurrentTabReference);
                PortalDefinition.Column _objColumnBeingDeleted = pd.GetColumn(CurrentColumnReference);

                if (_objColumnBeingDeleted != null)
                {
                    t.DeleteColumn(CurrentColumnReference);

                    pd.Save();

                    if (Delete != null)
                    {
                        Delete(CurrentColumnReference,
                               _objColumnBeingDeleted.ColumnParent == null
                                   ? Guid.NewGuid().ToString()
                                   : _objColumnBeingDeleted.ColumnReference);
                    }
                }
            }
            else if (Parent is Template)
            {
                TemplateDefinition          td = TemplateDefinition.Load();
                TemplateDefinition.Template t  = td.GetTemplate(CurrentTabReference);
                PortalDefinition.Column     _objColumnBeingDeleted = td.GetColumn(CurrentColumnReference);

                if (_objColumnBeingDeleted != null)
                {
                    t.DeleteColumn(CurrentColumnReference);

                    td.Save();

                    if (Delete != null)
                    {
                        Delete(CurrentColumnReference,
                               _objColumnBeingDeleted.ColumnParent == null
                                   ? Guid.NewGuid().ToString()
                                   : _objColumnBeingDeleted.ColumnReference);
                    }
                }
            }


            // Hopefully we where redirected here!
        }
Ejemplo n.º 13
0
        HtmlTableCell genColumn(PortalDefinition.Column column)
        {
            HtmlTableCell td = new HtmlTableCell();

            bindColumnProperties(td, column);
            td.Attributes["class"] = "content";

            // bind column control
            StringBuilder html = new StringBuilder();

            html.Append("<div style=\"clear:both; margin:5px\">");
            html.Append("<div style=\"float:left;\"><span>" + column.ColumnName + "</span></div>");
            html.Append("<div style=\"float:right\"><a href=\"#\" class=\"arrow addtable\" title=\"Thêm bảng vào trong cột\" onclick=\"addTable(this); return false;\"></a>");
            html.Append("<a href=\"#\" class=\"arrow edit\" title=\"Sửa thông tin cột\" onclick=\"ChangeColumnToEditMode(this); return false;\"></a>");
            html.Append("<a href=\"#\" class=\"arrow moveleft\" title=\"Chuyển cột sáng trái\" onclick=\"moveColumnLeft(this); return false;\"></a>");
            html.Append("<a href=\"#\" class=\"arrow moveright\" title=\"Chuyển cột sang phải\" onclick=\"moveColumnRight(this); return false;\"></a>");
            html.Append("<a href=\"#\" class=\"arrow remove\" title=\"Xóa cột này\" onclick=\"removeColumn(this); return false;\"></a>");
            html.Append("</div></div><br style=\"clear:both;\" />");
            td.InnerHtml = html.ToString();

            // render modules inside column
            HtmlGenericControl ul;

            if (column.ModuleList.Count == 0)
            {
                ul = genDragContainer(CountDragContainer++, VirtualSpace);
            }
            else
            {
                ul = genDragContainer(CountDragContainer++, string.Empty);
            }
            //
            td.Controls.Add(ul);
            foreach (PortalDefinition.Module module in column.ModuleList)
            {
                ul.Controls.Add(createModule(module));
            }

            // render table inside column
            foreach (PortalDefinition.Column childColumn in column.Columns)
            {
                td.Controls.Add(genTable(childColumn));
            }
            //
            return(td);
        }
Ejemplo n.º 14
0
        /// <summary>
        /// Hàm nạp dữ liệu về một cột
        /// </summary>
        /// <param name="_strColumnRef">Mã tham chiếu của cột cần sửa</param>
        /// <param name="_strTabRef">Mã tham chiếu của Tab chứa cột</param>
        public void LoadData(string _strColumnRef, string _strTabRef)
        {
            PortalDefinition.Column _objColumn = null;

            if (Parent is Tab)
            {
                // Lấy thông tin về cột cần sửa
                PortalDefinition pd = PortalDefinition.Load();
                _objColumn = pd.GetColumn(_strColumnRef);
            }
            else if (Parent is Template)
            {
                TemplateDefinition td = TemplateDefinition.Load();
                _objColumn = td.GetColumn(_strColumnRef);
            }


            if (_objColumn != null)
            {
                // Hiển thị thông tin về cột
                txtTitle.Text                 = _objColumn.ColumnName;
                txtColWidth.Text              = _objColumn.ColumnWidth.ToString();
                ltrColumnReference.Text       = _objColumn.ColumnReference;
                chkDefaultColumnWidth.Checked = _objColumn.ColumnWidth == "";
                //txtColWidth.ReadOnly = _objColumn.ColumnWidth == "";
                txtCustomStyle.Text = _objColumn.ColumnCustomStyle;

                // Nạp danh sách các cấp độ có thể có cho cột hiện thời
                drdColumnLevel.DataSource = LoadAvaiableColumnLevels(_objColumn);
                drdColumnLevel.DataBind();
                drdColumnLevel.SelectedIndex = (drdColumnLevel.Items.FindByValue(_objColumn.ColumnLevel.ToString()) !=
                                                null)
                                                   ? drdColumnLevel.Items.IndexOf(
                    drdColumnLevel.Items.FindByValue(
                        _objColumn.ColumnLevel.ToString()))
                                                   : 0;

                CurrentColumnReference   = _strColumnRef;
                CurrentTabReference      = _strTabRef;
                CurrentTemplateReference = _strTabRef;

                chkDefaultColumnWidth.Attributes.Add("onclick", txtColWidth.ClientID + ".readOnly = this.checked;");
            }
        }
Ejemplo n.º 15
0
        private static void getNewRef(PortalDefinition.Column column)
        {
            PortalDefinition portal = PortalDefinition.Load();
            string           newRef = string.Empty;

            foreach (PortalDefinition.Module m in column.ModuleList)
            {
                newRef = Guid.NewGuid().ToString();
                while (PortalDefinition.Module.IsExist(newRef))
                {
                    newRef = Guid.NewGuid().ToString();
                }
                m.reference = newRef;
            }
            foreach (PortalDefinition.Column c in column.Columns)
            {
                getNewRef(c);
            }
        }
Ejemplo n.º 16
0
        HtmlTableRow genHeaderTable(PortalDefinition.Column column)         // columns inside
        {
            // header row
            HtmlTableRow  trHeader = new HtmlTableRow();
            HtmlTableCell td       = new HtmlTableCell();

            td.Style["color"]            = "white";
            td.Style["background-color"] = "#303030";
            if (column.Columns.Count > 1)
            {
                td.Attributes["colspan"] = column.Columns.Count.ToString();
            }

            string html = "<div style=\"clear:both; margin:5px;\"><div style=\"float:left;\"><span>" + column.ColumnName + "</span></div>";

            html += "<div style=\"float:right;\">";

            if (column.EditableColumnWidth)
            {
                html += "<a class=\"arrow editablecolumnwidth_active\" href=\"#\" title=\"Bảng này cho phép sửa độ rộng cột, bấm vào để thay đổi\" onclick=\"tonggle_editablecolumnwidth(this); return false;\"></a>";
            }
            else
            {
                html += "<a class=\"arrow editablecolumnwidth_inactive\" href=\"#\" title=\"Bảng này không cho phép sửa độ rộng cột, bấm vào để thay đổi\" onclick=\"tonggle_editablecolumnwidth(this); return false;\"></a>";
            }

            html        += "<a class=\"arrow addcolumn\" href=\"#\" title=\"Thêm cột vào trong bảng\" onclick=\"addColumn(this); return false;\"></a>";
            html        += "<a class=\"arrow edit\" href=\"#\" title=\"Sửa tên bảng\" onclick=\"editTableName(this); return false;\"></a>";
            html        += "<a class=\"arrow moveup\" href=\"#\" title=\"Chuyển bảng lên trên\" onclick=\"moveTableUp(this); return false;\"></a>";
            html        += "<a class=\"arrow movedown\" href=\"#\" title=\"Chuyển bảng xuống dưới\" onclick=\"moveTableDown(this); return false;\"></a>";
            html        += "<a class=\"arrow moveleft\" href=\"#\" title=\"Chuyển bảng sang trái\" onclick=\"moveTableLeft(this); return false;\"></a>";
            html        += "<a class=\"arrow moveright\" href=\"#\" title=\"Chuyển bảng sang phải\" onclick=\"moveTableRight(this); return false;\"></a>";
            html        += "<a class=\"arrow remove\" href=\"#\" title=\"Xóa bảng này\" onclick=\"removeTable(this); return false;\"></a>";
            html        += "</div></div><br style=\"clear:both;\" />";
            td.InnerHtml = html;

            bindColumnProperties(td, column);

            trHeader.Controls.Add(td);
            trHeader.Attributes["class"] = "header";
            return(trHeader);
        }
Ejemplo n.º 17
0
        protected void OnAddColumn(object sender, CommandEventArgs e)
        {
            if (Parent is Tab)
            {
                PortalDefinition     pd = PortalDefinition.Load();
                PortalDefinition.Tab t  = pd.GetTab(e.CommandArgument.ToString());

                if (t != null)
                {
                    PortalDefinition.Column _objNewColumn = PortalDefinition.Column.Create(t);

                    t.Columns.Add(_objNewColumn);

                    pd.Save();

                    if (AddColumn != null)
                    {
                        AddColumn(this, _objNewColumn);
                    }
                }
            }
            else if (Parent is Template)
            {
                TemplateDefinition          td = TemplateDefinition.Load();
                TemplateDefinition.Template t  = td.GetTemplate(e.CommandArgument.ToString());

                if (t != null)
                {
                    PortalDefinition.Column _objNewColumn = PortalDefinition.Column.Create(t);

                    t.Columns.Add(_objNewColumn);

                    td.Save();

                    if (AddColumn != null)
                    {
                        AddColumn(this, _objNewColumn);
                    }
                }
            }
        }
Ejemplo n.º 18
0
        void saveTable(ref PortalDefinition.Column column, XmlNode htmlTable, int level)
        {
            XmlNodeList xmlHeaderCells = htmlTable.SelectNodes("tbody/tr/td");

            if (xmlHeaderCells.Count == 0)
            {
                xmlHeaderCells = htmlTable.SelectNodes("tbody/tr/td".ToUpper());                                        // fix ie: UPPERCASE all tag
            }
            XmlNode xmlHeaderCell = xmlHeaderCells[0];

            column.ColumnLevel = level;

            string reference = xmlNodeToText(xmlHeaderCell.SelectSingleNode("@ref"));

            if (!string.IsNullOrEmpty(reference))
            {
                column.ColumnReference = reference;
            }

            column.ColumnName          = xmlNodeToText(xmlHeaderCell.SelectSingleNode("@name"));
            column.ColumnWidth         = "100%";
            column.EditableColumnWidth = xmlNodeToText(xmlHeaderCell.SelectSingleNode("@editablecolumnwidth")).ToLower() == "true";
            column.IsDragable          = xmlNodeToText(xmlHeaderCell.SelectSingleNode("@isdragable")).ToLower() == "true";

            XmlNodeList htmlColumns = htmlTable.SelectNodes("tbody/tr[position()=2]/td");

            if (htmlColumns.Count == 0)
            {
                htmlColumns = htmlTable.SelectNodes("TBODY/TR[position()=2]/TD");                                     // fix ie: UPPERCASE all tag
            }
            PortalDefinition.Column childColumn;
            foreach (XmlNode htmlColumn in htmlColumns)
            {
                childColumn = PortalDefinition.Column.Create(column);
                saveColumn(ref childColumn, htmlColumn, 0);
                column.Columns.Add(childColumn);
            }
        }
Ejemplo n.º 19
0
        /// <summary>
        /// Thủ tục lưu các thông tin đã xác lập của 1 Cột
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="args"></param>
        protected void OnSave(object sender, EventArgs args)
        {
            try
            {
                if (Page.IsValid)
                {
                    // Save
                    PortalDefinition.Column _objColumn = null;
                    PortalDefinition        pd         = null;
                    TemplateDefinition      td         = null;

                    if (Parent is Tab)
                    {
                        // Lấy thông tin về cột cần sửa
                        pd         = PortalDefinition.Load();
                        _objColumn = pd.GetColumn(CurrentColumnReference);
                    }
                    else if (Parent is Template)
                    {
                        td         = TemplateDefinition.Load();
                        _objColumn = td.GetColumn(CurrentColumnReference);
                    }

                    if (_objColumn != null)
                    {
                        // Cập nhật lại tên cột và độ rộng của cột
                        _objColumn.ColumnName = txtTitle.Text;

                        // Cập nhật màu nền của cột
                        _objColumn.ColumnCustomStyle = txtCustomStyle.Text;

                        // Cập nhật mức độ của cột
                        _objColumn.ColumnLevel = Convert.ToInt32(drdColumnLevel.SelectedValue);
                        //lay ve do rong cua cot
                        string strColWidth = txtColWidth.Text;
                        try
                        {
                            _objColumn.ColumnWidth = chkDefaultColumnWidth.Checked ? "" : strColWidth;
                        }
                        catch
                        {
                            // Nếu có lỗi, lấy độ rộng mặc định
                            _objColumn.ColumnWidth = "";
                        }
                    }

                    if (Parent is Tab)
                    {
                        pd.Save();
                    }
                    else if (Parent is Template)
                    {
                        td.Save();
                    }

                    CurrentColumnReference = _objColumn.ColumnReference;

                    if (Save != null)
                    {
                        Save(this, new EventArgs());
                    }
                }
            }
            catch (Exception e)
            {
                lbError.Text = e.Message;
            }
        }
Ejemplo n.º 20
0
        internal void MoveColumnRight(string _strColumnReference)
        {
            // Nạp cấu trúc Portal
            TemplateDefinition _objPortal = TemplateDefinition.Load();

            // Lấy thông tin về cột cần dịch chuyển
            PortalDefinition.Column _objSelectedColumn = _objPortal.GetColumn(_strColumnReference);

            // Nếu cột cần dịch chuyển không tồn tại thì kết thúc hàm
            if (_objSelectedColumn != null)
            {
                // Tìm kiếm danh sách cột trong đó có cột đang xét
                PortalDefinition.Column _objParentColumn = _objSelectedColumn.ColumnParent;
                ArrayList _arrColumnsList = null;

                // Nếu cột cha rỗng thì cột đang xét trực thuộc Tab
                if (_objParentColumn == null)
                {
                    // Lấy thông tin Tab hiện thời
                    TemplateDefinition.Template _objCurrentTemplate = _objPortal.GetTemplate(CurrentTemplateReference);
                    if (_objCurrentTemplate != null)
                    {
                        // Lấy danh sách cột của Tab
                        _arrColumnsList = _objCurrentTemplate.Columns;
                    }
                }
                else
                {
                    // Nếu cột đang xét là cột con của 1 cột khác, thì trả về danh sách các cột đồng cấp
                    _arrColumnsList = _objParentColumn.Columns;
                }

                // Biến lưu vị trí của cột đã chọn trong danh sách
                int _intCurrentColumnIndex = 0;

                // Biến lưu trữ số cột đồng mức với cột đã chọn
                int _intSameLevelColumnsCount = 0;

                // Kiểm duyệt danh sách cột đồng cấp
                // Đếm cột có cùng Level
                for (int _intColumnCount = 0; _intColumnCount < _arrColumnsList.Count; _intColumnCount++)
                {
                    PortalDefinition.Column _objColumn = _arrColumnsList[_intColumnCount] as PortalDefinition.Column;
                    if (_objColumn.ColumnLevel == _objSelectedColumn.ColumnLevel)
                    {
                        if (_objColumn.ColumnReference == _objSelectedColumn.ColumnReference)
                        {
                            _intCurrentColumnIndex = _intSameLevelColumnsCount;
                        }
                        _intSameLevelColumnsCount++;
                    }
                }

                // Duyệt danh sách các cột cùng cấp
                if (_arrColumnsList != null && _intSameLevelColumnsCount > 0)
                {
                    // Để di chuyển sang phải --> không thể đang là vị trí cuối cùng
                    if (_intCurrentColumnIndex >= (_intSameLevelColumnsCount - 1))
                    {
                        return;
                    }
                    else
                    {
                        // Di chuyển cột đã chọn sang trái
                        _arrColumnsList.RemoveAt(_intCurrentColumnIndex);
                        _arrColumnsList.Insert(_intCurrentColumnIndex + 1, _objSelectedColumn);
                    }
                }
            }

            // Lưu cấu trúc Portal
            _objPortal.Save();

            // Nạp dữ liệu Template
            LoadData(CurrentTemplateReference);

            // Nạp dữ liệu cột
            if (CurrentColumnReference != "")
            {
                EditColumn(CurrentColumnReference);
            }
        }
Ejemplo n.º 21
0
 protected void OnAddColumn(object sender, PortalDefinition.Column _objNewColumn)
 {
     EditColumn(_objNewColumn.ColumnReference);
 }
Ejemplo n.º 22
0
        /// <summary>
        /// Thủ tục tạo và sắp xếp các cột của một Tab
        /// </summary>
        /// <param name="_objCurrentTab">Đối tượng chứa thông tin về Tab hiện thời</param>
        /// <param name="_arrColumns">Mảng chứa danh sách cột xuất phát</param>
        /// <param name="_htcContainer">Điều khiển sẽ chứa các cột trong danh sách cột xuất phát</param>
        private void RenderColumns(PortalDefinition.Tab _objCurrentTab, ArrayList _arrColumns, HtmlTableCell _htcContainer)
        {
            // Nếu không có cột nào trong danh sách xuất phát thì kết thúc thủ tục
            if (_arrColumns == null || _arrColumns.Count == 0)
            {
                return;
            }

            // Khai báo mảng chứa các điều khiển bảng dùng để chứa cột
            ArrayList _arrTableIndexes = new ArrayList();

            // Duyệt danh sách các cột xuất phát
            for (int _intColumnCount = 0; _intColumnCount < _arrColumns.Count; _intColumnCount++)
            {
                // Lấy thông tin về cột đang xét
                PortalDefinition.Column _objColumn         = _arrColumns[_intColumnCount] as PortalDefinition.Column;
                SortableHtmlTable       _objTable          = null;
                HtmlTableRow            _objTableRow       = null;
                HtmlTableRow            _objTableHeaderRow = null;
                HtmlTableRow            _objTableFooterRow;

                // Duyệt danh sách các bảng đã tạo
                // Các cột có cùng cấp độ sẽ nằm cùng một bảng
                foreach (SortableHtmlTable _tblContainer in _arrTableIndexes)
                {
                    // Kiểm tra cấp độ của cột đang xét
                    if (_tblContainer.Attributes["level"] == _objColumn.ColumnLevel.ToString())
                    {
                        // Nếu bảng đang xét có cùng cấp độ với cột đang xét
                        // thì lấy tham chiếu đến bảng và dòng đầu tiên của bảng
                        _objTable          = _tblContainer;
                        _objTableHeaderRow = _tblContainer.Rows[0];
                        _objTableRow       = _tblContainer.Rows[1];
                        break;
                    }
                }

                // Nếu bảng chưa có tham chiếu (cấp độ hiện thời của cột là cấp độ mới (chưa được xét)
                if (_objTable == null)
                {
                    // Khởi tạo bảng
                    _objTable             = new SortableHtmlTable();
                    _objTable.CellPadding = 0;
                    _objTable.CellSpacing = 0;
                    _objTable.Border      = 0;

                    // Lưu trữ cấp độ của bảng (chứa các cột có cùng cấp độ)
                    _objTable.Attributes.Add("level", _objColumn.ColumnLevel.ToString());

                    // Tạo dòng chứa tiêu đề các cột
                    _objTableHeaderRow = new HtmlTableRow();
                    _objTable.Rows.Add(_objTableHeaderRow);

                    // Tạo dòng chứa các cột
                    _objTableRow = new HtmlTableRow();
                    _objTable.Rows.Add(_objTableRow);
                    _arrTableIndexes.Add(_objTable);
                }

                // Khởi tạo điều khiển đại diện cho 1 cột
                HtmlTableCell _objCellContainer = new HtmlTableCell();
                _objCellContainer.VAlign = "top";
                // _objCellContainer.Attributes.Add("id", "Cell" + _objColumn.ColumnReference.Replace('-', '_'));
                // _objCellContainer.Attributes.Add("class", IsAdmin ? "Portal_Column" : "Portal_NormalColumn");

                if (_objColumn.ColumnCustomStyle != null && _objColumn.ColumnCustomStyle != "")
                {
                    _objCellContainer.Attributes.Add("style", _objColumn.ColumnCustomStyle);
                }

                // Kiểm tra xem độ rộng cột có được thiết lập hay không
                if (_objColumn.ColumnWidth != "")
                {
                    // Nếu được thiết lập thì xác định thông số width của cột
                    _objCellContainer.Attributes.Add("width", _objColumn.ColumnWidth.ToString());

                    // Nếu thiết lập là 100%, có nghĩa là chỉ có 1 cột --> bảng chứa cột này cần được để lên 100%
                    if (_objColumn.ColumnWidth == "100%")
                    {
                        _objTable.Attributes.Add("width", "100%");
                    }
                }
                // Thêm cột vừa tạo vào bảng
                _objTableRow.Cells.Add(_objCellContainer);


                // Sắp xếp các Module đã được thiết lập cho cột đang xét
                RenderModules(_objCellContainer, _objCurrentTab, _objColumn.ModuleList);

                // Thực hiện sinh mã cho các cột con
                RenderColumns(_objCurrentTab, _objColumn.Columns, _objCellContainer);
            }

            // Thêm danh sách bảng có được vào vùng chứa hiện thời
            if (_arrTableIndexes != null && _arrTableIndexes.Count > 0)
            {
                //try
                //{
                // Sắp xếp lại các cột theo đúng thứ tự Level đã định
                _arrTableIndexes.Sort();

                // Duyệt danh sách các bảng đã tạo ra
                foreach (HtmlTable _objIndexedTable in _arrTableIndexes)
                {
                    // Tính lại độ rộng của các cột trong bảng
                    ReCalculateCellsWidth(_objIndexedTable);

                    // Kiểm tra cấp độ của bảng
                    if (Convert.ToInt32(_objIndexedTable.Attributes["level"]) == -1)
                    {
                        // Nếu là cấp độ mặc định (-1)
                        // tức là bảng nằm ở cuối danh sách các điều khiển của cột
                        _htcContainer.Controls.Add(_objIndexedTable);
                    }
                    else
                    {
                        int _intColumnLevel = Convert.ToInt32(_objIndexedTable.Attributes["level"]);

                        // Chèn khung hiển thị vào cột cha đang xét
                        // Kiểm tra vị trí chèn có hợp lệ không (phải chèn vào trong danh sách, không được chèn ra ngoài)
                        if (_htcContainer.Controls.Count > _intColumnLevel)
                        {
                            // Đặt khung vào vị trí đã định
                            _htcContainer.Controls.AddAt(_intColumnLevel, _objIndexedTable);
                        }
                        else
                        {
                            // Nếu vị trí chèn nằm ngoài danh sách thì sử dụng lệnh thêm vào cuối danh sách thay vì chèn
                            _htcContainer.Controls.Add(_objIndexedTable);
                        }
                    }
                }
            }
        }
Ejemplo n.º 23
0
        /// <summary>
        /// Hàm trả về danh sách tất cả các cấp độ có thể của một cột con
        /// </summary>
        /// <param name="_objEditingColumn">Đối tượng chứa thông tin về cột con cần lấy danh sách cấp độ</param>
        /// <returns>Mảng chứa danh sách cấp độ có thể của cột con</returns>
        private ArrayList LoadAvaiableColumnLevels(PortalDefinition.Column _objEditingColumn)
        {
            if (_objEditingColumn == null)
            {
                return(null);
            }

            ArrayList _objPossibleLevels = new ArrayList();

            // Lưu cấp độ mặc định là -1 (cấp độ thấp nhất)
            _objPossibleLevels.Add(-1);

            if (_objEditingColumn.ColumnParent == null)
            {
                // Nếu không có cột cha thì tính số lượng cấp độ có thể dựa vào số lượng cấp độ của các cột cha
                if (_objEditingColumn.TabRef != null || _objEditingColumn.TemplateRef != null)
                {
                    int _intMaxLevel = -1;

                    if (Parent is Tab)
                    {
                        foreach (PortalDefinition.Column _objParentColumn in _objEditingColumn.TabRef.Columns)
                        {
                            if (_objParentColumn != null && _objParentColumn.ColumnLevel > _intMaxLevel)
                            {
                                _intMaxLevel = _objParentColumn.ColumnLevel;
                            }
                        }
                    }
                    else if (Parent is Template)
                    {
                        foreach (PortalDefinition.Column _objParentColumn in _objEditingColumn.TemplateRef.Columns)
                        {
                            if (_objParentColumn != null && _objParentColumn.ColumnLevel > _intMaxLevel)
                            {
                                _intMaxLevel = _objParentColumn.ColumnLevel;
                            }
                        }
                    }

                    // Trả về danh sách cấp độ
                    for (int _intLevelCount = 0; _intLevelCount <= _intMaxLevel + 1; _intLevelCount++)
                    {
                        _objPossibleLevels.Add(_intLevelCount);
                    }
                }

                return(_objPossibleLevels);
            }
            else
            {
                // Nếu có Module trong cột cha thì lấy danh sách cấp độ theo số lượng Module trong cột cha
                if (_objEditingColumn.ColumnParent.ModuleList != null &&
                    _objEditingColumn.ColumnParent.ModuleList.Count > 0)
                {
                    // Duyệt danh sách Module trong cột cha
                    for (int _intModuleCount = 0;
                         _intModuleCount < _objEditingColumn.ColumnParent.ModuleList.Count;
                         _intModuleCount++)
                    {
                        _objPossibleLevels.Add(_intModuleCount);
                    }

                    // Kiểm tra xem có cột con nào nữa hay không, nếu có cột con thì phải thêm vào số lượng mức của các cột con
                    // Duyệt danh sách cột trong cột cha để lấy ra cấp độ lớn nhất
                    int _intMaxLevel = -1;
                    foreach (PortalDefinition.Column _objCurrentColumn in _objEditingColumn.ColumnParent.Columns)
                    {
                        if (_objCurrentColumn != null && _objCurrentColumn.ColumnLevel > _intMaxLevel)
                        {
                            _intMaxLevel = _objCurrentColumn.ColumnLevel;
                            _objPossibleLevels.Add(_objPossibleLevels.Count - 1);
                        }
                    }

                    return(_objPossibleLevels);
                }
                else
                {
                    // Cột cha không có Module nào
                    // Lấy danh sách cấp độ dựa theo số lượng cấp độ của Module

                    // Duyệt danh sách cột trong cột cha để lấy ra cấp độ lớn nhất
                    int _intMaxLevel = -1;
                    foreach (PortalDefinition.Column _objCurrentColumn in _objEditingColumn.ColumnParent.Columns)
                    {
                        if (_objCurrentColumn != null && _objCurrentColumn.ColumnLevel > _intMaxLevel)
                        {
                            _intMaxLevel = _objCurrentColumn.ColumnLevel;
                        }
                    }

                    // Trả về danh sách cấp độ
                    for (int _intLevelCount = 0; _intLevelCount <= _intMaxLevel + 1; _intLevelCount++)
                    {
                        _objPossibleLevels.Add(_intLevelCount);
                    }

                    return(_objPossibleLevels);
                }
            }
        }
        private TableCell AnalyseColumn(PortalDefinition.Column column)
        {
            if (column.Columns.Count == 0)
            {
                TableCell cellColumn;
                if (column.ModuleList.Count >= 1)
                {
                    string strModuleTitle_0 = "";
                    for (int i = 0; i < column.ModuleList.Count; i++)
                    {
                        PortalDefinition.Module tempModule_0 = (PortalDefinition.Module)column.ModuleList[i];
                        if (i == 0)
                        {
                            strModuleTitle_0 += tempModule_0.title;
                        }
                        else
                        {
                            strModuleTitle_0 += " <br> " + tempModule_0.title;
                        }
                    }

                    cellColumn = CreateTableCell(strModuleTitle_0, "child-cell", column.ColumnCustomStyle, column.ColumnWidth);
                }
                else
                {
                    cellColumn = CreateTableCell("cột mới chưa có module", "child-cell", column.ColumnCustomStyle, column.ColumnWidth);
                }
                return(cellColumn);
            }
            // if this column has more one children
            else
            {
                TableCell cellColumn;
                cellColumn = CreateTableCell("", "", column.ColumnCustomStyle, column.ColumnWidth);

                //Moi dong cua mot level tuong ung voi mot bang duoc chua trong mot cell
                Table childrenTable = new Table();
                childrenTable.Width = cellColumn.Width;
                cellColumn.Controls.Add(childrenTable);

                int _iMaxColumnLevel = column.GetMaxLevelOfChildrenColumns();
                int _iMinColumnLevel = column.GetMinLevelOfChildrenColumns();

                for (int currentColumnLevel_1 = _iMinColumnLevel; currentColumnLevel_1 <= _iMaxColumnLevel; currentColumnLevel_1++)
                {
                    //Get all column have same level
                    ArrayList _arrayListColumns = column.GetArrayChildrenColumnWithLevel(currentColumnLevel_1);

                    TableRow childrenRow = new TableRow();
                    childrenRow.Width = childrenTable.Width;
                    childrenTable.Rows.Add(childrenRow);

                    TableCell cellChildrenColumn = CreateTableCell("", "", "", "");
                    cellChildrenColumn.Width = childrenRow.Width;
                    childrenRow.Cells.Add(cellChildrenColumn);

                    Table grandChildrenTable = new Table();
                    grandChildrenTable.Width = cellChildrenColumn.Width;
                    cellChildrenColumn.Controls.Add(grandChildrenTable);

                    TableRow grandChildrenRow = new TableRow();
                    grandChildrenRow.Width = grandChildrenTable.Width;
                    grandChildrenTable.Rows.Add(grandChildrenRow);

                    foreach (PortalDefinition.Column childrenColumn in _arrayListColumns)
                    {
                        TableCell cellGradnChildrenColumn = AnalyseColumn(childrenColumn);
                        if (_arrayListColumns.Count == 1)
                        {
                            cellGradnChildrenColumn.Width = grandChildrenRow.Width;
                        }
                        grandChildrenRow.Cells.Add(cellGradnChildrenColumn);
                    }
                }

                //if this colum has more one module
                if (column.ModuleList.Count >= 1)
                {
                    TableRow childrenRow = new TableRow();
                    childrenRow.Width = childrenTable.Width;
                    childrenTable.Rows.Add(childrenRow);

                    string strModuleTitle_0 = "";
                    for (int i = 0; i < column.ModuleList.Count; i++)
                    {
                        PortalDefinition.Module tempModule_0 = (PortalDefinition.Module)column.ModuleList[i];
                        if (i == 0)
                        {
                            strModuleTitle_0 += tempModule_0.title;
                        }
                        else
                        {
                            strModuleTitle_0 += " <br> " + tempModule_0.title;
                        }
                    }

                    TableCell cellChildrenColumn = CreateTableCell(strModuleTitle_0, "child-cell", column.ColumnCustomStyle, column.ColumnWidth);
                    cellChildrenColumn.Width = childrenRow.Width;
                    childrenRow.Cells.Add(cellChildrenColumn);
                }
                return(cellColumn);
            }
        }