public HttpResponseMessage UpdateTheme(UpdateThemeInfo updateTheme) { try { var token = SkinControlController.GetSkinControls().Values.FirstOrDefault(t => t.ControlSrc == updateTheme.Token); if (token == null) { return(this.Request.CreateErrorResponse(HttpStatusCode.BadRequest, "InvalidParameter")); } var themeFilePath = updateTheme.Path.ToLowerInvariant(); if ((!themeFilePath.StartsWith("[g]") && !themeFilePath.StartsWith("[l]") && !themeFilePath.StartsWith("[s]")) || (themeFilePath.StartsWith("[g]") && !this.UserInfo.IsSuperUser)) { return(this.Request.CreateErrorResponse(HttpStatusCode.BadRequest, "InvalidPermission")); } updateTheme.Token = token.ControlKey; this._controller.UpdateTheme(this.PortalSettings, updateTheme); return(this.Request.CreateResponse(HttpStatusCode.OK, new { })); } catch (Exception ex) { Logger.Error(ex); return(this.Request.CreateErrorResponse(HttpStatusCode.InternalServerError, ex.Message)); } }
/// <summary> /// Update Theme Attributes. /// </summary> /// <param name="portalSettings"></param> /// <param name="updateTheme"></param> public void UpdateTheme(PortalSettings portalSettings, UpdateThemeInfo updateTheme) { var themePath = SkinController.FormatSkinSrc(updateTheme.Path + ".ascx", portalSettings); themePath = Path.Combine(Globals.ApplicationMapPath, themePath.TrimStart('/')); var objStreamReader = File.OpenText(themePath); var strSkin = objStreamReader.ReadToEnd(); objStreamReader.Close(); var strTag = "<dnn:" + updateTheme.Token + " runat=\"server\" id=\"dnn" + updateTheme.Token + "\""; var intOpenTag = strSkin.IndexOf(strTag); if (intOpenTag != -1) { var intCloseTag = strSkin.IndexOf(" />", intOpenTag); var strAttribute = updateTheme.Setting; var intStartAttribute = strSkin.IndexOf(strAttribute, intOpenTag); string strValue = updateTheme.Value; if (intStartAttribute != -1 && intStartAttribute < intCloseTag) { //remove attribute var intEndAttribute = strSkin.IndexOf("\" ", intStartAttribute); strSkin = strSkin.Substring(0, intStartAttribute) + strSkin.Substring(intEndAttribute + 2); } //add attribute strSkin = strSkin.Insert(intOpenTag + strTag.Length, " " + strAttribute + "=\"" + strValue + "\""); File.SetAttributes(themePath, FileAttributes.Normal); var objStream = File.CreateText(themePath); objStream.WriteLine(strSkin); objStream.Close(); UpdateManifest(portalSettings, updateTheme); } }
private void UpdateManifest(PortalSettings portalSettings, UpdateThemeInfo updateTheme) { var themePath = SkinController.FormatSkinSrc(updateTheme.Path, portalSettings); if (File.Exists(themePath.Replace(".ascx", ".htm"))) { var strFile = themePath.Replace(".ascx", ".xml"); if (File.Exists(strFile) == false) { strFile = strFile.Replace(Path.GetFileName(strFile), "skin.xml"); } XmlDocument xmlDoc = null; try { xmlDoc = new XmlDocument(); xmlDoc.Load(strFile); } catch { xmlDoc.InnerXml = "<Objects></Objects>"; } var xmlToken = xmlDoc.DocumentElement.SelectSingleNode("descendant::Object[Token='[" + updateTheme.Token + "]']"); if (xmlToken == null) { //add token string strToken = "<Token>[" + updateTheme.Token + "]</Token><Settings></Settings>"; xmlToken = xmlDoc.CreateElement("Object"); xmlToken.InnerXml = strToken; xmlDoc.SelectSingleNode("Objects").AppendChild(xmlToken); xmlToken = xmlDoc.DocumentElement.SelectSingleNode("descendant::Object[Token='[" + updateTheme.Token + "]']"); } var strValue = updateTheme.Value; var blnUpdate = false; foreach (XmlNode xmlSetting in xmlToken.SelectNodes(".//Settings/Setting")) { if (xmlSetting.SelectSingleNode("Name").InnerText == updateTheme.Setting) { xmlSetting.SelectSingleNode("Value").InnerText = strValue; blnUpdate = true; } } if (blnUpdate == false) { var strSetting = "<Name>" + updateTheme.Setting + "</Name><Value>" + strValue + "</Value>"; XmlNode xmlSetting = xmlDoc.CreateElement("Setting"); xmlSetting.InnerXml = strSetting; xmlToken.SelectSingleNode("Settings").AppendChild(xmlSetting); } try { if (File.Exists(strFile)) { File.SetAttributes(strFile, FileAttributes.Normal); } var objStream = File.CreateText(strFile); var strXML = xmlDoc.InnerXml; strXML = strXML.Replace("><", ">" + Environment.NewLine + "<"); objStream.WriteLine(strXML); objStream.Close(); } catch (Exception ex) { Logger.Error(ex); } } }