using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Microsoft.SharePoint.Client;
using System.Text;
using System.Net;
namespace DisclaimerWeb
{
public class DisclaimerCustomAction
{
private ClientContext context;
private Site siteCollection;
private string disclaimerFileLocation = string.Empty;
private string disclaimerFileName = "DisclaimerScript.js";
private string SiteCollectionUrl = string.Empty;
private string jQueryFileName = "jquery-1.7.2.min.js";
public string Message { get;private set; }
public DisclaimerCustomAction(ClientContext ctx, string siteCollectionUrl)
{
this.context = ctx;
this.SiteCollectionUrl = siteCollectionUrl;
}
/// <summary>
/// Download file from sysconfig site and Upload it to style Library.
/// </summary>
/// <returns></returns>
public bool Upload()
{
bool returnVal = false;
string ServerRelativeUrl=string.Empty;
try
{
siteCollection = context.Site;
var listCol = context.LoadQuery(siteCollection.RootWeb.Lists.Where(lists => lists.Title == "Style Library"));
context.Load(siteCollection, sc => sc.RootWeb.ServerRelativeUrl);
context.ExecuteQuery();
ServerRelativeUrl = siteCollection.RootWeb.ServerRelativeUrl;
List styleLib = listCol.FirstOrDefault();
if (styleLib != null)
{
File disclaimerJSFile = siteCollection.RootWeb.GetFileByServerRelativeUrl(string.Format("{0}/Style Library/{1}",ServerRelativeUrl.TrimEnd('/'), disclaimerFileName));
File JqueryFile = siteCollection.RootWeb.GetFileByServerRelativeUrl(string.Format("{0}/Style Library/{1}",ServerRelativeUrl.TrimEnd('/'), jQueryFileName));
context.Load(disclaimerJSFile, f => f.CheckOutType, f => f.Exists);
try
{
context.ExecuteQuery();
if (disclaimerJSFile.Exists && disclaimerJSFile.CheckOutType == CheckOutType.None)
{
disclaimerJSFile.CheckOut();
context.ExecuteQuery();
Message += "File is CheckedOut :" + ServerRelativeUrl;
}
}
catch (ServerException e)
{
if (e.ServerErrorTypeName != "System.IO.FileNotFoundException")
{
Message += e.Message;
return returnVal;
}
}
context.Load(JqueryFile, jf => jf.Exists);
context.ExecuteQuery();
if (!JqueryFile.Exists)
{
var Jquerycontent = DownloadFile(BuildUrlforDownlaod(SiteCollectionUrl, jQueryFileName));
JqueryFile = styleLib.RootFolder.Files.Add(new FileCreationInformation()
{
Content = Encoding.UTF8.GetBytes(Jquerycontent),
Url = jQueryFileName,
Overwrite = true
});
JqueryFile.CheckIn(string.Empty, CheckinType.MajorCheckIn);
}
var filecontent = DownloadFile(BuildUrlforDownlaod(SiteCollectionUrl, disclaimerFileName));
disclaimerJSFile = styleLib.RootFolder.Files.Add(new FileCreationInformation()
{
Content = Encoding.UTF8.GetBytes(filecontent),
Url = disclaimerFileName,
Overwrite = true
});
disclaimerJSFile.CheckIn(string.Empty, CheckinType.MajorCheckIn);
context.ExecuteQuery();
Message += "File Uploaded to Style Library";
returnVal = true;
}
else
{
Message += "Style Library Not Found .";
return returnVal;
}
}
catch (Exception e)
{
Message += e.Message;
return returnVal;
}
return returnVal;
}
/// <summary>
/// Download file from Sysconfig StyleLibrary.
/// </summary>
/// <param name="url"></param>
/// <returns></returns>
private string DownloadFile(string url)
{
string returnFile = string.Empty;
HttpWebRequest request = HttpWebRequest.Create(url) as HttpWebRequest;
request.Credentials = CredentialCache.DefaultNetworkCredentials;
using (var sr = new System.IO.StreamReader(request.GetResponse().GetResponseStream()))
{
returnFile = sr.ReadToEnd();
}
return returnFile;
}
/// <summary>
/// Create CustomAction on SiteCollection
/// </summary>
public void CreateCustomAction()
{
UserCustomAction JqueryCA = context.Site.UserCustomActions.Add();
JqueryCA.Location = "ScriptLink";
JqueryCA.ScriptSrc = string.Format("~SiteCollection/Style Library/jquery-1.7.2.min.js");
JqueryCA.Sequence = 1000;
JqueryCA.Name = "JQuery";
JqueryCA.Update();
context.ExecuteQuery();
UserCustomAction DisclaimerCA = context.Site.UserCustomActions.Add();
DisclaimerCA.Location = "ScriptLink";
DisclaimerCA.ScriptSrc = string.Format("~SiteCollection/Style Library/{0}",disclaimerFileName);
DisclaimerCA.Name = "DisclaimerCustomAction";
DisclaimerCA.Sequence = 1001;
DisclaimerCA.Update();
context.ExecuteQuery();
Message += "Disclaimer Added Successfully";
}
private string BuildUrlforDownlaod(string url,string fileName)
{
url = url.TrimEnd('/');
string splitSiteName = url.Substring(0, url.LastIndexOf('/'));
string styleLibary = "/sysconfigsettings/Style%20Library/";
return splitSiteName + styleLibary + fileName;
}
}
}This code snippet explains how can you add a disclaimer using user Custom Action.
