PageRenderTime 56ms CodeModel.GetById 19ms RepoModel.GetById 0ms app.codeStats 0ms

/DesktopModules/Admin/FileManager/FileManager.ascx.cs

https://github.com/mailekah/AgapeConnect1
C# | 2499 lines | 1914 code | 132 blank | 453 comment | 99 complexity | dd438f47e13b1f24c0a6df29be52de39 MD5 | raw file
Possible License(s): BSD-3-Clause, Apache-2.0
  1. #region Copyright
  2. //
  3. // DotNetNukeĊ½ - http://www.dotnetnuke.com
  4. // Copyright (c) 2002-2012
  5. // by DotNetNuke Corporation
  6. //
  7. // Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated
  8. // documentation files (the "Software"), to deal in the Software without restriction, including without limitation
  9. // the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and
  10. // to permit persons to whom the Software is furnished to do so, subject to the following conditions:
  11. //
  12. // The above copyright notice and this permission notice shall be included in all copies or substantial portions
  13. // of the Software.
  14. //
  15. // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
  16. // TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
  17. // THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
  18. // CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  19. // DEALINGS IN THE SOFTWARE.
  20. #endregion
  21. #region Usings
  22. using System;
  23. using System.Collections;
  24. using System.Collections.Generic;
  25. using System.Collections.Specialized;
  26. using System.Data;
  27. using System.IO;
  28. using System.Linq;
  29. using System.Text.RegularExpressions;
  30. using System.Threading;
  31. using System.Web;
  32. using System.Web.UI;
  33. using System.Web.UI.HtmlControls;
  34. using System.Web.UI.WebControls;
  35. using DotNetNuke.Common.Utilities;
  36. using DotNetNuke.Entities.Host;
  37. using DotNetNuke.Entities.Icons;
  38. using DotNetNuke.Entities.Modules;
  39. using DotNetNuke.Entities.Modules.Actions;
  40. using DotNetNuke.Entities.Portals;
  41. using DotNetNuke.Instrumentation;
  42. using DotNetNuke.Security;
  43. using DotNetNuke.Security.Permissions;
  44. using DotNetNuke.Services.Exceptions;
  45. using DotNetNuke.Services.FileSystem;
  46. using DotNetNuke.Services.Localization;
  47. using DotNetNuke.UI.Skins.Controls;
  48. using DotNetNuke.UI.Utilities;
  49. using DotNetNuke.UI.WebControls;
  50. using ICSharpCode.SharpZipLib.Zip;
  51. using Microsoft.VisualBasic;
  52. using DataCache = DotNetNuke.Common.Utilities.DataCache;
  53. using DNNTreeNode = DotNetNuke.UI.WebControls.TreeNode;
  54. using DNNTreeNodeCollection = DotNetNuke.UI.WebControls.TreeNodeCollection;
  55. using FileInfo = DotNetNuke.Services.FileSystem.FileInfo;
  56. using Globals = DotNetNuke.Common.Globals;
  57. #endregion
  58. namespace DotNetNuke.Modules.Admin.FileManager
  59. {
  60. /// -----------------------------------------------------------------------------
  61. /// Project : DotNetNuke
  62. /// Class : FileManager
  63. ///
  64. /// -----------------------------------------------------------------------------
  65. /// <summary>
  66. /// Supplies the functionality for uploading files to the Portal
  67. /// Synchronizing Files within the folder and the database
  68. /// and Provides status of available disk space for the portal
  69. /// as well as limiting uploads to the restricted allocated file space
  70. /// </summary>
  71. /// <remarks>
  72. /// </remarks>
  73. /// <history>
  74. /// [DYNST] 2/1/2004 Created
  75. /// [Jon Henning] 11/1/2004 Updated to use ClientAPI/DNNTree
  76. /// [cnurse] 12/2/2004 Database Synchronization added
  77. /// </history>
  78. /// -----------------------------------------------------------------------------
  79. public partial class FileManager : PortalModuleBase, IActionable, IClientAPICallbackEventHandler
  80. {
  81. #region "Private Members"
  82. private string _ErrorMessage =
  83. "<TABLE><TR><TD height=100% class=NormalRed>{0}</TD></TR><TR valign=bottom><TD align=center><INPUT id=btnClearError onclick=clearErrorMessage(); type=button value=OK></TD></TR></TABLE>";
  84. private SortedList<int, string> _folderMappings;
  85. #endregion
  86. #region "Protected Properties"
  87. protected bool IsAdminRole
  88. {
  89. get
  90. {
  91. return PortalSecurity.IsInRole(PortalSettings.AdministratorRoleName);
  92. }
  93. }
  94. #endregion
  95. #region "Public Properties"
  96. public int FolderPortalID
  97. {
  98. get
  99. {
  100. if (IsHostMenu)
  101. {
  102. return Null.NullInteger;
  103. }
  104. else
  105. {
  106. return PortalId;
  107. }
  108. }
  109. }
  110. public string RootFolderName
  111. {
  112. get
  113. {
  114. if (ViewState["RootFolderName"] != null)
  115. {
  116. return ViewState["RootFolderName"].ToString();
  117. }
  118. else
  119. {
  120. return "";
  121. }
  122. }
  123. set
  124. {
  125. ViewState["RootFolderName"] = value;
  126. }
  127. }
  128. public string RootFolderPath
  129. {
  130. get
  131. {
  132. string _CurRootFolder;
  133. if (IsHostMenu)
  134. {
  135. _CurRootFolder = Globals.HostMapPath;
  136. }
  137. else
  138. {
  139. _CurRootFolder = PortalSettings.HomeDirectoryMapPath;
  140. }
  141. return _CurRootFolder;
  142. }
  143. }
  144. public string Sort
  145. {
  146. get
  147. {
  148. return ViewState["strSort"].ToString();
  149. }
  150. set
  151. {
  152. ViewState.Add("strSort", value);
  153. }
  154. }
  155. public string LastSort
  156. {
  157. get
  158. {
  159. return ViewState["strLastSort"].ToString();
  160. }
  161. set
  162. {
  163. ViewState.Add("strLastSort", value);
  164. }
  165. }
  166. public string FilterFiles
  167. {
  168. get
  169. {
  170. return ViewState["strFilterFiles"].ToString();
  171. }
  172. set
  173. {
  174. ViewState.Add("strFilterFiles", value);
  175. }
  176. }
  177. public string LastPath
  178. {
  179. get
  180. {
  181. return UnMaskPath(ClientAPI.GetClientVariable(Page, "LastPath"));
  182. }
  183. set
  184. {
  185. value = MaskPath(value);
  186. ClientAPI.RegisterClientVariable(Page, "LastPath", value, true);
  187. }
  188. }
  189. public string DestPath
  190. {
  191. get
  192. {
  193. return ClientAPI.GetClientVariable(Page, "DestPath");
  194. }
  195. set
  196. {
  197. ClientAPI.RegisterClientVariable(Page, "DestPath", value, true);
  198. }
  199. }
  200. public string SourcePath
  201. {
  202. get
  203. {
  204. return ClientAPI.GetClientVariable(Page, "SourcePath");
  205. }
  206. set
  207. {
  208. ClientAPI.RegisterClientVariable(Page, "SourcePath", value, true);
  209. }
  210. }
  211. public string MoveFiles
  212. {
  213. get
  214. {
  215. return ClientAPI.GetClientVariable(Page, "MoveFiles");
  216. }
  217. set
  218. {
  219. ClientAPI.RegisterClientVariable(Page, "MoveFiles", value, true);
  220. }
  221. }
  222. public bool IsRefresh
  223. {
  224. get
  225. {
  226. return Convert.ToBoolean(ClientAPI.GetClientVariable(Page, "IsRefresh"));
  227. }
  228. set
  229. {
  230. ClientAPI.RegisterClientVariable(Page, "IsRefresh", Convert.ToString(Convert.ToInt32(value)), true);
  231. }
  232. }
  233. public bool DisabledButtons
  234. {
  235. get
  236. {
  237. return Convert.ToBoolean(ClientAPI.GetClientVariable(Page, "DisabledButtons"));
  238. }
  239. set
  240. {
  241. ClientAPI.RegisterClientVariable(Page, "DisabledButtons", Convert.ToString(Convert.ToInt32(value)), true);
  242. }
  243. }
  244. public string MoveStatus
  245. {
  246. get
  247. {
  248. return ClientAPI.GetClientVariable(Page, "MoveStatus");
  249. }
  250. set
  251. {
  252. ClientAPI.RegisterClientVariable(Page, "MoveStatus", value, true);
  253. }
  254. }
  255. public string LastFolderPath
  256. {
  257. get
  258. {
  259. if (ViewState["LastFolderPath"] != null)
  260. {
  261. return ViewState["LastFolderPath"].ToString();
  262. }
  263. else
  264. {
  265. return "";
  266. }
  267. }
  268. set
  269. {
  270. ViewState["LastFolderPath"] = value;
  271. }
  272. }
  273. public int PageSize
  274. {
  275. get
  276. {
  277. return Convert.ToInt32(selPageSize.SelectedValue);
  278. }
  279. }
  280. public int PageIndex
  281. {
  282. get
  283. {
  284. if (ViewState["PageIndex"] != null)
  285. {
  286. return Convert.ToInt32(ViewState["PageIndex"]);
  287. }
  288. else
  289. {
  290. return 0;
  291. }
  292. }
  293. set
  294. {
  295. if (value >= 0 && value < dgFileList.PageCount)
  296. {
  297. ViewState["PageIndex"] = value;
  298. }
  299. }
  300. }
  301. private SortedList<int, string> FolderMappings
  302. {
  303. get
  304. {
  305. if (_folderMappings == null)
  306. {
  307. _folderMappings = new SortedList<int, string>();
  308. var folderMappingController = FolderMappingController.Instance;
  309. var folderMappings = folderMappingController.GetFolderMappings(FolderPortalID);
  310. folderMappings.ForEach(f => _folderMappings.Add(f.FolderMappingID, f.MappingName));
  311. }
  312. return _folderMappings;
  313. }
  314. }
  315. #endregion
  316. #region "Private Methods"
  317. protected bool HasPermission(string permissionKey)
  318. {
  319. var hasPermision = UserInfo.IsSuperUser;
  320. var strSourcePath = UnMaskPath(DestPath).Replace(RootFolderPath, "").Replace("\\", "/");
  321. var objFolder = FolderManager.Instance.GetFolder(FolderPortalID, strSourcePath);
  322. if (!hasPermision && objFolder != null)
  323. {
  324. hasPermision = IsEditable && FolderPermissionController.HasFolderPermission(objFolder.FolderPermissions, permissionKey);
  325. }
  326. return hasPermision;
  327. }
  328. /// -----------------------------------------------------------------------------
  329. /// <summary>
  330. /// Adds a File to the DataTable used for the File List grid
  331. /// </summary>
  332. /// <param name="tblFiles">The DataTable</param>
  333. /// <param name="objFile">The FileInfo object to add</param>
  334. /// <remarks>
  335. /// </remarks>
  336. /// <history>
  337. /// [cnurse] 12/3/2004 documented
  338. /// [cnurse] 04/24/2006 Updated to use new Secure Storage
  339. /// </history>
  340. /// -----------------------------------------------------------------------------
  341. private void AddFileToTable(DataTable tblFiles, FileInfo objFile)
  342. {
  343. DataRow dRow = tblFiles.NewRow();
  344. dRow["FileType"] = "File";
  345. dRow["FileId"] = objFile.FileId;
  346. dRow["FileName"] = objFile.FileName;
  347. dRow["FileSize"] = objFile.Size.ToString("##,##0");
  348. dRow["IntFileSize"] = objFile.Size;
  349. if (!String.IsNullOrEmpty(objFile.Extension) || objFile.Extension != null)
  350. {
  351. dRow["Extension"] = objFile.Extension;
  352. }
  353. else
  354. {
  355. dRow["Extension"] = "none";
  356. }
  357. if (objFile.SupportsFileAttributes)
  358. {
  359. dRow["SupportsFileAttributes"] = true;
  360. if (objFile.FileAttributes.HasValue)
  361. {
  362. dRow["DateModified"] = objFile.LastModificationTime;
  363. dRow["Archive"] = objFile.FileAttributes.Value & FileAttributes.Archive;
  364. dRow["ReadOnly"] = objFile.FileAttributes.Value & FileAttributes.ReadOnly;
  365. dRow["Hidden"] = objFile.FileAttributes.Value & FileAttributes.Hidden;
  366. dRow["System"] = objFile.FileAttributes.Value & FileAttributes.System;
  367. dRow["AttributeString"] = GetAttributeString(objFile.FileAttributes.Value);
  368. }
  369. }
  370. else
  371. {
  372. dRow["SupportsFileAttributes"] = false;
  373. dRow["Archive"] = false;
  374. dRow["ReadOnly"] = false;
  375. dRow["Hidden"] = false;
  376. dRow["System"] = false;
  377. dRow["AttributeString"] = "";
  378. }
  379. tblFiles.Rows.Add(dRow);
  380. }
  381. /// -----------------------------------------------------------------------------
  382. /// <summary>
  383. /// Adds node to tree
  384. /// </summary>
  385. /// <param name="strName">Name of folder to display</param>
  386. /// <param name="strKey">Masked Key of folder location</param>
  387. /// <param name="eImage">Type of image</param>
  388. /// <param name="objNodes">Node collection to add to</param>
  389. /// <returns></returns>
  390. /// <remarks>
  391. /// </remarks>
  392. /// <history>
  393. /// [Jon Henning] 10/26/2004 Created
  394. /// [Jon Henning] 8/24/2005 Added Populate on Demand (POD) logic
  395. /// </history>
  396. /// -----------------------------------------------------------------------------
  397. private DNNTreeNode AddNode(string strName, string strKey, int imageIndex, DNNTreeNodeCollection objNodes)
  398. {
  399. DNNTreeNode objNode;
  400. objNode = new DNNTreeNode(HttpUtility.HtmlEncode(strName));
  401. objNode.Key = strKey;
  402. objNode.ToolTip = strName;
  403. objNode.ImageIndex = imageIndex;
  404. objNode.CssClass = "FileManagerTreeNode";
  405. objNodes.Add(objNode);
  406. if (objNode.Key == DestPath)
  407. {
  408. objNode.Selected = true;
  409. objNode.MakeNodeVisible();
  410. }
  411. return objNode;
  412. }
  413. /// -----------------------------------------------------------------------------
  414. /// <summary>
  415. /// Adds node to tree
  416. /// </summary>
  417. /// <param name="folder">The FolderInfo object to add</param>
  418. /// <param name="objNodes">Node collection to add to</param>
  419. /// <returns></returns>
  420. /// <remarks>
  421. /// </remarks>
  422. /// <history>
  423. /// [cnurse] 04/24/2006 Created
  424. /// </history>
  425. /// -----------------------------------------------------------------------------
  426. private DNNTreeNode AddNode(FolderInfo folder, DNNTreeNodeCollection objNodes)
  427. {
  428. DNNTreeNode objNode;
  429. string strName = folder.FolderName;
  430. string strKey = MaskPath(RootFolderPath + folder.FolderPath);
  431. var subFolders = FolderManager.Instance.GetFolders(folder).ToList();
  432. var imageIndex = FolderMappings.IndexOfKey(folder.FolderMappingID);
  433. objNode = AddNode(strName, strKey, imageIndex, objNodes);
  434. objNode.HasNodes = subFolders.Count > 0;
  435. return objNode;
  436. }
  437. /// -----------------------------------------------------------------------------
  438. /// <summary>
  439. /// BindFileList
  440. /// </summary>
  441. /// <remarks>
  442. /// </remarks>
  443. /// <history>
  444. /// [Jon Henning] 11/1/2004 Created
  445. /// </history>
  446. /// -----------------------------------------------------------------------------
  447. private void BindFileList()
  448. {
  449. string strCurPage;
  450. LastPath = PathUtils.Instance.RemoveTrailingSlash(UnMaskPath(DestPath));
  451. dgFileList.PageSize = PageSize;
  452. dgFileList.CurrentPageIndex = PageIndex;
  453. var folderPath = PathUtils.Instance.StripFolderPath(DestPath).Replace("\\", "/");
  454. if (Host.EnableFileAutoSync)
  455. {
  456. FolderManager.Instance.Synchronize(FolderPortalID, folderPath, false, true);
  457. }
  458. GetFilesByFolder(folderPath);
  459. if (dgFileList.PageCount > 1)
  460. {
  461. tblMessagePager.Visible = true;
  462. strCurPage = Localization.GetString("Pages");
  463. lblCurPage.Text = string.Format(strCurPage, (dgFileList.CurrentPageIndex + 1), (dgFileList.PageCount));
  464. lnkMoveFirst.Text = "<img border=0 Alt='" + Localization.GetString("First") + "' src='" + IconController.IconURL("MoveFirst") + "'>";
  465. lnkMovePrevious.Text = "<img border=0 Alt='" + Localization.GetString("Previous") + "' src='" + IconController.IconURL("MovePrevious") + "'>";
  466. lnkMoveNext.Text = "<img border=0 Alt='" + Localization.GetString("Next") + "' src='" + IconController.IconURL("MoveNext") + "'>";
  467. lnkMoveLast.Text = "<img border=0 Alt='" + Localization.GetString("Last") + "' src='" + IconController.IconURL("Movelast") + "'>";
  468. }
  469. else
  470. {
  471. tblMessagePager.Visible = false;
  472. }
  473. lblCurFolder.Text = Regex.Replace(DestPath, "^0\\\\", RootFolderName + "\\");
  474. MoveFiles = "";
  475. UpdateSpaceUsed();
  476. }
  477. /// -----------------------------------------------------------------------------
  478. /// <summary>
  479. ///
  480. /// </summary>
  481. /// <remarks>
  482. /// </remarks>
  483. /// <history>
  484. /// [cpaterra] 4/6/2006 Created
  485. /// </history>
  486. /// -----------------------------------------------------------------------------
  487. private void BindStorageLocationTypes()
  488. {
  489. ddlStorageLocation.Items.Clear();
  490. foreach (var folderMapping in FolderMappingController.Instance.GetFolderMappings(FolderPortalID))
  491. {
  492. ddlStorageLocation.Items.Add(new ListItem(folderMapping.MappingName, folderMapping.FolderMappingID.ToString()));
  493. }
  494. }
  495. /// -----------------------------------------------------------------------------
  496. /// <summary>
  497. /// The BindFolderTree helper method is used to bind the list of
  498. /// files for this portal or for the hostfolder, to an asp:DATAGRID server control
  499. /// </summary>
  500. /// <remarks>
  501. /// </remarks>
  502. /// <history>
  503. /// [DYNST] 2/1/2004 Created
  504. /// [Jon Henning] 11/1/2004 Updated to use ClientAPI/DNNTree
  505. /// [cnurse] 12/2/2004 Updated to use Localization for Root
  506. /// [Jon Henning] 8/24/2005 Added Populate on Demand (POD) logic
  507. /// [cnurse] 04/24/2006 Updated to use new Secure Storage
  508. /// </history>
  509. /// -----------------------------------------------------------------------------
  510. private void BindFolderTree()
  511. {
  512. DNNTreeNode objNode;
  513. //Clear the Tree Nodes Collection
  514. DNNTree.TreeNodes.Clear();
  515. objNode = AddNode(RootFolderName, MaskPath(RootFolderPath), FolderMappings.IndexOfValue("Standard"), DNNTree.TreeNodes);
  516. var folders = FolderManager.Instance.GetFolders(FolderPortalID).ToList();
  517. objNode.HasNodes = folders.Count > 1;
  518. if (DNNTree.PopulateNodesFromClient == false || DNNTree.IsDownLevel)
  519. {
  520. PopulateTree(objNode.TreeNodes, RootFolderPath);
  521. }
  522. if (DNNTree.SelectedTreeNodes.Count == 0)
  523. {
  524. objNode.Selected = true;
  525. }
  526. }
  527. /// -----------------------------------------------------------------------------
  528. /// <summary>
  529. /// GeneratePermissionsGrid generates the permissions grid for the folder
  530. /// </summary>
  531. /// <remarks>
  532. /// </remarks>
  533. /// <history>
  534. /// [cnurse] 12/2/2004 documented
  535. /// </history>
  536. /// -----------------------------------------------------------------------------
  537. private void GeneratePermissionsGrid()
  538. {
  539. var folderPath = PathUtils.Instance.StripFolderPath(DestPath).Replace("\\", "/");
  540. dgPermissions.FolderPath = folderPath;
  541. var objFolderInfo = FolderManager.Instance.GetFolder(FolderPortalID, folderPath);
  542. if (objFolderInfo != null && ddlStorageLocation.Items.FindByValue(Convert.ToString(objFolderInfo.FolderMappingID)) != null)
  543. {
  544. ddlStorageLocation.SelectedValue = Convert.ToString(objFolderInfo.FolderMappingID);
  545. phSecureFolderWarning.Visible = !objFolderInfo.IsStorageSecure;
  546. }
  547. }
  548. /// -----------------------------------------------------------------------------
  549. /// <summary>
  550. /// GetAttributeString generates the attributes string from the FileAttributes
  551. /// </summary>
  552. /// <remarks>
  553. /// </remarks>
  554. /// <history>
  555. /// [cnurse] 12/2/2004 documented
  556. /// </history>
  557. /// -----------------------------------------------------------------------------
  558. private string GetAttributeString(FileAttributes attributes)
  559. {
  560. string strResult = "";
  561. if ((attributes & FileAttributes.Archive) == FileAttributes.Archive)
  562. {
  563. strResult += "A";
  564. }
  565. if ((attributes & FileAttributes.ReadOnly) == FileAttributes.ReadOnly)
  566. {
  567. strResult += "R";
  568. }
  569. if ((attributes & FileAttributes.Hidden) == FileAttributes.Hidden)
  570. {
  571. strResult += "H";
  572. }
  573. if ((attributes & FileAttributes.System) == FileAttributes.System)
  574. {
  575. strResult += "S";
  576. }
  577. return strResult;
  578. }
  579. /// -----------------------------------------------------------------------------
  580. /// <summary>
  581. /// GetFilesByFolder gets the Files/Folders to display
  582. /// </summary>
  583. /// <remarks>
  584. /// </remarks>
  585. /// <history>
  586. /// [cnurse] 12/2/2004 documented and modified to display Folders in
  587. /// the grid
  588. /// [cnurse] 04/24/2006 Updated to use new Secure Storage
  589. /// </history>
  590. /// -----------------------------------------------------------------------------
  591. private void GetFilesByFolder(string strFolderName)
  592. {
  593. DataTable tblFiles = GetFileTable();
  594. var objFolder = FolderManager.Instance.GetFolder(FolderPortalID, strFolderName);
  595. if (objFolder != null)
  596. {
  597. var arrFiles = FolderManager.Instance.GetFiles(objFolder);
  598. foreach (FileInfo objFile in arrFiles)
  599. {
  600. AddFileToTable(tblFiles, objFile);
  601. }
  602. }
  603. var dv = new DataView();
  604. dv.Table = tblFiles;
  605. dv.Sort = Sort;
  606. if (!String.IsNullOrEmpty(FilterFiles))
  607. {
  608. dv.RowFilter = "FileName like '%" + FilterFiles + "%'";
  609. }
  610. dgFileList.DataSource = dv;
  611. dgFileList.DataBind();
  612. }
  613. /// -----------------------------------------------------------------------------
  614. /// <summary>
  615. /// GetFileTable creates the DataTable used to store the list of files and folders
  616. /// </summary>
  617. /// <remarks>
  618. /// </remarks>
  619. /// <history>
  620. /// [cnurse] 12/3/2004 documented and modified to display Folders in
  621. /// the grid
  622. /// </history>
  623. /// -----------------------------------------------------------------------------
  624. private DataTable GetFileTable()
  625. {
  626. var tblFiles = new DataTable("Files");
  627. var myColumns = new DataColumn();
  628. myColumns.DataType = Type.GetType("System.String");
  629. myColumns.ColumnName = "FileType";
  630. tblFiles.Columns.Add(myColumns);
  631. myColumns = new DataColumn();
  632. myColumns.DataType = Type.GetType("System.Int32");
  633. myColumns.ColumnName = "FileId";
  634. tblFiles.Columns.Add(myColumns);
  635. myColumns = new DataColumn();
  636. myColumns.DataType = Type.GetType("System.String");
  637. myColumns.ColumnName = "FileName";
  638. tblFiles.Columns.Add(myColumns);
  639. myColumns = new DataColumn();
  640. myColumns.DataType = Type.GetType("System.String");
  641. myColumns.ColumnName = "FileSize";
  642. tblFiles.Columns.Add(myColumns);
  643. myColumns = new DataColumn();
  644. myColumns.DataType = Type.GetType("System.Int32");
  645. myColumns.ColumnName = "IntFileSize";
  646. tblFiles.Columns.Add(myColumns);
  647. myColumns = new DataColumn();
  648. myColumns.DataType = Type.GetType("System.DateTime");
  649. myColumns.ColumnName = "DateModified";
  650. tblFiles.Columns.Add(myColumns);
  651. myColumns = new DataColumn();
  652. myColumns.DataType = Type.GetType("System.Boolean");
  653. myColumns.ColumnName = "ReadOnly";
  654. tblFiles.Columns.Add(myColumns);
  655. myColumns = new DataColumn();
  656. myColumns.DataType = Type.GetType("System.Boolean");
  657. myColumns.ColumnName = "Hidden";
  658. tblFiles.Columns.Add(myColumns);
  659. myColumns = new DataColumn();
  660. myColumns.DataType = Type.GetType("System.Boolean");
  661. myColumns.ColumnName = "System";
  662. tblFiles.Columns.Add(myColumns);
  663. myColumns = new DataColumn();
  664. myColumns.DataType = Type.GetType("System.Boolean");
  665. myColumns.ColumnName = "Archive";
  666. tblFiles.Columns.Add(myColumns);
  667. myColumns = new DataColumn();
  668. myColumns.DataType = Type.GetType("System.String");
  669. myColumns.ColumnName = "AttributeString";
  670. tblFiles.Columns.Add(myColumns);
  671. myColumns = new DataColumn();
  672. myColumns.DataType = Type.GetType("System.String");
  673. myColumns.ColumnName = "Extension";
  674. tblFiles.Columns.Add(myColumns);
  675. myColumns = new DataColumn();
  676. myColumns.DataType = Type.GetType("System.Boolean");
  677. myColumns.ColumnName = "SupportsFileAttributes";
  678. tblFiles.Columns.Add(myColumns);
  679. return tblFiles;
  680. }
  681. /// -----------------------------------------------------------------------------
  682. /// <summary>
  683. /// Gets the size of the all the files in the zip file
  684. /// </summary>
  685. /// <remarks>
  686. /// </remarks>
  687. /// <history>
  688. /// [cnurse] 12/4/2004 Created
  689. /// </history>
  690. /// -----------------------------------------------------------------------------
  691. private long GetZipFileExtractSize(string strFileName)
  692. {
  693. ZipEntry objZipEntry;
  694. ZipInputStream objZipInputStream;
  695. try
  696. {
  697. objZipInputStream = new ZipInputStream(File.OpenRead(strFileName));
  698. }
  699. catch (Exception ex)
  700. {
  701. DnnLog.Error(ex);
  702. ShowErrorMessage(MaskString(ex.Message));
  703. return -1;
  704. }
  705. objZipEntry = objZipInputStream.GetNextEntry();
  706. long iTemp = 0;
  707. while (objZipEntry != null)
  708. {
  709. iTemp = iTemp + objZipEntry.Size;
  710. objZipEntry = objZipInputStream.GetNextEntry();
  711. }
  712. objZipInputStream.Close();
  713. return iTemp;
  714. }
  715. /// -----------------------------------------------------------------------------
  716. /// <summary>
  717. /// Sets common properties on DNNTree control
  718. /// </summary>
  719. /// <remarks>
  720. /// </remarks>
  721. /// <history>
  722. /// [Jon Henning] 11/1/2004 Created
  723. /// [Jon Henning] 8/24/2005 Added Populate on Demand (POD) logic
  724. /// </history>
  725. /// -----------------------------------------------------------------------------
  726. private void InitializeTree()
  727. {
  728. DNNTree.SystemImagesPath = ResolveUrl("~/images/");
  729. PreloadFolderImages();
  730. DNNTree.ImageList.Add(IconController.IconURL("File"));
  731. DNNTree.IndentWidth = 10;
  732. DNNTree.CollapsedNodeImage = IconController.IconURL("Max","12X12");
  733. DNNTree.ExpandedNodeImage = IconController.IconURL("Min", "12X12");
  734. DNNTree.PopulateNodesFromClient = true;
  735. DNNTree.JSFunction = "nodeSelected();";
  736. }
  737. private void PreloadFolderImages()
  738. {
  739. IFolderMappingController folderMappingController = FolderMappingController.Instance;
  740. FolderMappingInfo folderMappingInfo = null;
  741. string imageUrl = String.Empty;
  742. foreach (var folderMapping in FolderMappings)
  743. {
  744. folderMappingInfo = folderMappingController.GetFolderMapping(folderMapping.Key);
  745. imageUrl = folderMappingInfo.ImageUrl;
  746. DNNTree.ImageList.Add(imageUrl);
  747. }
  748. }
  749. private void ManageToolbarButton(HtmlGenericControl wrapperControl, Image imageControl, string js, string imageRootName, bool enableButton)
  750. {
  751. if (enableButton)
  752. {
  753. wrapperControl.Attributes.Add("style", "cursor: pointer");
  754. wrapperControl.Attributes.Add("onclick", js);
  755. imageControl.ImageUrl = IconController.IconURL(imageRootName);
  756. }
  757. else
  758. {
  759. wrapperControl.Attributes.Remove("style");
  760. wrapperControl.Attributes.Remove("onclick");
  761. imageControl.ImageUrl = IconController.IconURL(imageRootName + "Disabled");
  762. }
  763. }
  764. private void ManageSecurity()
  765. {
  766. ManageToolbarButton(addFolder, lnkAddFolderIMG, "return canAddFolder();", "AddFolder", HasPermission("ADD"));
  767. ManageToolbarButton(deleteFolder, lnkDelFolderIMG, "return deleteFolder();", "DeleteFolder", HasPermission("DELETE"));
  768. ManageToolbarButton(syncFolder, lnkSyncFolderIMG, "__doPostBack(m_sUCPrefixName + 'lnkSyncFolder', '');", "Synchronize", HasPermission("MANAGE"));
  769. chkRecursive.Enabled = HasPermission("MANAGE");
  770. ManageToolbarButton(refresh, lnkRefreshIMG, "__doPostBack(m_sUCPrefixName + 'lnkRefresh', '');", "Refresh", true);
  771. ManageToolbarButton(copy, lnkCopy, "copyCheckedFiles();", "CopyFile", HasPermission("COPY"));
  772. ManageToolbarButton(move, lnkMove, "moveFiles();", "MoveFile", HasPermission("COPY"));
  773. ManageToolbarButton(upload, lnkUploadIMG, "__doPostBack(m_sUCPrefixName + 'lnkUpload', '');", "UploadFile", HasPermission("ADD"));
  774. ManageToolbarButton(delete, lnkDelete, "deleteCheckedFiles();", "Delete", HasPermission("DELETE"));
  775. ManageToolbarButton(filter, lnkFilterIMG, "__doPostBack(m_sUCPrefixName + 'lnkFilter', '');", "Search", true);
  776. lnkCopy.Enabled = IsEditable;
  777. lnkMove.Enabled = IsEditable;
  778. lnkUpload.Enabled = IsEditable;
  779. lnkDelete.Enabled = IsEditable;
  780. }
  781. /// -----------------------------------------------------------------------------
  782. /// <summary>
  783. /// Masks the path
  784. /// </summary>
  785. /// <remarks>
  786. /// </remarks>
  787. /// <history>
  788. /// [Jon Henning] 11/1/2004 Created
  789. /// </history>
  790. /// -----------------------------------------------------------------------------
  791. private string MaskPath(string strOrigPath)
  792. {
  793. return strOrigPath.Replace(PathUtils.Instance.RemoveTrailingSlash(RootFolderPath), "0").Replace("/", "\\");
  794. }
  795. /// -----------------------------------------------------------------------------
  796. /// <summary>
  797. /// Masks a string
  798. /// </summary>
  799. /// <remarks>
  800. /// </remarks>
  801. /// <history>
  802. /// [Jon Henning] 11/1/2004 Created
  803. /// </history>
  804. /// -----------------------------------------------------------------------------
  805. private string MaskString(string strSource)
  806. {
  807. var search = PathUtils.Instance.RemoveTrailingSlash(RootFolderPath).ToUpper();
  808. var replace = Localization.GetString("PortalRoot", LocalResourceFile);
  809. var result = "";
  810. var temp = strSource.ToUpper();
  811. var position = temp.IndexOf(search);
  812. while (position >= 0)
  813. {
  814. result += strSource.Substring(0, position) + replace;
  815. strSource = strSource.Substring(position + search.Length);
  816. temp = temp.Substring(position + search.Length);
  817. position = temp.IndexOf(search);
  818. }
  819. return result + strSource;
  820. }
  821. /// -----------------------------------------------------------------------------
  822. /// <summary>
  823. /// Populates DNNTree control with folder hiearachy
  824. /// </summary>
  825. /// <param name="objNodes">Node collection to add children to</param>
  826. /// <param name="strPath">Path of parent node</param>
  827. /// <remarks>
  828. /// </remarks>
  829. /// <history>
  830. /// [Jon Henning] 10/26/2004 Created
  831. /// [Jon Henning] 8/24/2005 Added Populate on Demand (POD) logic
  832. /// [cnurse] 04/24/2006 Updated to use new Secure Storage
  833. /// </history>
  834. /// -----------------------------------------------------------------------------
  835. private void PopulateTree(DNNTreeNodeCollection objNodes, string strPath)
  836. {
  837. var folderPath = strPath.Replace(RootFolderPath, "").Replace("\\", "/");
  838. var parentFolder = FolderManager.Instance.GetFolder(FolderPortalID, folderPath);
  839. var folders = FolderManager.Instance.GetFolders(parentFolder);
  840. DNNTreeNode objNode;
  841. //Iterate through the SubFolders
  842. foreach (var folder in folders)
  843. {
  844. if (FolderPermissionController.CanViewFolder((FolderInfo)folder))
  845. {
  846. objNode = AddNode((FolderInfo)folder, objNodes);
  847. if (DNNTree.PopulateNodesFromClient == false)
  848. {
  849. PopulateTree(objNode.TreeNodes, folder.FolderPath);
  850. }
  851. }
  852. }
  853. }
  854. private void SetFolder(DNNTreeNode node)
  855. {
  856. dgFileList.EditItemIndex = -1;
  857. if (DNNTree.IsDownLevel)
  858. {
  859. DestPath = node.Key;
  860. LastPath = node.Key;
  861. }
  862. ManageSecurity();
  863. BindFileList();
  864. GeneratePermissionsGrid();
  865. }
  866. /// -----------------------------------------------------------------------------
  867. /// <summary>
  868. /// Sets up the file manager for Edit Mode
  869. /// </summary>
  870. /// <remarks>
  871. /// </remarks>
  872. /// <history>
  873. /// [Jon Henning] 11/1/2004 Created
  874. /// </history>
  875. /// -----------------------------------------------------------------------------
  876. private void SetEditMode()
  877. {
  878. if (dgFileList.EditItemIndex > -1)
  879. {
  880. //In Edit Mode
  881. int intCount = dgFileList.Items.Count;
  882. CheckBox chkFile2;
  883. CheckBox chkFile;
  884. ImageButton lnkDeleteFile;
  885. ImageButton lnkEditFile;
  886. int i;
  887. for (i = 0; i <= intCount - 1; i++)
  888. {
  889. if (i != dgFileList.EditItemIndex)
  890. {
  891. chkFile2 = (CheckBox) dgFileList.Items[i].FindControl("chkFile2");
  892. chkFile = (CheckBox) dgFileList.Items[i].FindControl("chkFile");
  893. lnkDeleteFile = (ImageButton) dgFileList.Items[i].FindControl("lnkDeleteFile");
  894. lnkEditFile = (ImageButton) dgFileList.Items[i].FindControl("lnkEditFile");
  895. if ((chkFile2) != null)
  896. {
  897. chkFile2.Enabled = false;
  898. }
  899. if ((chkFile) != null)
  900. {
  901. chkFile.Enabled = false;
  902. }
  903. if ((lnkDeleteFile) != null)
  904. {
  905. lnkDeleteFile.Enabled = false;
  906. lnkDeleteFile.ImageUrl = IconController.IconURL("TrashDisabled");
  907. lnkDeleteFile.AlternateText = "";
  908. }
  909. if ((lnkEditFile) != null)
  910. {
  911. lnkEditFile.Enabled = false;
  912. lnkEditFile.ImageUrl = IconController.IconURL("EditDisabled");
  913. lnkEditFile.AlternateText = "";
  914. }
  915. chkFile2 = null;
  916. chkFile = null;
  917. lnkDeleteFile = null;
  918. lnkEditFile = null;
  919. }
  920. }
  921. DisabledButtons = true;
  922. }
  923. else
  924. {
  925. }
  926. dgFileList.Columns[0].HeaderStyle.Width = Unit.Percentage(5);
  927. dgFileList.Columns[1].HeaderStyle.Width = Unit.Percentage(25);
  928. dgFileList.Columns[2].HeaderStyle.Width = Unit.Percentage(25);
  929. dgFileList.Columns[3].HeaderStyle.Width = Unit.Percentage(7);
  930. dgFileList.Columns[4].HeaderStyle.Width = Unit.Percentage(15);
  931. }
  932. /// -----------------------------------------------------------------------------
  933. /// <summary>
  934. /// Sets up the Error Message
  935. /// </summary>
  936. /// <remarks>
  937. /// </remarks>
  938. /// <history>
  939. /// [Jon Henning] 11/1/2004 Created
  940. /// </history>
  941. /// -----------------------------------------------------------------------------
  942. private void ShowErrorMessage(string strMessage)
  943. {
  944. strMessage = strMessage.Replace("\\", "\\\\");
  945. strMessage = strMessage.Replace("'", "\\'");
  946. strMessage = strMessage.Replace(Environment.NewLine, "\\n");
  947. strMessage = string.Format(_ErrorMessage, strMessage);
  948. ClientAPI.RegisterClientVariable(Page, "ErrorMessage", strMessage, true);
  949. }
  950. /// -----------------------------------------------------------------------------
  951. /// <summary>
  952. /// Synchronizes the complete File System
  953. /// </summary>
  954. /// <remarks>
  955. /// </remarks>
  956. /// <history>
  957. /// [Jon Henning] 11/1/2004 Created
  958. /// </history>
  959. /// -----------------------------------------------------------------------------
  960. private void Synchronize()
  961. {
  962. if (IsHostMenu)
  963. {
  964. FolderManager.Instance.Synchronize(Null.NullInteger);
  965. }
  966. else
  967. {
  968. FolderManager.Instance.Synchronize(PortalId);
  969. }
  970. }
  971. /// -----------------------------------------------------------------------------
  972. /// <summary>
  973. /// Unmasks the path
  974. /// </summary>
  975. /// <remarks>
  976. /// </remarks>
  977. /// <history>
  978. /// [Jon Henning] 11/1/2004 Created
  979. /// </history>
  980. /// -----------------------------------------------------------------------------
  981. private string UnMaskPath(string strOrigPath)
  982. {
  983. strOrigPath = PathUtils.Instance.AddTrailingSlash(RootFolderPath) + PathUtils.Instance.StripFolderPath(strOrigPath);
  984. return strOrigPath.Replace("/", "\\");
  985. }
  986. /// -----------------------------------------------------------------------------
  987. /// <summary>
  988. /// Updates the space Used label
  989. /// </summary>
  990. /// <remarks>
  991. /// </remarks>
  992. /// <history>
  993. /// [Jon Henning] 11/1/2004 Created
  994. /// </history>
  995. /// -----------------------------------------------------------------------------
  996. private void UpdateSpaceUsed()
  997. {
  998. string strDestFolder = PathUtils.Instance.AddTrailingSlash(UnMaskPath(DestPath));
  999. var objPortalController = new PortalController();
  1000. string strUsed;
  1001. string strQuota;
  1002. if (PortalSettings.HostSpace == 0)
  1003. {
  1004. strQuota = Localization.GetString("UnlimitedSpace", LocalResourceFile);
  1005. }
  1006. else
  1007. {
  1008. strQuota = PortalSettings.HostSpace + "MB";
  1009. }
  1010. if (IsHostMenu)
  1011. {
  1012. lblFileSpace.Text = "&nbsp;";
  1013. }
  1014. else
  1015. {
  1016. long spaceUsed = objPortalController.GetPortalSpaceUsedBytes(FolderPortalID);
  1017. if (spaceUsed < 1024)
  1018. {
  1019. strUsed = spaceUsed.ToString("0.00") + "B";
  1020. }
  1021. else if (spaceUsed < (1024*1024))
  1022. {
  1023. strUsed = (spaceUsed/1024).ToString("0.00") + "KB";
  1024. }
  1025. else
  1026. {
  1027. strUsed = (spaceUsed/(1024*1024)).ToString("0.00") + "MB";
  1028. }
  1029. lblFileSpace.Text = string.Format(Localization.GetString("SpaceUsed", LocalResourceFile), strUsed, strQuota);
  1030. }
  1031. }
  1032. #endregion
  1033. #region "Protected Methods"
  1034. /// -----------------------------------------------------------------------------
  1035. /// <summary>
  1036. /// The DeleteFiles helper method is used to delete the files in the list
  1037. /// </summary>
  1038. /// <remarks>
  1039. /// </remarks>
  1040. /// <param name="strFiles">The list of files to delete</param>
  1041. /// <history>
  1042. /// [DYNST] 2/1/2004 Created
  1043. /// [Jon Henning] 11/1/2004 Updated to use ClientAPI/DNNTree
  1044. /// </history>
  1045. /// -----------------------------------------------------------------------------
  1046. protected void DeleteFiles(string strFiles)
  1047. {
  1048. var arFiles = strFiles.Split(';');
  1049. if (arFiles.Length == 0)
  1050. {
  1051. return;
  1052. }
  1053. var strErrorMessage = "";
  1054. var strSourcePath = Globals.GetSubFolderPath(PathUtils.Instance.AddTrailingSlash(LastPath) + arFiles[0], FolderPortalID);
  1055. var folder = FolderManager.Instance.GetFolder(FolderPortalID, strSourcePath);
  1056. for (var i = 0; i <= arFiles.Length - 1; i++)
  1057. {
  1058. if (!String.IsNullOrEmpty(arFiles[i]))
  1059. {
  1060. var file = Services.FileSystem.FileManager.Instance.GetFile(folder, arFiles[i]);
  1061. try
  1062. {
  1063. Services.FileSystem.FileManager.Instance.DeleteFile(file);
  1064. }
  1065. catch (Exception ex)
  1066. {
  1067. DnnLog.Error(ex);
  1068. strErrorMessage += Localization.GetString("ErrorDeletingFile", LocalResourceFile) +
  1069. PathUtils.Instance.AddTrailingSlash(UnMaskPath(DestPath)) +
  1070. arFiles[i] +
  1071. "<br/>&nbsp;&nbsp;&nbsp;" + ex.Message + "<br/>";
  1072. }
  1073. }
  1074. }
  1075. if (!String.IsNullOrEmpty(strErrorMessage))
  1076. {
  1077. strErrorMessage = MaskString(strErrorMessage);
  1078. ShowErrorMessage(strErrorMessage);
  1079. }
  1080. BindFileList();
  1081. }
  1082. /// -----------------------------------------------------------------------------
  1083. /// <summary>
  1084. /// Renders the page output
  1085. /// </summary>
  1086. /// <remarks>
  1087. /// </remarks>
  1088. /// <history>
  1089. /// [Jon Henning] 11/1/2004 Created
  1090. /// </history>
  1091. /// -----------------------------------------------------------------------------
  1092. protected override void Render(HtmlTextWriter output)
  1093. {
  1094. //mark various controls as valid for event validation
  1095. Page.ClientScript.RegisterForEventValidation(lnkAddFolder.UniqueID);
  1096. Page.ClientScript.RegisterForEventValidation(lnkDeleteFolder.UniqueID);
  1097. Page.ClientScript.RegisterForEventValidation(lnkDeleteAllCheckedFiles.UniqueID);
  1098. Page.ClientScript.RegisterForEventValidation(lnkRefresh.UniqueID);
  1099. Page.ClientScript.RegisterForEventValidation(lnkSelectFolder.UniqueID);
  1100. Page.ClientScript.RegisterForEventValidation(lnkSyncFolder.UniqueID);
  1101. Page.ClientScript.RegisterForEventValidation(lnkFilter.UniqueID);
  1102. Page.ClientScript.RegisterForEventValidation(lnkCopy.UniqueID);
  1103. Page.ClientScript.RegisterForEventValidation(lnkUpload.UniqueID);
  1104. Page.ClientScript.RegisterForEventValidation(lnkMove.UniqueID);
  1105. Page.ClientScript.RegisterForEventValidation(lnkMoveFirst.UniqueID);
  1106. Page.ClientScript.RegisterForEventValidation(lnkMoveLast.UniqueID);
  1107. Page.ClientScript.RegisterForEventValidation(lnkMoveNext.UniqueID);
  1108. Page.ClientScript.RegisterForEventValidation(lnkMovePrevious.UniqueID);
  1109. Page.ClientScript.RegisterForEventValidation(lnkMoveFiles.UniqueID);
  1110. if (dgFileList.Items.Count <= 10 && dgFileList.PageCount == 1)
  1111. {
  1112. dgFileList.PagerStyle.Visible = false;
  1113. }
  1114. base.Render(output);
  1115. }
  1116. #endregion
  1117. #region "Public Methods"
  1118. /// -----------------------------------------------------------------------------
  1119. /// <summary>
  1120. /// The CheckDestFolderAccess helper method Checks to make sure file copy/move
  1121. /// operation will not exceed portal available space
  1122. /// </summary>
  1123. /// <remarks>
  1124. /// </remarks>
  1125. /// <history>
  1126. /// [DYNST] 2/1/2004 Created
  1127. /// [Jon Henning] 11/1/2004 Updated to use ClientAPI/DNNTree
  1128. /// [cnurse] 12/2/2004 Updated to use Localization
  1129. /// </history>
  1130. /// -----------------------------------------------------------------------------
  1131. public string CheckDestFolderAccess(long intSize)
  1132. {
  1133. if (Request.IsAuthenticated)
  1134. {
  1135. string strDestFolder = PathUtils.Instance.AddTrailingSlash(UnMaskPath(DestPath));
  1136. var objPortalController = new PortalController();
  1137. if (objPortalController.HasSpaceAvailable(FolderPortalID, intSize) || Globals.IsHostTab(PortalSettings.ActiveTab.TabID))
  1138. {
  1139. return "";
  1140. }
  1141. else
  1142. {
  1143. return Localization.GetString("NotEnoughSpace", LocalResourceFile);
  1144. }
  1145. }
  1146. else
  1147. {
  1148. return Localization.GetString("PleaseLogin", LocalResourceFile);
  1149. }
  1150. }
  1151. /// -----------------------------------------------------------------------------
  1152. /// <summary>
  1153. /// Gets the Image associated with the File/Folder
  1154. /// </summary>
  1155. /// <remarks>
  1156. /// </remarks>
  1157. /// <history>
  1158. /// [cnurse] 12/4/2004 Created
  1159. /// </history>
  1160. /// -----------------------------------------------------------------------------
  1161. public string GetImageUrl(string type)
  1162. {
  1163. string url = "";
  1164. try
  1165. {
  1166. if (type == "folder")
  1167. {
  1168. url = IconController.IconURL("ExtClosedFolder");
  1169. }
  1170. else
  1171. {
  1172. if (!String.IsNullOrEmpty(type) && File.Exists(Server.MapPath(IconController.IconURL("Ext" + type))))
  1173. {
  1174. url = IconController.IconURL("Ext" + type);
  1175. }
  1176. else
  1177. {
  1178. url = IconController.IconURL("ExtFile");
  1179. }
  1180. }
  1181. }
  1182. catch (Exception exc) //Module failed to load
  1183. {
  1184. Exceptions.ProcessModuleLoadException(this, exc);
  1185. }
  1186. return url;
  1187. }
  1188. #endregion
  1189. #region "Event Handlers"
  1190. protected override void OnInit(EventArgs e)
  1191. {
  1192. base.OnInit(e);
  1193. cmdUpdate.Click += cmdUpdate_Click;
  1194. dgFileList.ItemDataBound += dgFileList_ItemDataBound;
  1195. dgFileList.SortCommand += dgFileList_SortCommand;
  1196. DNNTree.NodeClick += DNNTree_NodeClick;
  1197. DNNTree.PopulateOnDemand += DNNTree_PopulateOnDemand;
  1198. lnkAddFolder.Command += lnkAddFolder_Command;
  1199. lnkDeleteFolder.Command += lnkDeleteFolder_Command;
  1200. lnkFilter.Command += lnkFilter_Command;
  1201. lnkDeleteAllCheckedFiles.Command += lnkDeleteAllCheckedFiles_Command;
  1202. lnkMoveFiles.Command += lnkMoveFiles_Command;
  1203. lnkMoveFirst.Command += lnkMoveFirst_Command;
  1204. lnkMoveLast.Command += lnkMoveLast_Command;
  1205. lnkMoveNext.Command += lnkMoveNext_Command;
  1206. lnkMovePrevious.Command += lnkMovePrevious_Command;
  1207. lnkRefresh.Command += lnkRefresh_Command;
  1208. lnkSelectFolder.Command += lnkSelectFolder_Command;
  1209. lnkSyncFolder.Command += lnkSyncFolder_Command;
  1210. lnkSyncFolders.Click += lnkSyncFolders_Click;
  1211. lnkUpload.Command += lnkUpload_Command;
  1212. selPageSize.SelectedIndexChanged += selPageSize_SelectedIndexChanged;
  1213. }
  1214. /// -----------------------------------------------------------------------------
  1215. /// <summary>
  1216. /// The Page_Load server event handler on this user control is used
  1217. /// to populate the current files from the appropriate PortalUpload Directory or the HostFolder
  1218. /// and binds this list to the Datagrid
  1219. /// </summary>
  1220. /// <param name="sender"></param>
  1221. /// <param name="e"></param>
  1222. /// <remarks>
  1223. /// </remarks>
  1224. /// <history>
  1225. /// [DYNST] 2/1/2004 Created
  1226. /// [Jon Henning] 11/1/2004 Updated to use ClientAPI/DNNTree
  1227. /// </history>
  1228. /// -----------------------------------------------------------------------------
  1229. protected override void OnLoad(EventArgs e)
  1230. {
  1231. base.OnLoad(e);
  1232. try
  1233. {
  1234. ClientAPI.RegisterClientVariable(Page, "__dnn_postBack", ClientAPI.GetCallbackEventReference(this, "\"[DATA]\"", "success", "this", "error"), true);
  1235. //FileManager requires at a bare minimum the dnn namespace, so regardless of wheter the ClientAPI is disabled of not we
  1236. //need to register it.
  1237. ClientAPI.RegisterClientReference(Page, ClientAPI.ClientNamespaceReferences.dnn);
  1238. DNNClientAPI.AddBodyOnloadEventHandler(Page, "initFileManager();");
  1239. ClientAPI.RegisterClientVariable(Page, "UCPrefixID", DNNTree.ClientID.Replace(DNNTree.ID, ""), true);
  1240. ClientAPI.RegisterClientVariable(Page, "UCPrefixName", DNNTree.UniqueID.Replace(DNNTree.ID, ""), true);
  1241. DisabledButtons = DNNTree.IsDownLevel;
  1242. if (IsHostMenu)
  1243. {
  1244. RootFolderName = Localization.GetString("HostRoot", LocalResourceFile);
  1245. pnlSecurity.Visible = false;
  1246. }
  1247. else
  1248. {
  1249. RootFolderName = Localization.GetString("PortalRoot", LocalResourceFile);
  1250. //Only Administrators can manage Folder Security
  1251. pnlSecurity.Visible = HasPermission("WRITE");
  1252. }
  1253. if (!Page.IsPostBack)
  1254. {
  1255. DataCache.ClearFolderCache(FolderPortalID);
  1256. Localization.LocalizeDataGrid(ref dgFileList, LocalResourceFile);
  1257. InitializeTree();
  1258. BindFolderTree();
  1259. IsRefresh = true;
  1260. PageIndex = 0;
  1261. Sort = "FileType ASC, FileName ASC";
  1262. LastSort = "FileType ASC, FileName ASC";
  1263. MoveStatus = "";
  1264. FilterFiles = "";
  1265. DestPath = "0\\";
  1266. BindFileList();
  1267. BindStorageLocationTypes();
  1268. ManageSecurity();
  1269. }
  1270. else
  1271. {
  1272. FilterFiles = txtFilter.Text;
  1273. }
  1274. if (LastFolderPath != DestPath)
  1275. {
  1276. PageIndex = 0;
  1277. GeneratePermissionsGrid();
  1278. }
  1279. LastFolderPath = DestPath;
  1280. if (Framework.AJAX.IsEnabled())
  1281. {
  1282. Framework.AJAX.RegisterPostBackControl(lnkSyncFolder);
  1283. Framework.AJAX.RegisterPostBackControl(lnkSyncFolders);
  1284. Framework.AJAX.RegisterPostBackControl(lnkDeleteAllCheckedFiles);
  1285. Framework.AJAX.RegisterPostBackControl(lnkMoveFiles);
  1286. }
  1287. }
  1288. catch (Exception exc) //Module failed to load
  1289. {
  1290. Exceptions.ProcessModuleLoadException(this, exc);
  1291. }
  1292. }
  1293. /// -----------------------------------------------------------------------------
  1294. /// <summary>
  1295. /// The cmdUpdate_Click server event handler on this user control runs when the
  1296. /// Update button is clicked
  1297. /// </summary>
  1298. /// <param name="sender"></param>
  1299. /// <param name="e"></param>
  1300. /// <remarks>
  1301. /// </remarks>
  1302. /// <history>
  1303. /// [DYNST] 2/1/2004 Created
  1304. /// [Jon Henning] 11/1/2004 Updated to use ClientAPI/DNNTree
  1305. /// [Jon Henning] 4/21/2004 Rebind grid after update to reflect update - DNN-178
  1306. /// </history>
  1307. /// -----------------------------------------------------------------------------
  1308. private void cmdUpdate_Click(Object sender, EventArgs e)
  1309. {
  1310. var strFolderPath = PathUtils.Instance.StripFolderPath(LastFolderPath).Replace("\\", "/");
  1311. var objFolderInfo = FolderManager.Instance.GetFolder(FolderPortalID, strFolderPath);
  1312. if (objFolderInfo == null)
  1313. {
  1314. try
  1315. {
  1316. //file system needs synchronizing
  1317. //with database...this folder is new.
  1318. Synchronize();
  1319. objFolderInfo = FolderManager.Instance.GetFolder(FolderPortalID, strFolderPath);
  1320. }
  1321. catch (Exception ex)
  1322. {
  1323. DnnLog.Error(ex);
  1324. UI.Skins.Skin.AddModuleMessage(this, Localization.GetString("PermissionsError", LocalResourceFile), ModuleMessage.ModuleMessageType.RedError);
  1325. return;
  1326. }
  1327. }
  1328. objFolderInfo.FolderPermissions.Clear();
  1329. objFolderInfo.FolderPermissions.AddRange(dgPermissions.Permissions);
  1330. try
  1331. {
  1332. FolderPermissionController.SaveFolderPermissions((FolderInfo)objFolderInfo);
  1333. UI.Skins.Skin.AddModuleMessage(this, Localization.GetString("PermissionsUpdated", LocalResourceFile), ModuleMessage.ModuleMessageType.GreenSuccess);
  1334. }
  1335. catch (Exception ex)
  1336. {
  1337. Exceptions.LogException(ex);
  1338. UI.Skins.Skin.AddModuleMessage(this, Localization.GetString("PermissionsError", LocalResourceFile), ModuleMessage.ModuleMessageType.RedError);
  1339. }
  1340. GeneratePermissionsGrid(); //rebind the grid to reflect updated values - it is possible for the grid controls and the database to become out of sync
  1341. }
  1342. /// -----------------------------------------------------------------------------
  1343. /// <summary>
  1344. /// The dgFileList_ItemDataBound server event handler on this user control runs when a
  1345. /// File or Folder is added to the Files Table
  1346. /// </summary>
  1347. /// <param name="sender"></param>
  1348. /// <param name="e"></param>
  1349. /// <remarks>
  1350. /// </remarks>
  1351. /// <history>
  1352. /// [DYNST] 2/1/2004 Created
  1353. /// [Jon Henning] 11/1/2004 Updated to use ClientAPI/DNNTree
  1354. /// [cnurse] 12/3/2004 modified to handle folders and to use
  1355. /// custom images
  1356. /// </history>
  1357. /// -----------------------------------------------------------------------------
  1358. private void dgFileList_ItemDataBound(object sender, DataGridItemEventArgs e)
  1359. {
  1360. ImageButton lnkEditFile;
  1361. CheckBox chkFile;
  1362. ImageButton lnkDeleteFile;
  1363. Image lnkUnzip;
  1364. ImageButton lnkOkRename;
  1365. if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.EditItem || e.Item.ItemType == ListItemType.AlternatingItem || e.Item.ItemType == ListItemType.SelectedItem)
  1366. {
  1367. chkFile = (CheckBox) e.Item.FindControl("chkFile");
  1368. if (chkFile != null)
  1369. {
  1370. string sDefCssClass = dgFileList.ItemStyle.CssClass;
  1371. if (e.Item.ItemType == ListItemType.AlternatingItem)
  1372. {
  1373. sDefCssClass = dgFileList.AlternatingItemStyle.CssClass;
  1374. }
  1375. chkFile.Attributes.Add("onclick",
  1376. "addFileToMoveList('" + ClientAPI.GetSafeJSString(chkFile.Attributes["filename"]) + "', this, '" + dgFileList.SelectedItemStyle.CssClass + "', '" +
  1377. sDefCssClass + "');");
  1378. }
  1379. lnkEditFile = (ImageButton) e.Item.FindControl("lnkEditFile");
  1380. if (lnkEditFile != null)
  1381. {
  1382. lnkEditFile.CommandName = e.Item.ItemIndex.ToString();
  1383. }
  1384. lnkUnzip = (Image) e.Item.FindControl("lnkUnzip");
  1385. if (lnkUnzip != null)
  1386. {
  1387. if (lnkUnzip.Attributes["extension"] != "zip")
  1388. {
  1389. lnkUnzip.Visible = false;
  1390. }
  1391. else
  1392. {
  1393. if (e.Item.ItemType == ListItemType.EditItem)
  1394. {
  1395. lnkUnzip.Visible = false;
  1396. }
  1397. else
  1398. {
  1399. lnkUnzip.Attributes.Add("onclick", "return unzipFile('" + ClientAPI.GetSafeJSString(lnkUnzip.Attributes["filename"]) + "');");
  1400. }
  1401. }
  1402. }
  1403. lnkDeleteFile = (ImageButton) e.Item.FindControl("lnkDeleteFile");
  1404. if (lnkDeleteFile != null)
  1405. {
  1406. if (dgFileList.EditItemIndex == -1)
  1407. {
  1408. ClientAPI.AddButtonConfirm(lnkDeleteFile, string.Format(Localization.GetString("EnsureDeleteFile", LocalResourceFile), lnkDeleteFile.CommandName));
  1409. }
  1410. }
  1411. lnkOkRename = (ImageButton) e.Item.FindControl("lnkOkRename");
  1412. if (lnkOkRename != null)
  1413. {
  1414. lnkOkRename.CommandName = e.Item.ItemIndex.ToString();
  1415. }
  1416. if (Framework.AJAX.IsEnabled())
  1417. {
  1418. var lnkDLFile = (LinkButton) e.Item.FindControl("lnkDLFile");
  1419. if (lnkDLFile != null)
  1420. {
  1421. Framework.AJAX.RegisterPostBackControl(lnkDLFile);
  1422. }
  1423. if (lnkDeleteFile != null)
  1424. {
  1425. Framework.AJAX.RegisterPostBackControl(lnkDeleteFile);
  1426. }
  1427. if (lnkOkRename != null)
  1428. {
  1429. Framework.AJAX.RegisterPostBackControl(lnkOkRename);
  1430. }
  1431. }
  1432. }
  1433. }
  1434. /// -----------------------------------------------------------------------------
  1435. /// <summary>
  1436. /// The dgFileList_SortCommand server event handler on this user control runs when one
  1437. /// of the Column Header Links is clicked
  1438. /// </summary>
  1439. /// <param name="source"></param>
  1440. /// <param name="e"></param>
  1441. /// <remarks>
  1442. /// </remarks>
  1443. /// <history>
  1444. /// [cnurse] 01/12/2007 Created
  1445. /// </history>
  1446. /// -----------------------------------------------------------------------------
  1447. protected void dgFileList_SortCommand(object source, DataGridSortCommandEventArgs e)
  1448. {
  1449. BindFolderTree();
  1450. IsRefresh = true;
  1451. LastSort = Sort;
  1452. if (Sort.Replace(" ASC", "").Replace(" DESC", "") == e.SortExpression)
  1453. {
  1454. //Switch order
  1455. if (Sort.Contains("ASC"))
  1456. {
  1457. Sort = Sort.Replace("ASC", "DESC");
  1458. }
  1459. else
  1460. {
  1461. Sort = Sort.Replace("DESC", "ASC");
  1462. }
  1463. }
  1464. else
  1465. {
  1466. Sort = e.SortExpression + " ASC";
  1467. }
  1468. MoveStatus = "";
  1469. FilterFiles = "";
  1470. BindFileList();
  1471. }
  1472. /// -----------------------------------------------------------------------------
  1473. /// <summary>
  1474. /// The DNNTree_NodeClick server event handler on this user control runs when a
  1475. /// Node (Folder in the) in the TreeView is clicked
  1476. /// </summary>
  1477. /// <param name="source"></param>
  1478. /// <param name="e"></param>
  1479. /// <remarks>
  1480. /// </remarks>
  1481. /// <history>
  1482. /// [DYNST] 2/1/2004 Created
  1483. /// [Jon Henning] 11/1/2004 Updated to use ClientAPI/DNNTree
  1484. /// [cnurse] 12/3/2004 modified to handle folders and to use
  1485. /// custom images
  1486. /// </history>
  1487. /// -----------------------------------------------------------------------------
  1488. private void DNNTree_NodeClick(object source, DNNTreeNodeClickEventArgs e)
  1489. {
  1490. SetFolder(e.Node);
  1491. }
  1492. /// -----------------------------------------------------------------------------
  1493. /// <summary>
  1494. /// This method is called from the client to populate send new nodes down to the client
  1495. /// </summary>
  1496. /// <remarks>
  1497. /// </remarks>
  1498. /// <history>
  1499. /// [Jon Henning] 8/24/2005 Created
  1500. /// </history>
  1501. /// -----------------------------------------------------------------------------
  1502. private void DNNTree_PopulateOnDemand(object source, DNNTreeEventArgs e)
  1503. {
  1504. DestPath = e.Node.Key;
  1505. PopulateTree(e.Node.TreeNodes, UnMaskPath(e.Node.Key.Replace("\\\\", "\\")));
  1506. GeneratePermissionsGrid();
  1507. }
  1508. /// -----------------------------------------------------------------------------
  1509. /// <summary>
  1510. /// The lnkAddFolder_Command server event handler on this user control runs when the
  1511. /// Add Folder button is clicked
  1512. /// </summary>
  1513. /// <param name="sender"></param>
  1514. /// <param name="e"></param>
  1515. /// <remarks>
  1516. /// </remarks>
  1517. /// <history>
  1518. /// [DYNST] 2/1/2004 Created
  1519. /// [Jon Henning] 11/1/2004 Updated to use ClientAPI/DNNTree
  1520. /// </history>
  1521. /// -----------------------------------------------------------------------------
  1522. private void lnkAddFolder_Command(object sender, CommandEventArgs e)
  1523. {
  1524. if (String.IsNullOrEmpty(txtNewFolder.Text))
  1525. {
  1526. return;
  1527. }
  1528. var strSourcePath = UnMaskPath(DestPath);
  1529. try
  1530. {
  1531. if (DNNTree.TreeNodes[0].DNNNodes.Count == 0)
  1532. {
  1533. PopulateTree(DNNTree.TreeNodes[0].TreeNodes, RootFolderPath);
  1534. }
  1535. var colNodes = DNNTree.SelectedTreeNodes;
  1536. if (colNodes.Count > 0)
  1537. {
  1538. var parentNode = (DNNTreeNode) colNodes[1];
  1539. var filterFolderName = txtNewFolder.Text.Replace(".", "_");
  1540. var folderPath = PathUtils.Instance.FormatFolderPath(
  1541. PathUtils.Instance.FormatFolderPath(
  1542. PathUtils.Instance.StripFolderPath(DestPath).Replace("\\", "/")) + filterFolderName);
  1543. //Add Folder to Database
  1544. FolderManager.Instance.AddFolder(FolderMappingController.Instance.GetFolderMapping(int.Parse(ddlStorageLocation.SelectedValue)), folderPath);
  1545. DestPath = MaskPath(PathUtils.Instance.AddTrailingSlash(strSourcePath) + filterFolderName + "\\");
  1546. LastFolderPath = DestPath;
  1547. //Add new folder to folders tree
  1548. parentNode.Selected = false;
  1549. var imageIndex = FolderMappings.IndexOfKey(int.Parse(ddlStorageLocation.SelectedValue));
  1550. var objNode = AddNode(filterFolderName, parentNode.Key.Replace("\\\\", "\\") + filterFolderName + "\\", imageIndex, parentNode.TreeNodes);
  1551. objNode.HasNodes = false;
  1552. objNode.MakeNodeVisible();
  1553. objNode.Selected = true;
  1554. SetFolder(objNode);
  1555. }
  1556. }
  1557. catch (Exception ex)
  1558. {
  1559. DnnLog.Error(ex);
  1560. var strErrorMessage = MaskString(ex.Message);
  1561. ShowErrorMessage(strErrorMessage);
  1562. }
  1563. txtNewFolder.Text = "";
  1564. }
  1565. /// -----------------------------------------------------------------------------
  1566. /// <summary>
  1567. /// The lnkDeleteFolder_Command server event handler on this user control runs when the
  1568. /// Add Folder ibutton is clicked
  1569. /// </summary>
  1570. /// <param name="sender"></param>
  1571. /// <param name="e"></param>
  1572. /// <remarks>
  1573. /// </remarks>
  1574. /// <history>
  1575. /// [DYNST] 2/1/2004 Created
  1576. /// [Jon Henning] 11/1/2004 Updated to use ClientAPI/DNNTree
  1577. /// </history>
  1578. /// -----------------------------------------------------------------------------
  1579. private void lnkDeleteFolder_Command(object sender, CommandEventArgs e)
  1580. {
  1581. string strSourcePath;
  1582. var ctrlError = new LiteralControl();
  1583. if (DestPath == DNNTree.TreeNodes[0].Key)
  1584. {
  1585. //Delete Root Node? Then what? :/
  1586. ShowErrorMessage(Localization.GetString("NotAllowedToDeleteRootFolder", LocalResourceFile));
  1587. BindFileList();
  1588. return;
  1589. }
  1590. else
  1591. {
  1592. strSourcePath = UnMaskPath(DestPath);
  1593. }
  1594. var dinfo = new DirectoryInfo(strSourcePath);
  1595. if (dinfo.Exists == false)
  1596. {
  1597. //ODD...
  1598. ShowErrorMessage(Localization.GetString("FolderAlreadyRemoved", LocalResourceFile));
  1599. BindFileList();
  1600. return;
  1601. }
  1602. if ((Directory.GetDirectories(strSourcePath).Length > 0) || (dgFileList.Items.Count > 0))
  1603. {
  1604. //Files and/or folders exist in directory..
  1605. //Files in current folder, make them delete first
  1606. //Recursive Folder-delete can be enabled by adjusting this Sub
  1607. ShowErrorMessage(Localization.GetString("PleaseRemoveFilesBeforeDeleting", LocalResourceFile));
  1608. BindFileList();
  1609. return;
  1610. }
  1611. try
  1612. {
  1613. //Delete Folder
  1614. var folder = FolderManager.Instance.GetFolder(FolderPortalID, PathUtils.Instance.StripFolderPath(DestPath).Replace("\\", "/"));
  1615. FolderManager.Instance.DeleteFolder(folder);
  1616. if (DestPath.EndsWith("\\"))
  1617. {
  1618. DestPath = DestPath.Substring(0, DestPath.Length - 1);
  1619. }
  1620. var intEnd = DestPath.LastIndexOf("\\");
  1621. DestPath = DestPath.Substring(0, intEnd);
  1622. LastFolderPath = DestPath;
  1623. //since we removed folder, we will select parent folder
  1624. var colNodes = DNNTree.SelectedTreeNodes;
  1625. if (colNodes.Count > 0)
  1626. {
  1627. var objNode = (DNNTreeNode) colNodes[1];
  1628. objNode.Selected = false;
  1629. objNode.Parent.Selected = true;
  1630. objNode.Parent.DNNNodes.Remove(objNode);
  1631. }
  1632. BindFileList();
  1633. GeneratePermissionsGrid();
  1634. }
  1635. catch (Exception ex)
  1636. {
  1637. DnnLog.Error(ex);
  1638. ShowErrorMessage(Localization.GetString("ErrorDeletingFolder", LocalResourceFile) + ex.Message);
  1639. }
  1640. }
  1641. /// -----------------------------------------------------------------------------
  1642. /// <summary>
  1643. /// The lnkDLFile_Command server event handler on this user control runs when the
  1644. /// Download File button is clicked
  1645. /// </summary>
  1646. /// <param name="sender"></param>
  1647. /// <param name="e"></param>
  1648. /// <remarks>
  1649. /// The method calls the FileSystemUtils DownLoad method
  1650. /// </remarks>
  1651. /// <history>
  1652. /// [DYNST] 2/1/2004 Created
  1653. /// [Jon Henning] 11/1/2004 Updated to use ClientAPI/DNNTree
  1654. /// </history>
  1655. /// -----------------------------------------------------------------------------
  1656. protected void lnkDLFile_Command(object sender, CommandEventArgs e)
  1657. {
  1658. var fileManager = Services.FileSystem.FileManager.Instance;
  1659. var file = fileManager.GetFile(Convert.ToInt32(e.CommandArgument));
  1660. try
  1661. {
  1662. fileManager.WriteFileToResponse(file, ContentDisposition.Inline);
  1663. }
  1664. catch (Exception ex)
  1665. {
  1666. DnnLog.Error(ex);
  1667. var strErrorMessage = Localization.GetString("ErrorDownloadingFile", LocalResourceFile) +
  1668. PathUtils.Instance.AddTrailingSlash(UnMaskPath(DestPath)) +
  1669. file.FileName +
  1670. "<br/>&nbsp;&nbsp;&nbsp;" + ex.Message + "<br/>";
  1671. strErrorMessage = MaskString(strErrorMessage);
  1672. ShowErrorMessage(strErrorMessage);
  1673. }
  1674. BindFolderTree();
  1675. }
  1676. /// -----------------------------------------------------------------------------
  1677. /// <summary>
  1678. /// The lnkEditFile_Command server event handler on this user control runs when the
  1679. /// Edit File button is clicked
  1680. /// </summary>
  1681. /// <param name="sender"></param>
  1682. /// <param name="e"></param>
  1683. /// <remarks>
  1684. /// The DataGrid is switched to Edit Mode
  1685. /// </remarks>
  1686. /// <history>
  1687. /// [DYNST] 2/1/2004 Created
  1688. /// [Jon Henning] 11/1/2004 Updated to use ClientAPI/DNNTree
  1689. /// </history>
  1690. /// -----------------------------------------------------------------------------
  1691. protected void lnkEditFile_Command(object sender, CommandEventArgs e)
  1692. {
  1693. dgFileList.EditItemIndex = Convert.ToInt32(e.CommandName);
  1694. BindFileList();
  1695. SetEditMode();
  1696. }
  1697. /// -----------------------------------------------------------------------------
  1698. /// <summary>
  1699. /// The lnkCancelRename_Command server event handler on this user control runs when the
  1700. /// Cancel Edit button is clicked when in Edit Mode
  1701. /// </summary>
  1702. /// <param name="sender"></param>
  1703. /// <param name="e"></param>
  1704. /// <remarks>
  1705. /// </remarks>
  1706. /// <history>
  1707. /// [DYNST] 2/1/2004 Created
  1708. /// [Jon Henning] 11/1/2004 Updated to use ClientAPI/DNNTree
  1709. /// </history>
  1710. /// -----------------------------------------------------------------------------
  1711. protected void lnkCancelRename_Command(object sender, CommandEventArgs e)
  1712. {
  1713. dgFileList.EditItemIndex = -1;
  1714. BindFileList();
  1715. SetEditMode();
  1716. }
  1717. /// -----------------------------------------------------------------------------
  1718. /// <summary>
  1719. /// The lnkDeleteAllCheckedFiles_Command server event handler on this user control runs when the
  1720. /// Javascript in the page triggers the event
  1721. /// </summary>
  1722. /// <param name="sender"></param>
  1723. /// <param name="e"></param>
  1724. /// <remarks>
  1725. /// </remarks>
  1726. /// <history>
  1727. /// [DYNST] 2/1/2004 Created
  1728. /// [Jon Henning] 11/1/2004 Updated to use ClientAPI/DNNTree
  1729. /// </history>
  1730. /// -----------------------------------------------------------------------------
  1731. private void lnkDeleteAllCheckedFiles_Command(object sender, CommandEventArgs e)
  1732. {
  1733. if (!String.IsNullOrEmpty(MoveFiles))
  1734. {
  1735. DeleteFiles(MoveFiles);
  1736. }
  1737. }
  1738. /// -----------------------------------------------------------------------------
  1739. /// <summary>
  1740. /// The lnkDeleteFile_Command server event handler on this user control runs when the
  1741. /// Javascript in the page triggers the event
  1742. /// </summary>
  1743. /// <param name="sender"></param>
  1744. /// <param name="e"></param>
  1745. /// <remarks>
  1746. /// </remarks>
  1747. /// <history>
  1748. /// [DYNST] 2/1/2004 Created
  1749. /// [Jon Henning] 11/1/2004 Updated to use ClientAPI/DNNTree
  1750. /// </history>
  1751. /// -----------------------------------------------------------------------------
  1752. protected void lnkDeleteFile_Command(object sender, CommandEventArgs e)
  1753. {
  1754. DeleteFiles(e.CommandName);
  1755. }
  1756. /// -----------------------------------------------------------------------------
  1757. /// <summary>
  1758. /// The lnkFilter_Command server event handler on this user control runs when the
  1759. /// Filter Files button is clicked.
  1760. /// </summary>
  1761. /// <param name="sender"></param>
  1762. /// <param name="e"></param>
  1763. /// <remarks>
  1764. /// The method calls the relevant FileSystemUtils method
  1765. /// </remarks>
  1766. /// <history>
  1767. /// [DYNST] 2/1/2004 Created
  1768. /// [Jon Henning] 11/1/2004 Updated to use ClientAPI/DNNTree
  1769. /// </history>
  1770. /// -----------------------------------------------------------------------------
  1771. private void lnkFilter_Command(object sender, CommandEventArgs e)
  1772. {
  1773. dgFileList.CurrentPageIndex = 0;
  1774. BindFileList();
  1775. }
  1776. /// -----------------------------------------------------------------------------
  1777. /// <summary>
  1778. /// The lnkMoveFiles_Command server event handler on this user control runs when the
  1779. /// Move Files button is clicked.
  1780. /// </summary>
  1781. /// <param name="sender"></param>
  1782. /// <param name="e"></param>
  1783. /// <remarks>
  1784. /// The method calls the relevant FileSystemUtils method
  1785. /// </remarks>
  1786. /// <history>
  1787. /// [DYNST] 2/1/2004 Created
  1788. /// [Jon Henning] 11/1/2004 Updated to use ClientAPI/DNNTree
  1789. /// </history>
  1790. /// -----------------------------------------------------------------------------
  1791. private void lnkMoveFiles_Command(object sender, CommandEventArgs e)
  1792. {
  1793. var arFiles = MoveFiles.Split(';');
  1794. var strErrorMessages = "";
  1795. //Check that the user has write permssion on the dest folder
  1796. if (!HasPermission("ADD"))
  1797. {
  1798. strErrorMessages = Localization.GetString("NoWritePermission", LocalResourceFile);
  1799. }
  1800. else
  1801. {
  1802. var sourceFolder = FolderManager.Instance.GetFolder(FolderPortalID, UnMaskPath(SourcePath).Replace(RootFolderPath, "").Replace("\\", "/"));
  1803. var destinationFolder = FolderManager.Instance.GetFolder(FolderPortalID, UnMaskPath(DestPath).Replace(RootFolderPath, "").Replace("\\", "/"));
  1804. IFileInfo sourceFile;
  1805. for (var i = 0; i <= arFiles.Length - 1; i++)
  1806. {
  1807. if (!String.IsNullOrEmpty(arFiles[i]))
  1808. {
  1809. sourceFile = Services.FileSystem.FileManager.Instance.GetFile(sourceFolder, arFiles[i]);
  1810. try
  1811. {
  1812. switch (MoveStatus)
  1813. {
  1814. case "copy":
  1815. Services.FileSystem.FileManager.Instance.CopyFile(sourceFile, destinationFolder);
  1816. break;
  1817. case "move":
  1818. Services.FileSystem.FileManager.Instance.MoveFile(sourceFile, destinationFolder);
  1819. break;
  1820. case "unzip":
  1821. Services.FileSystem.FileManager.Instance.UnzipFile(sourceFile, destinationFolder);
  1822. BindFolderTree();
  1823. break;
  1824. }
  1825. }
  1826. catch (Exception ex)
  1827. {
  1828. //Unmask paths here, remask with title before showining error message
  1829. DnnLog.Error(ex);
  1830. if (MoveStatus == "copy")
  1831. {
  1832. strErrorMessages += Localization.GetString("ErrorCopyingFile", LocalResourceFile) +
  1833. PathUtils.Instance.AddTrailingSlash(UnMaskPath(SourcePath)) +
  1834. arFiles[i] + "&nbsp;&nbsp; to " + PathUtils.Instance.AddTrailingSlash(UnMaskPath(DestPath)) +
  1835. "<br />&nbsp;&nbsp;&nbsp;" + ex.Message + "<br />";
  1836. }
  1837. else
  1838. {
  1839. strErrorMessages += Localization.GetString("ErrorMovingFile", LocalResourceFile) +
  1840. PathUtils.Instance.AddTrailingSlash(UnMaskPath(SourcePath)) +
  1841. arFiles[i] + "&nbsp;&nbsp; to " + PathUtils.Instance.AddTrailingSlash(UnMaskPath(DestPath)) +
  1842. "<br />&nbsp;&nbsp;&nbsp;" + ex.Message + "<br />";
  1843. }
  1844. }
  1845. }
  1846. }
  1847. //reload page to make treeview update.
  1848. Response.Redirect(Globals.NavigateURL(), true);
  1849. }
  1850. if (String.IsNullOrEmpty(strErrorMessages))
  1851. {
  1852. LastPath = PathUtils.Instance.RemoveTrailingSlash(DestPath);
  1853. }
  1854. else
  1855. {
  1856. strErrorMessages = MaskString(strErrorMessages);
  1857. strErrorMessages = MaskString(strErrorMessages);
  1858. ShowErrorMessage(strErrorMessages);
  1859. }
  1860. ManageSecurity();
  1861. BindFileList();
  1862. MoveStatus = "";
  1863. SourcePath = "";
  1864. }
  1865. /// -----------------------------------------------------------------------------
  1866. /// <summary>
  1867. /// The lnkMoveFirst_Command server event handler on this user control runs when the
  1868. /// Move First Page button is clicked.
  1869. /// </summary>
  1870. /// <param name="sender"></param>
  1871. /// <param name="e"></param>
  1872. /// <remarks>
  1873. /// The method calls the relevant FileSystemUtils method
  1874. /// </remarks>
  1875. /// <history>
  1876. /// [DYNST] 2/1/2004 Created
  1877. /// [Jon Henning] 11/1/2004 Updated to use ClientAPI/DNNTree
  1878. /// </history>
  1879. /// -----------------------------------------------------------------------------
  1880. protected void lnkMoveFirst_Command(object sender, CommandEventArgs e)
  1881. {
  1882. PageIndex = 0;
  1883. BindFileList();
  1884. }
  1885. /// -----------------------------------------------------------------------------
  1886. /// <summary>
  1887. /// The lnkMoveLast_Command server event handler on this user control runs when the
  1888. /// Move Last Page button is clicked.
  1889. /// </summary>
  1890. /// <param name="sender"></param>
  1891. /// <param name="e"></param>
  1892. /// <remarks>
  1893. /// The method calls the relevant FileSystemUtils method
  1894. /// </remarks>
  1895. /// <history>
  1896. /// [DYNST] 2/1/2004 Created
  1897. /// [Jon Henning] 11/1/2004 Updated to use ClientAPI/DNNTree
  1898. /// </history>
  1899. /// -----------------------------------------------------------------------------
  1900. protected void lnkMoveLast_Command(object sender, CommandEventArgs e)
  1901. {
  1902. PageIndex = dgFileList.PageCount - 1;
  1903. BindFileList();
  1904. }
  1905. /// -----------------------------------------------------------------------------
  1906. /// <summary>
  1907. /// The lnkMoveNext_Command server event handler on this user control runs when the
  1908. /// Move Next Page button is clicked.
  1909. /// </summary>
  1910. /// <param name="sender"></param>
  1911. /// <param name="e"></param>
  1912. /// <remarks>
  1913. /// The method calls the relevant FileSystemUtils method
  1914. /// </remarks>
  1915. /// <history>
  1916. /// [DYNST] 2/1/2004 Created
  1917. /// [Jon Henning] 11/1/2004 Updated to use ClientAPI/DNNTree
  1918. /// </history>
  1919. /// -----------------------------------------------------------------------------
  1920. protected void lnkMoveNext_Command(object sender, CommandEventArgs e)
  1921. {
  1922. PageIndex += 1;
  1923. if (PageIndex > dgFileList.PageCount - 1)
  1924. {
  1925. PageIndex = dgFileList.PageCount - 1;
  1926. }
  1927. BindFileList();
  1928. }
  1929. /// -----------------------------------------------------------------------------
  1930. /// <summary>
  1931. /// The lnkMoveNext_Command server event handler on this user control runs when the
  1932. /// Move Previous Page button is clicked.
  1933. /// </summary>
  1934. /// <param name="sender"></param>
  1935. /// <param name="e"></param>
  1936. /// <remarks>
  1937. /// The method calls the relevant FileSystemUtils method
  1938. /// </remarks>
  1939. /// <history>
  1940. /// [DYNST] 2/1/2004 Created
  1941. /// [Jon Henning] 11/1/2004 Updated to use ClientAPI/DNNTree
  1942. /// </history>
  1943. /// -----------------------------------------------------------------------------
  1944. protected void lnkMovePrevious_Command(object sender, CommandEventArgs e)
  1945. {
  1946. PageIndex -= 1;
  1947. if (PageIndex < 0)
  1948. {
  1949. PageIndex = 0;
  1950. }
  1951. BindFileList();
  1952. }
  1953. /// -----------------------------------------------------------------------------
  1954. /// <summary>
  1955. /// The lnkOkRename_Command server event handler on this user control runs when the
  1956. /// Save Changes (Ok) button is clicked when in Edit Mode
  1957. /// </summary>
  1958. /// <param name="sender"></param>
  1959. /// <param name="e"></param>
  1960. /// <remarks>
  1961. /// </remarks>
  1962. /// <history>
  1963. /// [DYNST] 2/1/2004 Created
  1964. /// [Jon Henning] 11/1/2004 Updated to use ClientAPI/DNNTree
  1965. /// </history>
  1966. /// -----------------------------------------------------------------------------
  1967. protected void lnkOkRename_Command(object sender, CommandEventArgs e)
  1968. {
  1969. var strSourcePath = PathUtils.Instance.AddTrailingSlash(UnMaskPath(DestPath));
  1970. var intItemID = Convert.ToInt32(e.CommandName);
  1971. var strFileName = e.CommandArgument.ToString();
  1972. var txtEdit = (TextBox)dgFileList.Items[intItemID].FindControl("txtEditFileName");
  1973. var strSourceFile = strSourcePath + e.CommandArgument;
  1974. var strDestFile = strSourcePath + txtEdit.Text;
  1975. var strError = "";
  1976. var sourceFolder = FolderManager.Instance.GetFolder(FolderPortalID, UnMaskPath(DestPath).Replace(RootFolderPath, "").Replace("\\", "/"));
  1977. var file = Services.FileSystem.FileManager.Instance.GetFile(sourceFolder, strFileName);
  1978. if (strSourceFile != strDestFile)
  1979. {
  1980. //move(rename) file
  1981. try
  1982. {
  1983. Services.FileSystem.FileManager.Instance.RenameFile(file, txtEdit.Text);
  1984. }
  1985. catch (Exception ex)
  1986. {
  1987. DnnLog.Error(ex);
  1988. strError = ex.Message;
  1989. }
  1990. if (!String.IsNullOrEmpty(strError))
  1991. {
  1992. strError = Localization.GetString("Rename.Error", LocalResourceFile) + strError;
  1993. }
  1994. else
  1995. {
  1996. strSourceFile = strDestFile;
  1997. }
  1998. }
  1999. if (String.IsNullOrEmpty(strError))
  2000. {
  2001. var chkReadOnly = (CheckBox) dgFileList.Items[intItemID].FindControl("chkReadOnly");
  2002. var chkHidden = (CheckBox) dgFileList.Items[intItemID].FindControl("chkHidden");
  2003. var chkSystem = (CheckBox) dgFileList.Items[intItemID].FindControl("chkSystem");
  2004. var chkArchive = (CheckBox) dgFileList.Items[intItemID].FindControl("chkArchive");
  2005. if ((chkReadOnly.Attributes["original"] != chkReadOnly.Checked.ToString()) || (chkHidden.Attributes["original"] != chkHidden.Checked.ToString()) ||
  2006. (chkSystem.Attributes["original"] != chkSystem.Checked.ToString()) || (chkArchive.Attributes["original"] != chkArchive.Checked.ToString()))
  2007. {
  2008. //attributes were changed
  2009. int iAttr = 0;
  2010. if (chkReadOnly.Checked)
  2011. {
  2012. iAttr += (int) FileAttributes.ReadOnly;
  2013. }
  2014. if (chkHidden.Checked)
  2015. {
  2016. iAttr += (int) FileAttributes.Hidden;
  2017. }
  2018. if (chkSystem.Checked)
  2019. {
  2020. iAttr += (int) FileAttributes.System;
  2021. }
  2022. if (chkArchive.Checked)
  2023. {
  2024. iAttr += (int) FileAttributes.Archive;
  2025. }
  2026. try
  2027. {
  2028. Services.FileSystem.FileManager.Instance.SetAttributes(file, (FileAttributes)iAttr);
  2029. }
  2030. catch (Exception ex)
  2031. {
  2032. DnnLog.Error(ex);
  2033. strError = ex.Message;
  2034. }
  2035. if (!String.IsNullOrEmpty(strError))
  2036. {
  2037. strError = Localization.GetString("SetAttrubute.Error", LocalResourceFile) + strError;
  2038. }
  2039. }
  2040. }
  2041. if (!String.IsNullOrEmpty(strError))
  2042. {
  2043. ShowErrorMessage(MaskString(strError));
  2044. }
  2045. dgFileList.EditItemIndex = -1;
  2046. BindFileList();
  2047. SetEditMode();
  2048. }
  2049. /// -----------------------------------------------------------------------------
  2050. /// <summary>
  2051. /// The lnkRefresh_Command server event handler on this user control runs when the
  2052. /// Refresh button is clicked.
  2053. /// </summary>
  2054. /// <param name="sender"></param>
  2055. /// <param name="e"></param>
  2056. /// <remarks>
  2057. /// </remarks>
  2058. /// <history>
  2059. /// [DYNST] 2/1/2004 Created
  2060. /// [Jon Henning] 11/1/2004 Updated to use ClientAPI/DNNTree
  2061. /// </history>
  2062. /// -----------------------------------------------------------------------------
  2063. private void lnkRefresh_Command(object sender, CommandEventArgs e)
  2064. {
  2065. BindFolderTree();
  2066. IsRefresh = true;
  2067. Sort = "FileType ASC, FileName ASC";
  2068. LastSort = "FileType ASC, FileName ASC";
  2069. MoveStatus = "";
  2070. FilterFiles = "";
  2071. BindFileList();
  2072. }
  2073. /// -----------------------------------------------------------------------------
  2074. /// <summary>
  2075. /// The lnkSelectFolder_Command server event handler on this user control runs when a
  2076. /// Folder is selected.
  2077. /// </summary>
  2078. /// <param name="sender"></param>
  2079. /// <param name="e"></param>
  2080. /// <remarks>
  2081. /// </remarks>
  2082. /// <history>
  2083. /// [DYNST] 2/1/2004 Created
  2084. /// [Jon Henning] 11/1/2004 Updated to use ClientAPI/DNNTree
  2085. /// </history>
  2086. /// -----------------------------------------------------------------------------
  2087. private void lnkSelectFolder_Command(object sender, CommandEventArgs e)
  2088. {
  2089. string strSourcePath = DestPath;
  2090. string strFriendlyPath = Regex.Replace(strSourcePath, "^0\\\\", "Portal Root\\");
  2091. dgFileList.CurrentPageIndex = 0;
  2092. ClientAPI.AddButtonConfirm(lnkDeleteFolder, string.Format(Localization.GetString("EnsureDeleteFolder", LocalResourceFile), strFriendlyPath));
  2093. strSourcePath = UnMaskPath(strSourcePath.Replace("\\\\", "\\"));
  2094. LastPath = strSourcePath;
  2095. GetFilesByFolder(PathUtils.Instance.AddTrailingSlash(strSourcePath));
  2096. }
  2097. /// -----------------------------------------------------------------------------
  2098. /// <summary>
  2099. /// The lnkSyncFolder_Command server event handler on this user control runs when the
  2100. /// Synchronize Folder button is clicked.
  2101. /// </summary>
  2102. /// <param name="sender"></param>
  2103. /// <param name="e"></param>
  2104. /// <remarks>
  2105. /// </remarks>
  2106. /// <history>
  2107. /// [cnurse] 04/24/2006 Created
  2108. /// </history>
  2109. /// -----------------------------------------------------------------------------
  2110. private void lnkSyncFolder_Command(object sender, CommandEventArgs e)
  2111. {
  2112. var syncFolderPath = UnMaskPath(DestPath);
  2113. var isRecursive = chkRecursive.Checked;
  2114. var relPath = syncFolderPath.Replace(RootFolderPath, "").Replace("\\", "/");
  2115. try
  2116. {
  2117. FolderManager.Instance.Synchronize(FolderPortalID, relPath, isRecursive, true);
  2118. }
  2119. catch (Exception ex)
  2120. {
  2121. DnnLog.Error(ex);
  2122. var strErrorMessage = Localization.GetString("ErrorSynchronizingFolder", LocalResourceFile) +
  2123. PathUtils.Instance.AddTrailingSlash(UnMaskPath(DestPath)) +
  2124. "<br/>&nbsp;&nbsp;&nbsp;" + ex.Message + "<br/>";
  2125. strErrorMessage = MaskString(strErrorMessage);
  2126. ShowErrorMessage(strErrorMessage);
  2127. BindFolderTree();
  2128. }
  2129. //reload page to make treeview update.
  2130. Response.Redirect(Globals.NavigateURL(), true);
  2131. }
  2132. /// -----------------------------------------------------------------------------
  2133. /// <summary>
  2134. /// The lnkSyncFolders_Click server event handler on this user control runs when the
  2135. /// Synchronize Folders button is clicked.
  2136. /// </summary>
  2137. /// <param name="sender"></param>
  2138. /// <param name="e"></param>
  2139. /// <remarks>
  2140. /// </remarks>
  2141. /// <history>
  2142. /// </history>
  2143. /// -----------------------------------------------------------------------------
  2144. protected void lnkSyncFolders_Click(object sender, ImageClickEventArgs e)
  2145. {
  2146. try
  2147. {
  2148. FolderManager.Instance.Synchronize(IsHostMenu ? Null.NullInteger : PortalId, "", true, false);
  2149. //reload page to make treeview update.
  2150. Response.Redirect(Globals.NavigateURL(), true);
  2151. }
  2152. catch(ThreadAbortException)
  2153. {
  2154. //ignore ThreadAbortException because its caught by Redirect.
  2155. }
  2156. catch (Exception ex)
  2157. {
  2158. DnnLog.Error(ex);
  2159. var strErrorMessage = Localization.GetString("ErrorSynchronizingFolders", LocalResourceFile) +
  2160. "<br/>&nbsp;&nbsp;&nbsp;" + ex.Message + "<br/>";
  2161. strErrorMessage = MaskString(strErrorMessage);
  2162. ShowErrorMessage(strErrorMessage);
  2163. }
  2164. BindFolderTree();
  2165. }
  2166. /// -----------------------------------------------------------------------------
  2167. /// <summary>
  2168. /// The lnkUpload_Command server event handler on this user control runs when the
  2169. /// Upload button is clicked
  2170. /// </summary>
  2171. /// <param name="sender"></param>
  2172. /// <param name="e"></param>
  2173. /// <remarks>
  2174. /// </remarks>
  2175. /// <history>
  2176. /// [DYNST] 2/1/2004 Created
  2177. /// [Jon Henning] 11/1/2004 Updated to use ClientAPI/DNNTree
  2178. /// </history>
  2179. /// -----------------------------------------------------------------------------
  2180. private void lnkUpload_Command(object sender, CommandEventArgs e)
  2181. {
  2182. string strDestPath = Regex.Replace(DestPath, "^0\\\\", "");
  2183. string WebUploadParam = "ftype=" + UploadType.File;
  2184. string returnTab = "rtab=" + TabId;
  2185. var parameters = new string[3 + ((String.IsNullOrEmpty(strDestPath)) ? 0: 1)];
  2186. parameters[0] = "mid=" + ModuleId.ToString();
  2187. parameters[1] = WebUploadParam;
  2188. parameters[2] = returnTab;
  2189. if (!String.IsNullOrEmpty(strDestPath))
  2190. {
  2191. parameters[3] = "dest=" + Globals.QueryStringEncode(strDestPath);
  2192. }
  2193. string destUrl = Globals.NavigateURL(TabId, "Edit", parameters);
  2194. Response.Redirect(destUrl);
  2195. }
  2196. /// -----------------------------------------------------------------------------
  2197. /// <summary>
  2198. /// The selPageSize_SelectedIndexChanged server event handler on this user control
  2199. /// runs when the Page Size combo's index/value is changed
  2200. /// </summary>
  2201. /// <param name="sender"></param>
  2202. /// <param name="e"></param>
  2203. /// <remarks>
  2204. /// </remarks>
  2205. /// <history>
  2206. /// [DYNST] 2/1/2004 Created
  2207. /// [Jon Henning] 11/1/2004 Updated to use ClientAPI/DNNTree
  2208. /// </history>
  2209. /// -----------------------------------------------------------------------------
  2210. private void selPageSize_SelectedIndexChanged(Object sender, EventArgs e)
  2211. {
  2212. PageIndex = 0;
  2213. BindFileList();
  2214. }
  2215. #endregion
  2216. #region Nested type: eImageType
  2217. private enum eImageType
  2218. {
  2219. Folder = 0,
  2220. SecureFolder = 1,
  2221. DatabaseFolder = 2,
  2222. Page = 3
  2223. }
  2224. #endregion
  2225. public ModuleActionCollection ModuleActions
  2226. {
  2227. get
  2228. {
  2229. var Actions = new ModuleActionCollection();
  2230. if (FolderProvider.GetProviderList().Count > 3)
  2231. {
  2232. Actions.Add(GetNextActionID(),
  2233. Localization.GetString("ManageFolderTypes.Action", LocalResourceFile),
  2234. ModuleActionType.EditContent,
  2235. "",
  2236. "icon_profile_16px.gif",
  2237. EditUrl("FolderMappings"),
  2238. false,
  2239. SecurityAccessLevel.Edit,
  2240. true,
  2241. false);
  2242. }
  2243. return Actions;
  2244. }
  2245. }
  2246. public string RaiseClientAPICallbackEvent(string eventArgument)
  2247. {
  2248. if(string.IsNullOrEmpty(eventArgument))
  2249. {
  2250. return string.Empty;
  2251. }
  2252. var args = eventArgument.Split(new string[] {ClientAPI.COLUMN_DELIMITER}, StringSplitOptions.None);
  2253. var parameters = new NameValueCollection(args.Length - 1);
  2254. if(args.Length > 1 && (args.Length - 1) % 2 == 0)
  2255. {
  2256. for(var i = 1; i < args.Length; i += 2)
  2257. {
  2258. parameters.Add(args[i], args[i + 1]);
  2259. }
  2260. }
  2261. switch (args[0].ToLowerInvariant())
  2262. {
  2263. case "getfiles":
  2264. var files = string.Empty;
  2265. var folder = FolderManager.Instance.GetFolder(FolderPortalID,
  2266. UnMaskPath(parameters["folder"]).Replace(RootFolderPath, "").Replace("\\", "/"));
  2267. if (folder != null)
  2268. {
  2269. files = String.Join(";",
  2270. (from f in FolderManager.Instance.GetFiles(folder) select f.FileName).ToArray());
  2271. }
  2272. return string.Format("{0}(\"{1}\", \"{2}\")", parameters["callback"], parameters["folder"].Replace("\\", "\\\\"), files);
  2273. }
  2274. return string.Empty;
  2275. }
  2276. }
  2277. }