agrobot_base/Exemplos/SharpDX-master/Documentation/Styles/SharpDXWeb/html/WriteToFunction.cshtml

207 lines
6.5 KiB
Plaintext

@*
// Copyright (c) 2010-2013 SharpDX - Alexandre Mutel
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.
*@
@model SharpDoc.TemplateContext
@using System.IO.Compression
@using System.Text
@using System.Text.RegularExpressions
@using SharpDoc.Model
@using System.IO;
@using SharpDoc;
@functions {
private const string JoomlaContentUrl = "index.php?option=com_sharpdoc&Itemid={0}&id={1}";
public static string SqlEscapeString(string text)
{
if (text == null)
return null;
text = text.Replace("\\", "\\\\");
text = text.Replace("'", "\\'");
return text;
}
public static string GetPageId(string pageId)
{
// Use lower case for pages
pageId = pageId.Replace("_", "-");
pageId = pageId.ToLowerInvariant();
return pageId;
}
public NTopic GetParentTopicUrl(IModelReference member)
{
// Use topic PageId as url
var topic = member as NTopic;
if (topic != null)
{
while (topic != null && !topic.IsPageIdOnUrl)
{
topic = topic.Parent;
}
}
else
{
topic = Model.ClassLibraryTopic;
}
return topic;
}
public string GetShortUrl(IModelReference member, int index)
{
// For Index == 0, URL is documentation
var urlShort = "documentation";
if (index > 0)
{
var topic = GetParentTopicUrl(member);
// Don't append twice topic PageId
if (topic != null && !ReferenceEquals(topic, member))
{
urlShort += "/" + topic.PageId;
}
var pageId = GetPageId(member.PageId);
urlShort += "/" + GetPageId(pageId);
}
return urlShort;
}
public void WriteToSql(IModelReference member, string content)
{
var writer = (StreamWriter)Model.Param.SqlWriter;
if (member == null)
{
if (content == null)
{
Sqlsdx_sh404sef_urls.AppendLine(";");
Sqlsdx_doc.AppendLine(";");
Sqlsdx_sh404sef_urls.AppendLine("ALTER TABLE `sdx_sh404sef_urls` CHANGE COLUMN `id` `id` INT(11) NOT NULL AUTO_INCREMENT FIRST;");
writer.Write(Sqlsdx_sh404sef_urls);
writer.Write(Sqlsdx_doc);
writer.Flush();
}
return;
}
// Use lower case for pages
var pageId = GetPageId(member.PageId);
var memberIndex = member.Index;
// Calculate Short url
var urlShort = GetShortUrl(member, member.Index);
// Calculate Long url
var topic = GetParentTopicUrl(member);
var itemId = "109";
if (topic != null && memberIndex > 0)
{
var topicParamItemId = topic.Parameters.FirstOrDefault(topicParam => topicParam.Name == "ItemId");
if (topicParamItemId != null)
{
itemId = topicParamItemId.value;
}
}
var urlLong = string.Format(JoomlaContentUrl, itemId, memberIndex);
var contentBuffer = Encoding.ASCII.GetBytes(content);
var memoryStream = new MemoryStream();
using (var gz = new DeflateStream(memoryStream, CompressionMode.Compress, false))
{
gz.Write(contentBuffer, 0, contentBuffer.Length);
}
var contentGZipBase64 = Convert.ToBase64String(memoryStream.ToArray());
if (CountInserts == 0)
{
Sqlsdx_sh404sef_urls.Append(@"INSERT INTO `sdx_sh404sef_urls` (`id`, `cpt`, `rank`, `oldurl`, `newurl`, `dateadd`) VALUES ");
Sqlsdx_doc.Append(@"INSERT INTO `sdx_doc` (`id`,`title`,`alias`,`maintext`) VALUES ");
}
else
{
Sqlsdx_sh404sef_urls.Append(",");
Sqlsdx_doc.Append(",");
}
Sqlsdx_sh404sef_urls.AppendLine(@" (" + memberIndex + @", 0, 0, '" + urlShort + @"', '" + urlLong + @"', '0000-00-00')");
Sqlsdx_doc.AppendLine(@" (" + memberIndex + @",'" + SqlEscapeString(member.PageTitle) + @"','" + pageId + @"','" + contentGZipBase64 + @"') ");
CountInserts++;
if (CountInserts == 50)
{
Sqlsdx_sh404sef_urls.AppendLine(";");
Sqlsdx_doc.AppendLine(";");
CountInserts = 0;
}
}
public Func<LinkDescriptor, string> PreviousLinkResolver { get; set; }
public int CountInserts { get; set; }
public StringBuilder Sqlsdx_sh404sef_urls { get; set; }
public StringBuilder Sqlsdx_doc { get; set; }
public string LinkToSqlDb(LinkDescriptor link)
{
string url = null;
switch (link.Type) {
case LinkType.Local:
url = GetShortUrl(link.LocalReference, link.Index);
break;
default:
return PreviousLinkResolver(link);
}
return string.Format("<a href=\"{0}\" {1}>{2}</a>", url, link.Attributes ?? "", Escape(link.Name));
}
}
@{
// Replace default link resolver and use a special one for local links
PreviousLinkResolver = Model.LinkResolver;
Model.LinkResolver = LinkToSqlDb;
const string fileName = "sharpdx-joomla.sql";
if (File.Exists(fileName))
{
File.Delete(fileName);
}
var writer = new StreamWriter(new FileStream(fileName, FileMode.CreateNew, FileAccess.Write), Encoding.ASCII);
Model.Param.SqlWriter = writer;
writer.WriteLine(@"
SET SESSION sql_mode='NO_AUTO_VALUE_ON_ZERO';
ALTER TABLE `sdx_sh404sef_urls` CHANGE COLUMN `id` `id` INT(11) NOT NULL FIRST;
TRUNCATE TABLE `sdx_sh404sef_urls`;
TRUNCATE TABLE `sdx_doc`;
");
Sqlsdx_sh404sef_urls = new StringBuilder();
Sqlsdx_doc = new StringBuilder();
Model.WriteTo = WriteToSql;
}