// Note for next migration. I forgot the left pane JS replacement in the section "Task 671: Improve touchscreen support"
        // above in the initial release of 3.2.0. It was added on May 19, 4 days after the 3.2.0 release.
        // As an extra precaution, we should re-apply this fix in the next migration as well, so anyone who didn't manually
        // update their template still gets the fix.

        /// <summary>
        /// Upgrades the 3.2.0 data to the 3.2.1 data. Applies to data such as app settings, gallery settings, templates, etc.
        /// Does not contain data structure changes such as new columns.
        /// </summary>
        /// <param name="ctx">Context to be used for updating data.</param>
        private static void UpgradeTo321(GalleryDb ctx)
        {
            foreach (var uiTmpl in ctx.UiTemplates.Where(t => t.TemplateType == UiTemplateType.LeftPane))
            {
                // Task 671: Improve touchscreen support.
                // NOTE: This should have been in the 3.2.0 upgrade, but it was forgotten.
                const string srcText = @"// Render the left pane, but not for touchscreens UNLESS the left pane is the only visible pane
var isTouch = window.Gsp.isTouchScreen();
var renderLeftPane = !isTouch  || (isTouch && ($('.gsp_tb_s_CenterPane:visible, .gsp_tb_s_RightPane:visible').length == 0));

if (renderLeftPane ) {
 $('#{{:Settings.LeftPaneClientId}}').html( $.render [ '{{:Settings.LeftPaneTmplName}}' ]( window.{{:Settings.ClientId}}.gspData ));";

                const string replText = @"// Render the left pane if it exists
var $lp = $('#{{:Settings.LeftPaneClientId}}');

if ($lp.length > 0) {
 $lp.html( $.render [ '{{:Settings.LeftPaneTmplName}}' ]( window.{{:Settings.ClientId}}.gspData ));";

                uiTmpl.ScriptTemplate = uiTmpl.ScriptTemplate.Replace(srcText, replText);
            }

            // Update data schema version to 3.2.1
            var asDataSchema = ctx.AppSettings.First(a => a.SettingName == "DataSchemaVersion");

            asDataSchema.SettingValue = "3.2.1";

            ctx.SaveChanges();
        }
        /// <summary>
        /// Update database values as required for the current version. Typically this is used to apply bug fixes
        /// that require updates to database settings (such as media and UI templates).
        /// </summary>
        /// <param name="ctx">Context to be used for updating data.</param>
        /// <remarks>This function detects the current app schema version as defined in the AppSetting table and applies
        /// all relevant updates to bring it up to the current version. By the time this method exits, the app schema version
        /// in the AppSetting table will match the current schema version as defined in <see cref="GalleryDb.DataSchemaVersion" />.
        /// </remarks>
        /// <exception cref="System.Exception"></exception>
        public static void ApplyDbUpdates(GalleryDb ctx)
        {
            if (!ctx.AppSettings.Any())
            {
                SeedController.InsertSeedData(ctx);
            }

            var curSchema = GetCurrentSchema(ctx);

            while (curSchema < GalleryDb.DataSchemaVersion)
            {
                var oldSchema = curSchema;

                switch (curSchema)
                {
                case GalleryDataSchemaVersion.V3_0_0: UpgradeTo301(ctx); break;

                case GalleryDataSchemaVersion.V3_0_1: UpgradeTo302(ctx); break;

                case GalleryDataSchemaVersion.V3_0_2: UpgradeTo303(ctx); break;

                case GalleryDataSchemaVersion.V3_0_3: UpgradeTo310(ctx); break;
                }

                curSchema = GetCurrentSchema(ctx);

                if (curSchema == oldSchema)
                {
                    throw new Exception(String.Format("The migration function for schema {0} should have incremented the data schema version in the AppSetting table, but it did not.", curSchema));
                }
            }
        }
        /// <summary>
        /// Upgrades the 3.0.2 data to the 3.0.3 data. Applies to data such as app settings, gallery settings, templates, etc.
        /// Does not contain data structure changes such as new columns.
        /// </summary>
        /// <param name="ctx">Context to be used for updating data.</param>
        private static void UpgradeTo303(GalleryDb ctx)
        {
            // Fix bug# 632: Error "Cannot find skin path"
            // Change skin name from "Dark" to "dark".
            var asSkin = ctx.AppSettings.First(a => a.SettingName == "Skin");

            if (asSkin.SettingValue == "Dark")
            {
                asSkin.SettingValue = "dark";
            }

            // Fix bug# 633: Upgrading from 2.6 may result in duplicate sets of tags
            // Delete any duplicate "tag" metadata rows
            // FYI: We need the ToList() to avoid this error in SQL CE: The ntext and image data types cannot be used in WHERE, HAVING, GROUP BY, ON, or IN clauses, except when these data types are used with the LIKE or IS NULL predicates.
            var dupMetaTags = ctx.Metadatas
                              .Where(m => m.MetaName == MetadataItemName.Tags)
                              .GroupBy(m => m.FKMediaObjectId).Where(m => m.Count() > 1)
                              .ToList()
                              .Select(m => m.Where(t => t.Value == String.Empty))
                              .Select(m => m.FirstOrDefault());

            foreach (var dupMetaTag in dupMetaTags)
            {
                ctx.Metadatas.Remove(dupMetaTag);
            }

            // Update data schema version to 3.0.3
            var asDataSchema = ctx.AppSettings.First(a => a.SettingName == "DataSchemaVersion");

            asDataSchema.SettingValue = "3.0.3";

            ctx.SaveChanges();
        }
Пример #4
0
        /// <summary>
        /// Update database values as required for the current version. Typically this is used to apply bug fixes
        /// that require updates to database settings (such as media and UI templates).
        /// </summary>
        /// <param name="ctx">Context to be used for updating data.</param>
        /// <remarks>This function detects the current app schema version as defined in the AppSetting table and applies
        /// all relevant updates to bring it up to the current version. By the time this method exits, the app schema version
        /// in the AppSetting table will match the current schema version as defined in <see cref="GalleryDb.DataSchemaVersion" />.
        /// </remarks>
        /// <exception cref="System.Exception"></exception>
        public static void ApplyDbUpdates(GalleryDb ctx)
        {
            if (!ctx.AppSettings.Any())
            {
                SeedController.InsertSeedData(ctx);
            }

            var curSchema = GetCurrentSchema(ctx);

            while (curSchema < GalleryDb.DataSchemaVersion)
            {
                var oldSchema = curSchema;

                switch (curSchema)
                {
                    case GalleryDataSchemaVersion.V3_0_0: UpgradeTo301(ctx); break;
                    case GalleryDataSchemaVersion.V3_0_1: UpgradeTo302(ctx); break;
                    case GalleryDataSchemaVersion.V3_0_2: UpgradeTo303(ctx); break;
                    case GalleryDataSchemaVersion.V3_0_3: UpgradeTo310(ctx); break;
                    case GalleryDataSchemaVersion.V3_1_0: UpgradeTo320(ctx); break;
                    case GalleryDataSchemaVersion.V3_2_0: UpgradeTo321(ctx); break;
                }

                curSchema = GetCurrentSchema(ctx);

                if (curSchema == oldSchema)
                {
                    throw new Exception(String.Format("The migration function for schema {0} should have incremented the data schema version in the AppSetting table, but it did not.", curSchema));
                }
            }
        }
        /// <summary>
        /// Upgrades the 3.0.3 data to the 3.1.0 data. Applies to data such as app settings, gallery settings, templates, etc.
        /// Does not contain data structure changes such as new columns.
        /// </summary>
        /// <param name="ctx">Context to be used for updating data.</param>
        private static void UpgradeTo310(GalleryDb ctx)
        {
            // Insert Orientation meta item into metadata definitions just before the ExposureProgram item.
            foreach (var metaDef in ctx.GallerySettings.Where(gs => gs.SettingName == "MetadataDisplaySettings"))
            {
                // First grab the sequence of ExposureProgram, then subtract one.
                // Matches: 'MetadataItem':14{ANY_TEXT}'Sequence':{ANY_DIGITS} => {ANY_DIGITS} is assigned to seq group name
                var match = System.Text.RegularExpressions.Regex.Match(metaDef.SettingValue, @"['""]MetadataItem['""]:14.+?['""]Sequence['""]:(?<seq>\d+)");

                var sequence = 12;                 // Default to 12 if we don't find one, which is correct if the user hasn't modified the original order
                if (match.Success)
                {
                    sequence = Convert.ToInt32(match.Groups["seq"].Value, CultureInfo.InvariantCulture) - 1;
                }

                // Serialized values are separated by apostrophes when first inserted; they are replaced by quotes by the JSON serializer when subsequently
                // saved, so we check for both. Look for the beginning of the ExposureProgram item and insert the orientation item just before it.
                if (!metaDef.SettingValue.Contains(@"""MetadataItem"":43") && !metaDef.SettingValue.Contains(@"'MetadataItem':43"))
                {
                    metaDef.SettingValue = metaDef.SettingValue.Replace(@"{""MetadataItem"":14", String.Concat(@"{""MetadataItem"":43,""Name"":""Orientation"",""DisplayName"":""Orientation"",""IsVisibleForAlbum"":false,""IsVisibleForGalleryObject"":true,""IsEditable"":false,""DefaultValue"":""{Orientation}"",""Sequence"":", sequence, @"},{""MetadataItem"":14"));
                    metaDef.SettingValue = metaDef.SettingValue.Replace(@"{'MetadataItem':14", String.Concat(@"{'MetadataItem':43,'Name':'Orientation','DisplayName':'Orientation','IsVisibleForAlbum':false,'IsVisibleForGalleryObject':true,'IsEditable':false,'DefaultValue':'{Orientation}','Sequence':", sequence, @"},{'MetadataItem':14"));
                }
            }

            // Task 611 & 645: Update MP4 encoder setting to (1) perform higher quality transcoding (2) auto-rotate videos (3) remove orientation flag
            const string mp4Setting303 = @"-y -i ""{SourceFilePath}"" -vf ""scale=min(iw*min(640/iw\,480/ih)\,iw):min(ih*min(640/iw\,480/ih)\,ih)"" -b:v 384k -vcodec libx264 -flags +loop+mv4 -cmp 256 -partitions +parti4x4+parti8x8+partp4x4+partp8x8 -subq 6 -trellis 0 -refs 5 -bf 0 -coder 0 -me_range 16 -g 250 -keyint_min 25 -sc_threshold 40 -i_qfactor 0.71 -qmin 10 -qmax 51 -qdiff 4 -ac 1 -ar 16000 -r 13 -ab 32000 -movflags +faststart ""{DestinationFilePath}""";
            const string mp4Setting310 = @"-y -i ""{SourceFilePath}"" -vf ""scale=min(iw*min(640/iw\,480/ih)\,iw):min(ih*min(640/iw\,480/ih)\,ih){AutoRotateFilter}"" -vcodec libx264 -movflags +faststart -metadata:s:v:0 rotate=0 ""{DestinationFilePath}""";

            foreach (var metaDef in ctx.GallerySettings.Where(gs => gs.SettingName == "MediaEncoderSettings"))
            {
                metaDef.SettingValue = metaDef.SettingValue.Replace(mp4Setting303, mp4Setting310);
            }

            // Task 664: Change jQuery 1.10.1 to 1.10.2
            var appSetting = ctx.AppSettings.FirstOrDefault(a => a.SettingName == "JQueryScriptPath");

            if (appSetting != null && appSetting.SettingValue == "//ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js")
            {
                appSetting.SettingValue = "//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js";
            }

            // Task 649: Add .3GP file support
            if (!ctx.MimeTypes.Any(mt => mt.FileExtension == ".3gp"))
            {
                ctx.MimeTypes.Add(new MimeTypeDto
                {
                    FileExtension        = ".3gp",
                    MimeTypeValue        = "video/mp4",
                    BrowserMimeTypeValue = ""
                });
            }

            // Update data schema version to 3.1.0
            var asDataSchema = ctx.AppSettings.First(a => a.SettingName == "DataSchemaVersion");

            asDataSchema.SettingValue = "3.1.0";

            ctx.SaveChanges();
        }
        /// <summary>
        /// Upgrades the 3.0.1 data to the 3.0.2 data. Applies to data such as app settings, gallery settings, templates, etc.
        /// Does not contain data structure changes such as new columns.
        /// </summary>
        /// <param name="ctx">Context to be used for updating data.</param>
        private static void UpgradeTo302(GalleryDb ctx)
        {
            // Bug 625: Search results do not allow downloading original file
            foreach (var uiTmpl in ctx.UiTemplates.Where(t => t.TemplateType == UiTemplateType.MediaObject))
            {
                const string srcText  = "{{if Settings.AllowOriginalDownload}}";
                const string replText = "{{if Album.Permissions.ViewOriginalMediaObject}}";

                uiTmpl.HtmlTemplate = uiTmpl.HtmlTemplate.Replace(srcText, replText);
            }

            // Update data schema version to 3.0.2
            var asDataSchema = ctx.AppSettings.First(a => a.SettingName == "DataSchemaVersion");

            asDataSchema.SettingValue = "3.0.2";

            ctx.SaveChanges();
        }
Пример #7
0
        /// <summary>
        /// Adds or updates the left pane templates available to Enterprise users.
        /// </summary>
        private static void InsertLeftPaneEnterpriseTemplates()
        {
            using (var ctx = new GalleryDb())
            {
                var galleryId = ctx.Galleries.Single(g => g.IsTemplate).GalleryId;

                ctx.UiTemplates.AddOrUpdate(a => new { a.TemplateType, a.FKGalleryId, a.Name }, new UiTemplateDto
                    {
                        TemplateType = UiTemplateType.LeftPane,
                        Name = "Default with Tag and People Trees",
                        FKGalleryId = galleryId,
                        Description = "",
                        HtmlTemplate = GetLeftPaneHtmlTmpl(true, false),
                        ScriptTemplate = GetLeftPaneJsTmpl(true, false)
                    });

                ctx.UiTemplates.AddOrUpdate(a => new { a.TemplateType, a.FKGalleryId, a.Name }, new UiTemplateDto
                    {
                        TemplateType = UiTemplateType.LeftPane,
                        Name = "Default with Tag and People Clouds",
                        FKGalleryId = galleryId,
                        Description = "",
                        HtmlTemplate = GetLeftPaneHtmlTmpl(false, true),
                        ScriptTemplate = GetLeftPaneJsTmpl(false, true)
                    });

                ctx.SaveChanges();
            }
        }
Пример #8
0
        private static void InsertMediaTemplates(GalleryDb ctx)
        {
            // Define the Flash and Silverlight templates. We use these for several media types so let's just define them once here.
            const string flashHtmlTmpl = "<a href='{MediaObjectUrl}' style='display:block;width:{Width}px;height:{Height}px;margin:0 auto;' id='{UniqueId}_player'></a>";

            const string flashScriptTmpl = @"window.{UniqueId}RunFlowPlayer=function(){
             jQuery('#{UniqueId}_player').attr('href',function(){return this.href.replace(/&/g,'%26')});
             flowplayer('{UniqueId}_player',{src:'{GalleryPath}/script/flowplayer-3.2.16.swf',wmode:'opaque'},{clip:{autoPlay:{AutoStartMediaObjectText},scaling:'fit'}})
            };

            if (window.flowplayer)
             {UniqueId}RunFlowPlayer();
            else
             jQuery.getScript('{GalleryPath}/script/flowplayer-3.2.12.min.js',{UniqueId}RunFlowPlayer);";

            const string silverlightAudioSkin = "AudioGray.xaml";
            const string silverlightVideoSkin = "Professional.xaml";
            const string silverlightHtmlTmpl = "<div id=\'{UniqueId}_mp1p\'></div>";

            const string silverlightScriptTmpl = @"var loadScripts=function(files, callback) {
            $.getScript(files.shift(), files.length ? function() { loadScripts(files, callback); } : callback);
            };

            var runSilverlight = function () {
            Sys.UI.Silverlight.Control.createObject('{UniqueId}_mp1p','<object type=\'application/x-silverlight\' id=\'{UniqueId}_mp1\' style=\'height:{Height}px;width:{Width}px;\'><param name=\'Windowless\' value=\'True\' /><a href=\'http://go2.microsoft.com/fwlink/?LinkID=114576&amp;v=1.0\'><img src=\'http://go2.microsoft.com/fwlink/?LinkID=108181\' alt=\'Get Microsoft Silverlight\' style=\'border-width:0;\' /></a></object>');
            Sys.Application.add_init(function() {
            $create(Sys.UI.Silverlight.MediaPlayer, {
            mediaSource: '{MediaObjectUrl}',
            scaleMode: 1,
            source: '{GalleryPath}/xaml/mediaplayer/{{0}}',
            autoPlay: {AutoStartMediaObjectText}
            }, null, null, document.getElementById('{UniqueId}_mp1p'));
            });
            Sys.Application.initialize();
            };

            window.Gsp.msAjaxComponentId='{UniqueId}_mp1';
            if ((typeof Sys === 'undefined') || !Sys.UI.Silverlight) {
            var scripts = ['{GalleryPath}/script/MicrosoftAjax.js', '{GalleryPath}/script/SilverlightControl.js', '{GalleryPath}/script/SilverlightMedia.js'];
            loadScripts(scripts, runSilverlight);
            } else {
            runSilverlight();
            }";

            const string pdfScriptTmplIE = @"// IE and Safari render Adobe Reader iframes on top of jQuery UI dialogs, so add event handler to hide frame while dialog is visible
            $('.gsp_mo_share_dlg').on('dialogopen', function() {
             $('#{UniqueId}_frame').css('visibility', 'hidden');
            }).on('dialogclose', function() {
            $('#{UniqueId}_frame').css('visibility', 'visible');
            });";

            const string pdfScriptTmplSafari = @"// IE and Safari render Adobe Reader iframes on top of jQuery UI dialogs, so add event handler to hide frame while dialog is visible
            // Safari requires that we clear the iframe src before we can hide it
            $('.gsp_mo_share_dlg').on('dialogopen', function() {
             $('#{UniqueId}_frame').attr('src', '').css('visibility', 'hidden');
            }).on('dialogclose', function() {
            $('#{UniqueId}_frame').attr('src', '{MediaObjectUrl}').css('visibility', 'visible');
            });";

            ctx.MediaTemplates.AddOrUpdate(a => new { a.MimeType, a.BrowserId }, new MediaTemplateDto { MimeType = "image/*", BrowserId = "default", HtmlTemplate = "<img src='{MediaObjectUrl}' class='gsp_mo_img' alt='{TitleNoHtml}' title='{TitleNoHtml}' />", ScriptTemplate = "" });
            ctx.MediaTemplates.AddOrUpdate(a => new { a.MimeType, a.BrowserId }, new MediaTemplateDto { MimeType = "audio/*", BrowserId = "default", HtmlTemplate = "<object type='{MimeType}' data='{MediaObjectUrl}' style='width:{Width}px;height:{Height}px;' ><param name='autostart' value='{AutoStartMediaObjectInt}' /><param name='controller' value='true' /></object>", ScriptTemplate = "" });
            ctx.MediaTemplates.AddOrUpdate(a => new { a.MimeType, a.BrowserId }, new MediaTemplateDto { MimeType = "audio/*", BrowserId = "ie", HtmlTemplate = "<object classid='clsid:6BF52A52-394A-11D3-B153-00C04F79FAA6' standby='Loading audio...' style='width:{Width}px;height:{Height}px;'><param name='url' value='{MediaObjectUrl}' /><param name='src' value='{MediaObjectUrl}' /><param name='autostart' value='{AutoStartMediaObjectText}' /><param name='showcontrols' value='true' /></object>", ScriptTemplate = "" });
            ctx.MediaTemplates.AddOrUpdate(a => new { a.MimeType, a.BrowserId }, new MediaTemplateDto { MimeType = "audio/ogg", BrowserId = "default", HtmlTemplate = "<audio src='{MediaObjectUrl}' controls autobuffer preload {AutoPlay}><p>Cannot play: Your browser does not support the <code>audio</code> element or the codec of this file. Try another browser or download the file.</p></audio>", ScriptTemplate = "" });
            ctx.MediaTemplates.AddOrUpdate(a => new { a.MimeType, a.BrowserId }, new MediaTemplateDto { MimeType = "audio/ogg", BrowserId = "ie", HtmlTemplate = "<p>Cannot play: Internet Explorer cannot play Ogg Theora files. Try another browser or download the file.</p>", ScriptTemplate = "" });
            ctx.MediaTemplates.AddOrUpdate(a => new { a.MimeType, a.BrowserId }, new MediaTemplateDto { MimeType = "audio/wav", BrowserId = "default", HtmlTemplate = "<audio src='{MediaObjectUrl}' controls autobuffer preload {AutoPlay}><p>Cannot play: Your browser does not support the <code>audio</code> element or the codec of this file. Try another browser or download the file.</p></audio>", ScriptTemplate = "" });
            ctx.MediaTemplates.AddOrUpdate(a => new { a.MimeType, a.BrowserId }, new MediaTemplateDto { MimeType = "audio/wav", BrowserId = "ie", HtmlTemplate = "<object classid='clsid:6BF52A52-394A-11D3-B153-00C04F79FAA6' standby='Loading audio...' style='width:{Width}px;height:{Height}px;'><param name='url' value='{MediaObjectUrl}' /><param name='src' value='{MediaObjectUrl}' /><param name='autostart' value='{AutoStartMediaObjectText}' /><param name='showcontrols' value='true' /></object>", ScriptTemplate = "" });

            ctx.MediaTemplates.AddOrUpdate(a => new { a.MimeType, a.BrowserId }, new MediaTemplateDto { MimeType = "audio/x-mp3", BrowserId = "default", HtmlTemplate = "<audio src='{MediaObjectUrl}' controls autobuffer preload {AutoPlay}><p>Cannot play: Your browser does not support the <code>audio</code> element or the codec of this file. Try another browser or download the file.</p></audio>", ScriptTemplate = "" });
            ctx.MediaTemplates.AddOrUpdate(a => new { a.MimeType, a.BrowserId }, new MediaTemplateDto { MimeType = "audio/x-mp3", BrowserId = "firefox", HtmlTemplate = silverlightHtmlTmpl, ScriptTemplate = silverlightScriptTmpl.Replace("{{0}}", silverlightAudioSkin) });
            ctx.MediaTemplates.AddOrUpdate(a => new { a.MimeType, a.BrowserId }, new MediaTemplateDto { MimeType = "audio/x-mp3", BrowserId = "ie1to8", HtmlTemplate = silverlightHtmlTmpl, ScriptTemplate = silverlightScriptTmpl.Replace("{{0}}", silverlightAudioSkin) });

            ctx.MediaTemplates.AddOrUpdate(a => new { a.MimeType, a.BrowserId }, new MediaTemplateDto { MimeType = "audio/m4a", BrowserId = "default", HtmlTemplate = silverlightHtmlTmpl, ScriptTemplate = silverlightScriptTmpl.Replace("{{0}}", silverlightAudioSkin) });
            ctx.MediaTemplates.AddOrUpdate(a => new { a.MimeType, a.BrowserId }, new MediaTemplateDto { MimeType = "audio/m4a", BrowserId = "chrome", HtmlTemplate = "<audio src='{MediaObjectUrl}' controls autobuffer preload {AutoPlay}><p>Cannot play: Your browser does not support the <code>audio</code> element or the codec of this file. Try another browser or download the file.</p></audio>", ScriptTemplate = "" });

            ctx.MediaTemplates.AddOrUpdate(a => new { a.MimeType, a.BrowserId }, new MediaTemplateDto { MimeType = "audio/x-ms-wma", BrowserId = "default", HtmlTemplate = silverlightHtmlTmpl, ScriptTemplate = silverlightScriptTmpl.Replace("{{0}}", silverlightAudioSkin) });
            ctx.MediaTemplates.AddOrUpdate(a => new { a.MimeType, a.BrowserId }, new MediaTemplateDto { MimeType = "video/*", BrowserId = "default", HtmlTemplate = "<object type='{MimeType}' data='{MediaObjectUrl}' style='width:{Width}px;height:{Height}px;' ><param name='src' value='{MediaObjectUrl}' /><param name='autostart' value='{AutoStartMediaObjectInt}' /></object>", ScriptTemplate = "" });
            ctx.MediaTemplates.AddOrUpdate(a => new { a.MimeType, a.BrowserId }, new MediaTemplateDto { MimeType = "video/*", BrowserId = "ie", HtmlTemplate = "<object type='{MimeType}' data='{MediaObjectUrl}' style='width:{Width}px;height:{Height}px;'><param name='src' value='{MediaObjectUrl}' /><param name='autostart' value='{AutoStartMediaObjectText}' /></object>", ScriptTemplate = "" });
            ctx.MediaTemplates.AddOrUpdate(a => new { a.MimeType, a.BrowserId }, new MediaTemplateDto { MimeType = "video/ogg", BrowserId = "default", HtmlTemplate = "<video src='{MediaObjectUrl}' controls autobuffer preload {AutoPlay}><p>Cannot play: Your browser does not support the <code>video</code> element or the codec of this file. Try another browser or download the file.</p></video>", ScriptTemplate = "" });
            ctx.MediaTemplates.AddOrUpdate(a => new { a.MimeType, a.BrowserId }, new MediaTemplateDto { MimeType = "video/ogg", BrowserId = "ie", HtmlTemplate = "<p>Cannot play: Internet Explorer cannot play Ogg Theora files. Try another browser or download the file.</p>", ScriptTemplate = "" });

            ctx.MediaTemplates.AddOrUpdate(a => new { a.MimeType, a.BrowserId }, new MediaTemplateDto { MimeType = "video/x-ms-wmv", BrowserId = "default", HtmlTemplate = silverlightHtmlTmpl, ScriptTemplate = silverlightScriptTmpl.Replace("{{0}}", silverlightVideoSkin) });

            ctx.MediaTemplates.AddOrUpdate(a => new { a.MimeType, a.BrowserId }, new MediaTemplateDto { MimeType = "video/mp4", BrowserId = "default", HtmlTemplate = "<video src='{MediaObjectUrl}' controls autobuffer preload {AutoPlay}><p>Cannot play: Your browser does not support the <code>video</code> element or the codec of this file. Try another browser or download the file.</p></video>", ScriptTemplate = "" });
            ctx.MediaTemplates.AddOrUpdate(a => new { a.MimeType, a.BrowserId }, new MediaTemplateDto { MimeType = "video/mp4", BrowserId = "ie1to8", HtmlTemplate = flashHtmlTmpl, ScriptTemplate = flashScriptTmpl });
            ctx.MediaTemplates.AddOrUpdate(a => new { a.MimeType, a.BrowserId }, new MediaTemplateDto { MimeType = "video/mp4", BrowserId = "opera", HtmlTemplate = flashHtmlTmpl, ScriptTemplate = flashScriptTmpl });

            ctx.MediaTemplates.AddOrUpdate(a => new { a.MimeType, a.BrowserId }, new MediaTemplateDto { MimeType = "video/m4v", BrowserId = "default", HtmlTemplate = "<video src='{MediaObjectUrl}' controls autobuffer preload {AutoPlay}><p>Cannot play: Your browser does not support the <code>video</code> element or the codec of this file. Try another browser or download the file.</p></video>", ScriptTemplate = "" });
            ctx.MediaTemplates.AddOrUpdate(a => new { a.MimeType, a.BrowserId }, new MediaTemplateDto { MimeType = "video/m4v", BrowserId = "ie1to8", HtmlTemplate = flashHtmlTmpl, ScriptTemplate = flashScriptTmpl });
            ctx.MediaTemplates.AddOrUpdate(a => new { a.MimeType, a.BrowserId }, new MediaTemplateDto { MimeType = "video/m4v", BrowserId = "opera", HtmlTemplate = flashHtmlTmpl, ScriptTemplate = flashScriptTmpl });

            ctx.MediaTemplates.AddOrUpdate(a => new { a.MimeType, a.BrowserId }, new MediaTemplateDto { MimeType = "video/x-ms-asf", BrowserId = "default", HtmlTemplate = silverlightHtmlTmpl, ScriptTemplate = silverlightScriptTmpl.Replace("{{0}}", silverlightVideoSkin) });
            ctx.MediaTemplates.AddOrUpdate(a => new { a.MimeType, a.BrowserId }, new MediaTemplateDto { MimeType = "video/divx", BrowserId = "default", HtmlTemplate = "<object type='{MimeType}' data='{MediaObjectUrl}' style='width:{Width}px;height:{Height}px;'><param name='src' value='{MediaObjectUrl}' /><param name='mode' value='full' /><param name='minVersion' value='1.0.0' /><param name='allowContextMenu' value='true' /><param name='autoPlay' value='{AutoStartMediaObjectText}' /><param name='loop' value='false' /><param name='bannerEnabled' value='false' /><param name='bufferingMode' value='auto' /><param name='previewMessage' value='Click to start video' /><param name='previewMessageFontSize' value='24' /><param name='movieTitle' value='{TitleNoHtml}' /></object>", ScriptTemplate = "" });
            ctx.MediaTemplates.AddOrUpdate(a => new { a.MimeType, a.BrowserId }, new MediaTemplateDto { MimeType = "video/divx", BrowserId = "ie", HtmlTemplate = "<object classid='clsid:67DABFBF-D0AB-41fa-9C46-CC0F21721616' codebase='http://go.divx.com/plugin/DivXBrowserPlugin.cab' style='width:{Width}px;height:{Height}px;'><param name='src' value='{MediaObjectUrl}' /><param name='mode' value='full' /><param name='minVersion' value='1.0.0' /><param name='allowContextMenu' value='true' /><param name='autoPlay' value='{AutoStartMediaObjectText}' /><param name='loop' value='false' /><param name='bannerEnabled' value='false' /><param name='bufferingMode' value='auto' /><param name='previewMessage' value='Click to start video' /><param name='previewMessageFontSize' value='24' /><param name='movieTitle' value='{TitleNoHtml}' /></object>", ScriptTemplate = "" });
            ctx.MediaTemplates.AddOrUpdate(a => new { a.MimeType, a.BrowserId }, new MediaTemplateDto { MimeType = "video/webm", BrowserId = "default", HtmlTemplate = "<video src='{MediaObjectUrl}' controls autobuffer preload {AutoPlay}><p>Cannot play: Your browser does not support the <code>video</code> element or the codec of this file. Try another browser or download the file.</p></video>", ScriptTemplate = "" });
            ctx.MediaTemplates.AddOrUpdate(a => new { a.MimeType, a.BrowserId }, new MediaTemplateDto { MimeType = "application/x-shockwave-flash", BrowserId = "default", HtmlTemplate = "<object type='{MimeType}' data='{MediaObjectUrl}' style='width:{Width}px;height:{Height}px;' id='flash_plugin' standby='loading movie...'><param name='movie' value='{MediaObjectUrl}' /><param name='allowScriptAccess' value='sameDomain' /><param name='quality' value='best' /><param name='wmode' value='opaque' /><param name='scale' value='default' /><param name='bgcolor' value='#FFFFFF' /><param name='salign' value='TL' /><param name='FlashVars' value='playerMode=embedded' /><p><strong>Cannot play Flash content</strong> Your browser does not have the Flash plugin or it is disabled. To view the content, install the Macromedia Flash plugin or, if it is already installed, enable it.</p></object>", ScriptTemplate = "" });
            ctx.MediaTemplates.AddOrUpdate(a => new { a.MimeType, a.BrowserId }, new MediaTemplateDto { MimeType = "application/x-shockwave-flash", BrowserId = "ie", HtmlTemplate = "<object type='{MimeType}' classid='clsid:D27CDB6E-AE6D-11cf-96B8-444553540000' codebase='http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0&quot; id='flash_activex' standby='loading movie...' style='width:{Width}px;height:{Height}px;'><param name='movie' value='{MediaObjectUrl}' /><param name='quality' value='high' /><param name='wmode' value='opaque' /><param name='bgcolor' value='#FFFFFF' /><p><strong>Cannot play Flash content</strong> Your browser does not have the Flash plugin or it is disabled. To view the content, install the Macromedia Flash plugin or, if it is already installed, enable it.</p></object>", ScriptTemplate = "" });
            ctx.MediaTemplates.AddOrUpdate(a => new { a.MimeType, a.BrowserId }, new MediaTemplateDto { MimeType = "application/x-shockwave-flash", BrowserId = "ie5to9mac", HtmlTemplate = "<object type='{MimeType}' data='{MediaObjectUrl}' style='width:{Width}px;height:{Height}px;' id='flash_plugin' standby='loading movie...'><param name='movie' value='{MediaObjectUrl}' /><param name='allowScriptAccess' value='sameDomain' /><param name='quality' value='best' /><param name='scale' value='default' /><param name='bgcolor' value='#FFFFFF' /><param name='wmode' value='opaque' /><param name='salign' value='TL' /><param name='FlashVars' value='playerMode=embedded' /><strong>Cannot play Flash content</strong> Your browser does not have the Flash plugin or it is disabled. To view the content, install the Macromedia Flash plugin or, if it is already installed, enable it.</object>", ScriptTemplate = "" });
            ctx.MediaTemplates.AddOrUpdate(a => new { a.MimeType, a.BrowserId }, new MediaTemplateDto { MimeType = "video/f4v", BrowserId = "default", HtmlTemplate = flashHtmlTmpl, ScriptTemplate = flashScriptTmpl });
            ctx.MediaTemplates.AddOrUpdate(a => new { a.MimeType, a.BrowserId }, new MediaTemplateDto { MimeType = "video/x-flv", BrowserId = "default", HtmlTemplate = flashHtmlTmpl, ScriptTemplate = flashScriptTmpl });

            ctx.MediaTemplates.AddOrUpdate(a => new { a.MimeType, a.BrowserId }, new MediaTemplateDto { MimeType = "application/pdf", BrowserId = "default", HtmlTemplate = "<p><a href='{MediaObjectUrl}'>Enlarge PDF to fit browser window</a></p><iframe id='{UniqueId}_frame' src='{MediaObjectUrl}' frameborder='0' style='width:680px;height:600px;border:1px solid #000;'></iframe>", ScriptTemplate = "" });
            ctx.MediaTemplates.AddOrUpdate(a => new { a.MimeType, a.BrowserId }, new MediaTemplateDto { MimeType = "application/pdf", BrowserId = "ie", HtmlTemplate = "<p><a href='{MediaObjectUrl}'>Enlarge PDF to fit browser window</a></p><iframe id='{UniqueId}_frame' src='{MediaObjectUrl}' frameborder='0' style='width:680px;height:600px;border:1px solid #000;'></iframe>", ScriptTemplate = pdfScriptTmplIE });
            ctx.MediaTemplates.AddOrUpdate(a => new { a.MimeType, a.BrowserId }, new MediaTemplateDto { MimeType = "application/pdf", BrowserId = "safari", HtmlTemplate = "<p><a href='{MediaObjectUrl}'>Enlarge PDF to fit browser window</a></p><iframe id='{UniqueId}_frame' src='{MediaObjectUrl}' frameborder='0' style='width:680px;height:600px;border:1px solid #000;'></iframe>", ScriptTemplate = pdfScriptTmplSafari });

            ctx.MediaTemplates.AddOrUpdate(a => new { a.MimeType, a.BrowserId }, new MediaTemplateDto { MimeType = "text/plain", BrowserId = "default", HtmlTemplate = "<p><a href='{MediaObjectUrl}'>Enlarge file to fit browser window</a></p><iframe src='{MediaObjectUrl}' frameborder='0' style='width:680px;height:600px;border:1px solid #000;background-color:#fff;'></iframe>", ScriptTemplate = "" });
            ctx.MediaTemplates.AddOrUpdate(a => new { a.MimeType, a.BrowserId }, new MediaTemplateDto { MimeType = "text/html", BrowserId = "default", HtmlTemplate = "<p><a href='{MediaObjectUrl}'>Enlarge file to fit browser window</a></p><iframe src='{MediaObjectUrl}' frameborder='0' style='width:680px;height:600px;border:1px solid #000;background-color:#fff;'></iframe>", ScriptTemplate = "" });
            ctx.MediaTemplates.AddOrUpdate(a => new { a.MimeType, a.BrowserId }, new MediaTemplateDto { MimeType = "application/vnd.openxmlformats-officedocument.wordprocessingml.document", BrowserId = "default", HtmlTemplate = "<p style='margin-bottom:5em;'><a href='{MediaObjectUrl}&sa=1' title='Download {TitleNoHtml}'>Download {TitleNoHtml}</a></p>", ScriptTemplate = "" });
            ctx.MediaTemplates.AddOrUpdate(a => new { a.MimeType, a.BrowserId }, new MediaTemplateDto { MimeType = "application/msword", BrowserId = "default", HtmlTemplate = "<p style='margin-bottom:5em;'><a href='{MediaObjectUrl}&sa=1' title='Download {TitleNoHtml}'>Download {TitleNoHtml}</a></p>", ScriptTemplate = "" });
            ctx.MediaTemplates.AddOrUpdate(a => new { a.MimeType, a.BrowserId }, new MediaTemplateDto { MimeType = "message/rfc822", BrowserId = "default", HtmlTemplate = "<p class='gsp_msgfriendly'>This browser cannot display web archive files (.mht). <a href='{MediaObjectUrl}&sa=1' title='Download {TitleNoHtml}'>Download {TitleNoHtml}</a></p>", ScriptTemplate = "" });
            ctx.MediaTemplates.AddOrUpdate(a => new { a.MimeType, a.BrowserId }, new MediaTemplateDto { MimeType = "message/rfc822", BrowserId = "ie", HtmlTemplate = "<p><a href='{MediaObjectUrl}'>Enlarge to fit browser window</a></p><iframe src='{MediaObjectUrl}' frameborder='0' style='width:680px;height:600px;border:1px solid #000;background-color:#fff;'></iframe>", ScriptTemplate = "" });
        }
Пример #9
0
        private static void InsertGalleries(GalleryDb ctx)
        {
            ctx.Galleries.AddOrUpdate(a => a.IsTemplate, new GalleryDto { Description = "Template Gallery", IsTemplate = true, DateAdded = DateTime.UtcNow });

            if (!ctx.Galleries.Any(g => !g.IsTemplate))
            {
                // Need to add a non-template gallery
                ctx.Galleries.Add(new GalleryDto { Description = "My Gallery", IsTemplate = false, DateAdded = DateTime.UtcNow });
            }

            SaveChanges(ctx); // Need to save so we can get the newly assigned gallery ID.
        }
Пример #10
0
 private static void InsertGallerySettings(GalleryDb ctx)
 {
     foreach (var galleryDto in ctx.Galleries)
     {
         ctx.GallerySettings.AddOrUpdate(a => new { a.FKGalleryId, a.SettingName }, new GallerySettingDto { FKGalleryId = galleryDto.GalleryId, SettingName = "MediaObjectPath", SettingValue = @"gs\mediaobjects" });
         ctx.GallerySettings.AddOrUpdate(a => new { a.FKGalleryId, a.SettingName }, new GallerySettingDto { FKGalleryId = galleryDto.GalleryId, SettingName = "ThumbnailPath", SettingValue = "" });
         ctx.GallerySettings.AddOrUpdate(a => new { a.FKGalleryId, a.SettingName }, new GallerySettingDto { FKGalleryId = galleryDto.GalleryId, SettingName = "OptimizedPath", SettingValue = "" });
         ctx.GallerySettings.AddOrUpdate(a => new { a.FKGalleryId, a.SettingName }, new GallerySettingDto { FKGalleryId = galleryDto.GalleryId, SettingName = "MediaObjectPathIsReadOnly", SettingValue = "False" });
         ctx.GallerySettings.AddOrUpdate(a => new { a.FKGalleryId, a.SettingName }, new GallerySettingDto { FKGalleryId = galleryDto.GalleryId, SettingName = "ShowHeader", SettingValue = "True" });
         ctx.GallerySettings.AddOrUpdate(a => new { a.FKGalleryId, a.SettingName }, new GallerySettingDto { FKGalleryId = galleryDto.GalleryId, SettingName = "GalleryTitle", SettingValue = "Media Gallery" });
         ctx.GallerySettings.AddOrUpdate(a => new { a.FKGalleryId, a.SettingName }, new GallerySettingDto { FKGalleryId = galleryDto.GalleryId, SettingName = "GalleryTitleUrl", SettingValue = "~/" });
         ctx.GallerySettings.AddOrUpdate(a => new { a.FKGalleryId, a.SettingName }, new GallerySettingDto { FKGalleryId = galleryDto.GalleryId, SettingName = "ShowLogin", SettingValue = "True" });
         ctx.GallerySettings.AddOrUpdate(a => new { a.FKGalleryId, a.SettingName }, new GallerySettingDto { FKGalleryId = galleryDto.GalleryId, SettingName = "ShowSearch", SettingValue = "True" });
         ctx.GallerySettings.AddOrUpdate(a => new { a.FKGalleryId, a.SettingName }, new GallerySettingDto { FKGalleryId = galleryDto.GalleryId, SettingName = "ShowErrorDetails", SettingValue = "False" });
         ctx.GallerySettings.AddOrUpdate(a => new { a.FKGalleryId, a.SettingName }, new GallerySettingDto { FKGalleryId = galleryDto.GalleryId, SettingName = "EnableExceptionHandler", SettingValue = "True" });
         ctx.GallerySettings.AddOrUpdate(a => new { a.FKGalleryId, a.SettingName }, new GallerySettingDto { FKGalleryId = galleryDto.GalleryId, SettingName = "DefaultAlbumDirectoryNameLength", SettingValue = "25" });
         ctx.GallerySettings.AddOrUpdate(a => new { a.FKGalleryId, a.SettingName }, new GallerySettingDto { FKGalleryId = galleryDto.GalleryId, SettingName = "SynchAlbumTitleAndDirectoryName", SettingValue = "True" });
         ctx.GallerySettings.AddOrUpdate(a => new { a.FKGalleryId, a.SettingName }, new GallerySettingDto { FKGalleryId = galleryDto.GalleryId, SettingName = "DefaultAlbumSortMetaName", SettingValue = "111" });
         ctx.GallerySettings.AddOrUpdate(a => new { a.FKGalleryId, a.SettingName }, new GallerySettingDto { FKGalleryId = galleryDto.GalleryId, SettingName = "DefaultAlbumSortAscending", SettingValue = "True" });
         ctx.GallerySettings.AddOrUpdate(a => new { a.FKGalleryId, a.SettingName }, new GallerySettingDto { FKGalleryId = galleryDto.GalleryId, SettingName = "EmptyAlbumThumbnailBackgroundColor", SettingValue = "#353535" });
         ctx.GallerySettings.AddOrUpdate(a => new { a.FKGalleryId, a.SettingName }, new GallerySettingDto { FKGalleryId = galleryDto.GalleryId, SettingName = "EmptyAlbumThumbnailText", SettingValue = "Empty" });
         ctx.GallerySettings.AddOrUpdate(a => new { a.FKGalleryId, a.SettingName }, new GallerySettingDto { FKGalleryId = galleryDto.GalleryId, SettingName = "EmptyAlbumThumbnailFontName", SettingValue = "Verdana" });
         ctx.GallerySettings.AddOrUpdate(a => new { a.FKGalleryId, a.SettingName }, new GallerySettingDto { FKGalleryId = galleryDto.GalleryId, SettingName = "EmptyAlbumThumbnailFontSize", SettingValue = "13" });
         ctx.GallerySettings.AddOrUpdate(a => new { a.FKGalleryId, a.SettingName }, new GallerySettingDto { FKGalleryId = galleryDto.GalleryId, SettingName = "EmptyAlbumThumbnailFontColor", SettingValue = "White" });
         ctx.GallerySettings.AddOrUpdate(a => new { a.FKGalleryId, a.SettingName }, new GallerySettingDto { FKGalleryId = galleryDto.GalleryId, SettingName = "EmptyAlbumThumbnailWidthToHeightRatio", SettingValue = "1.33" });
         ctx.GallerySettings.AddOrUpdate(a => new { a.FKGalleryId, a.SettingName }, new GallerySettingDto { FKGalleryId = galleryDto.GalleryId, SettingName = "MaxThumbnailTitleDisplayLength", SettingValue = "50" });
         ctx.GallerySettings.AddOrUpdate(a => new { a.FKGalleryId, a.SettingName }, new GallerySettingDto { FKGalleryId = galleryDto.GalleryId, SettingName = "AllowUserEnteredHtml", SettingValue = "False" });
         ctx.GallerySettings.AddOrUpdate(a => new { a.FKGalleryId, a.SettingName }, new GallerySettingDto { FKGalleryId = galleryDto.GalleryId, SettingName = "AllowUserEnteredJavascript", SettingValue = "False" });
         ctx.GallerySettings.AddOrUpdate(a => new { a.FKGalleryId, a.SettingName }, new GallerySettingDto { FKGalleryId = galleryDto.GalleryId, SettingName = "AllowedHtmlTags", SettingValue = "p,a,div,span,br,ul,ol,li,table,tr,td,th,h1,h2,h3,h4,h5,h6,strong,b,em,i,u,cite,blockquote,address,pre,hr,img,dl,dt,dd,code,tt" });
         ctx.GallerySettings.AddOrUpdate(a => new { a.FKGalleryId, a.SettingName }, new GallerySettingDto { FKGalleryId = galleryDto.GalleryId, SettingName = "AllowedHtmlAttributes", SettingValue = "href,class,style,id,src,title,alt,target,name" });
         ctx.GallerySettings.AddOrUpdate(a => new { a.FKGalleryId, a.SettingName }, new GallerySettingDto { FKGalleryId = galleryDto.GalleryId, SettingName = "AllowCopyingReadOnlyObjects", SettingValue = "False" });
         ctx.GallerySettings.AddOrUpdate(a => new { a.FKGalleryId, a.SettingName }, new GallerySettingDto { FKGalleryId = galleryDto.GalleryId, SettingName = "AllowManageOwnAccount", SettingValue = "True" });
         ctx.GallerySettings.AddOrUpdate(a => new { a.FKGalleryId, a.SettingName }, new GallerySettingDto { FKGalleryId = galleryDto.GalleryId, SettingName = "AllowDeleteOwnAccount", SettingValue = "True" });
         ctx.GallerySettings.AddOrUpdate(a => new { a.FKGalleryId, a.SettingName }, new GallerySettingDto { FKGalleryId = galleryDto.GalleryId, SettingName = "MediaObjectTransitionType", SettingValue = "Fade" });
         ctx.GallerySettings.AddOrUpdate(a => new { a.FKGalleryId, a.SettingName }, new GallerySettingDto { FKGalleryId = galleryDto.GalleryId, SettingName = "MediaObjectTransitionDuration", SettingValue = "0.2" });
         ctx.GallerySettings.AddOrUpdate(a => new { a.FKGalleryId, a.SettingName }, new GallerySettingDto { FKGalleryId = galleryDto.GalleryId, SettingName = "SlideshowInterval", SettingValue = "4000" });
         ctx.GallerySettings.AddOrUpdate(a => new { a.FKGalleryId, a.SettingName }, new GallerySettingDto { FKGalleryId = galleryDto.GalleryId, SettingName = "AllowUnspecifiedMimeTypes", SettingValue = "False" });
         ctx.GallerySettings.AddOrUpdate(a => new { a.FKGalleryId, a.SettingName }, new GallerySettingDto { FKGalleryId = galleryDto.GalleryId, SettingName = "ImageTypesStandardBrowsersCanDisplay", SettingValue = ".jpg,.jpeg,.gif,.png" });
         ctx.GallerySettings.AddOrUpdate(a => new { a.FKGalleryId, a.SettingName }, new GallerySettingDto { FKGalleryId = galleryDto.GalleryId, SettingName = "ImageMagickFileTypes", SettingValue = ".pdf,.txt,.eps,.psd,.tif,.tiff" });
         ctx.GallerySettings.AddOrUpdate(a => new { a.FKGalleryId, a.SettingName }, new GallerySettingDto { FKGalleryId = galleryDto.GalleryId, SettingName = "AllowAnonymousRating", SettingValue = "True" });
         ctx.GallerySettings.AddOrUpdate(a => new { a.FKGalleryId, a.SettingName }, new GallerySettingDto { FKGalleryId = galleryDto.GalleryId, SettingName = "ExtractMetadata", SettingValue = "True" });
         ctx.GallerySettings.AddOrUpdate(a => new { a.FKGalleryId, a.SettingName }, new GallerySettingDto { FKGalleryId = galleryDto.GalleryId, SettingName = "ExtractMetadataUsingWpf", SettingValue = "True" });
         ctx.GallerySettings.AddOrUpdate(a => new { a.FKGalleryId, a.SettingName }, new GallerySettingDto { FKGalleryId = galleryDto.GalleryId, SettingName = "MetadataDisplaySettings", SettingValue = "[{'MetadataItem':29,'Name':'Title','DisplayName':'TITLE','IsVisibleForAlbum':true,'IsVisibleForGalleryObject':true,'IsEditable':true,'DefaultValue':'{Title}','Sequence':0},{'MetadataItem':41,'Name':'Caption','DisplayName':'CAPTION','IsVisibleForAlbum':true,'IsVisibleForGalleryObject':true,'IsEditable':true,'DefaultValue':'{Comment}','Sequence':1},{'MetadataItem':22,'Name':'Tags','DisplayName':'TAGS','IsVisibleForAlbum':true,'IsVisibleForGalleryObject':true,'IsEditable':true,'DefaultValue':'{Tags}','Sequence':2},{'MetadataItem':42,'Name':'People','DisplayName':'PEOPLE','IsVisibleForAlbum':true,'IsVisibleForGalleryObject':true,'IsEditable':true,'DefaultValue':'{People}','Sequence':3},{'MetadataItem':112,'Name':'HtmlSource','DisplayName':'SOURCE HTML','IsVisibleForAlbum':false,'IsVisibleForGalleryObject':true,'IsEditable':true,'DefaultValue':'{HtmlSource}','Sequence':4},{'MetadataItem':34,'Name':'FileName','DisplayName':'File name','IsVisibleForAlbum':false,'IsVisibleForGalleryObject':true,'IsEditable':false,'DefaultValue':'{FileName}','Sequence':5},{'MetadataItem':35,'Name':'FileNameWithoutExtension','DisplayName':'File name','IsVisibleForAlbum':false,'IsVisibleForGalleryObject':false,'IsEditable':false,'DefaultValue':'{FileNameWithoutExtension}','Sequence':6},{'MetadataItem':111,'Name':'DateAdded','DisplayName':'Date Added','IsVisibleForAlbum':true,'IsVisibleForGalleryObject':true,'IsEditable':false,'DefaultValue':'{DateAdded}','Sequence':7},{'MetadataItem':8,'Name':'DatePictureTaken','DisplayName':'Date photo taken','IsVisibleForAlbum':false,'IsVisibleForGalleryObject':true,'IsEditable':false,'DefaultValue':'{DatePictureTaken}','Sequence':8},{'MetadataItem':26,'Name':'Rating','DisplayName':'Rating','IsVisibleForAlbum':false,'IsVisibleForGalleryObject':true,'IsEditable':true,'DefaultValue':'{Rating}','Sequence':9},{'MetadataItem':102,'Name':'GpsLocationWithMapLink','DisplayName':'Geotag','IsVisibleForAlbum':false,'IsVisibleForGalleryObject':true,'IsEditable':false,'DefaultValue':'<a href=\\'http://maps.google.com/maps?q={GpsLatitude},{GpsLongitude}\\' target=\\'_blank\\' title=\\'View map\\'>{GpsLocation}</a>','Sequence':10},{'MetadataItem':106,'Name':'GpsDestLocationWithMapLink','DisplayName':'Geotag','IsVisibleForAlbum':false,'IsVisibleForGalleryObject':true,'IsEditable':false,'DefaultValue':'<a href=\\'http://maps.google.com/maps?q={GpsLatitude},{GpsLongitude}\\' target=\\'_blank\\' title=\\'View map\\'>{GpsLocation}</a>','Sequence':11},{'MetadataItem':43,'Name':'Orientation','DisplayName':'Orientation','IsVisibleForAlbum':false,'IsVisibleForGalleryObject':true,'IsEditable':false,'DefaultValue':'{Orientation}','Sequence':12},{'MetadataItem':14,'Name':'ExposureProgram','DisplayName':'Exposure program','IsVisibleForAlbum':false,'IsVisibleForGalleryObject':true,'IsEditable':false,'DefaultValue':'{ExposureProgram}','Sequence':13},{'MetadataItem':9,'Name':'Description','DisplayName':'Description','IsVisibleForAlbum':false,'IsVisibleForGalleryObject':true,'IsEditable':false,'DefaultValue':'{Description}','Sequence':14},{'MetadataItem':5,'Name':'Comment','DisplayName':'Comment','IsVisibleForAlbum':false,'IsVisibleForGalleryObject':false,'IsEditable':false,'DefaultValue':'{Comment}','Sequence':15},{'MetadataItem':28,'Name':'Subject','DisplayName':'Subject','IsVisibleForAlbum':false,'IsVisibleForGalleryObject':true,'IsEditable':false,'DefaultValue':'{Subject}','Sequence':16},{'MetadataItem':2,'Name':'Author','DisplayName':'Author','IsVisibleForAlbum':false,'IsVisibleForGalleryObject':true,'IsEditable':false,'DefaultValue':'{Author}','Sequence':17},{'MetadataItem':4,'Name':'CameraModel','DisplayName':'Camera model','IsVisibleForAlbum':false,'IsVisibleForGalleryObject':true,'IsEditable':false,'DefaultValue':'{CameraModel}','Sequence':18},{'MetadataItem':6,'Name':'ColorRepresentation','DisplayName':'Color representation','IsVisibleForAlbum':false,'IsVisibleForGalleryObject':false,'IsEditable':false,'DefaultValue':'{ColorRepresentation}','Sequence':19},{'MetadataItem':7,'Name':'Copyright','DisplayName':'Copyright','IsVisibleForAlbum':false,'IsVisibleForGalleryObject':true,'IsEditable':false,'DefaultValue':'{Copyright}','Sequence':20},{'MetadataItem':12,'Name':'EquipmentManufacturer','DisplayName':'Camera maker','IsVisibleForAlbum':false,'IsVisibleForGalleryObject':true,'IsEditable':false,'DefaultValue':'{EquipmentManufacturer}','Sequence':21},{'MetadataItem':13,'Name':'ExposureCompensation','DisplayName':'Exposure compensation','IsVisibleForAlbum':false,'IsVisibleForGalleryObject':true,'IsEditable':false,'DefaultValue':'{ExposureCompensation}','Sequence':22},{'MetadataItem':15,'Name':'ExposureTime','DisplayName':'Exposure time','IsVisibleForAlbum':false,'IsVisibleForGalleryObject':true,'IsEditable':false,'DefaultValue':'{ExposureTime}','Sequence':23},{'MetadataItem':16,'Name':'FlashMode','DisplayName':'Flash mode','IsVisibleForAlbum':false,'IsVisibleForGalleryObject':true,'IsEditable':false,'DefaultValue':'{FlashMode}','Sequence':24},{'MetadataItem':17,'Name':'FNumber','DisplayName':'F-stop','IsVisibleForAlbum':false,'IsVisibleForGalleryObject':true,'IsEditable':false,'DefaultValue':'{FNumber}','Sequence':25},{'MetadataItem':18,'Name':'FocalLength','DisplayName':'Focal length','IsVisibleForAlbum':false,'IsVisibleForGalleryObject':true,'IsEditable':false,'DefaultValue':'{FocalLength}','Sequence':26},{'MetadataItem':21,'Name':'IsoSpeed','DisplayName':'ISO speed','IsVisibleForAlbum':false,'IsVisibleForGalleryObject':true,'IsEditable':false,'DefaultValue':'{IsoSpeed}','Sequence':27},{'MetadataItem':23,'Name':'LensAperture','DisplayName':'Aperture','IsVisibleForAlbum':false,'IsVisibleForGalleryObject':true,'IsEditable':false,'DefaultValue':'{LensAperture}','Sequence':28},{'MetadataItem':24,'Name':'LightSource','DisplayName':'Light source','IsVisibleForAlbum':false,'IsVisibleForGalleryObject':true,'IsEditable':false,'DefaultValue':'{LightSource}','Sequence':29},{'MetadataItem':10,'Name':'Dimensions','DisplayName':'Dimensions (pixels)','IsVisibleForAlbum':false,'IsVisibleForGalleryObject':false,'IsEditable':false,'DefaultValue':'{Dimensions}','Sequence':30},{'MetadataItem':25,'Name':'MeteringMode','DisplayName':'Metering mode','IsVisibleForAlbum':false,'IsVisibleForGalleryObject':true,'IsEditable':false,'DefaultValue':'{MeteringMode}','Sequence':31},{'MetadataItem':27,'Name':'SubjectDistance','DisplayName':'Subject distance','IsVisibleForAlbum':false,'IsVisibleForGalleryObject':true,'IsEditable':false,'DefaultValue':'{SubjectDistance}','Sequence':32},{'MetadataItem':11,'Name':'Duration','DisplayName':'Duration','IsVisibleForAlbum':false,'IsVisibleForGalleryObject':true,'IsEditable':false,'DefaultValue':'{Duration}','Sequence':33},{'MetadataItem':1,'Name':'AudioFormat','DisplayName':'Audio format','IsVisibleForAlbum':false,'IsVisibleForGalleryObject':true,'IsEditable':false,'DefaultValue':'{AudioFormat}','Sequence':34},{'MetadataItem':32,'Name':'VideoFormat','DisplayName':'Video format','IsVisibleForAlbum':false,'IsVisibleForGalleryObject':true,'IsEditable':false,'DefaultValue':'{VideoFormat}','Sequence':35},{'MetadataItem':3,'Name':'BitRate','DisplayName':'Bit rate','IsVisibleForAlbum':false,'IsVisibleForGalleryObject':true,'IsEditable':false,'DefaultValue':'{BitRate}','Sequence':36},{'MetadataItem':0,'Name':'AudioBitRate','DisplayName':'AudioBitRate','IsVisibleForAlbum':false,'IsVisibleForGalleryObject':true,'IsEditable':false,'DefaultValue':'{AudioBitRate}','Sequence':37},{'MetadataItem':31,'Name':'VideoBitRate','DisplayName':'VideoBitRate','IsVisibleForAlbum':false,'IsVisibleForGalleryObject':true,'IsEditable':false,'DefaultValue':'{VideoBitRate}','Sequence':38},{'MetadataItem':20,'Name':'HorizontalResolution','DisplayName':'Horizontal resolution','IsVisibleForAlbum':false,'IsVisibleForGalleryObject':false,'IsEditable':false,'DefaultValue':'{HorizontalResolution}','Sequence':39},{'MetadataItem':30,'Name':'VerticalResolution','DisplayName':'Vertical resolution','IsVisibleForAlbum':false,'IsVisibleForGalleryObject':false,'IsEditable':false,'DefaultValue':'{VerticalResolution}','Sequence':40},{'MetadataItem':33,'Name':'Width','DisplayName':'Width','IsVisibleForAlbum':false,'IsVisibleForGalleryObject':true,'IsEditable':false,'DefaultValue':'{Width}','Sequence':41},{'MetadataItem':19,'Name':'Height','DisplayName':'Height','IsVisibleForAlbum':false,'IsVisibleForGalleryObject':true,'IsEditable':false,'DefaultValue':'{Height}','Sequence':42},{'MetadataItem':36,'Name':'FileSizeKb','DisplayName':'File size','IsVisibleForAlbum':false,'IsVisibleForGalleryObject':true,'IsEditable':false,'DefaultValue':'{FileSizeKb}','Sequence':43},{'MetadataItem':37,'Name':'DateFileCreated','DisplayName':'File created','IsVisibleForAlbum':false,'IsVisibleForGalleryObject':false,'IsEditable':false,'DefaultValue':'{DateFileCreated}','Sequence':44},{'MetadataItem':38,'Name':'DateFileCreatedUtc','DisplayName':'File created (UTC)','IsVisibleForAlbum':false,'IsVisibleForGalleryObject':false,'IsEditable':false,'DefaultValue':'{DateFileCreatedUtc}','Sequence':45},{'MetadataItem':39,'Name':'DateFileLastModified','DisplayName':'File last modified','IsVisibleForAlbum':false,'IsVisibleForGalleryObject':false,'IsEditable':false,'DefaultValue':'{DateFileLastModified}','Sequence':46},{'MetadataItem':40,'Name':'DateFileLastModifiedUtc','DisplayName':'File last modified (UTC)','IsVisibleForAlbum':false,'IsVisibleForGalleryObject':false,'IsEditable':false,'DefaultValue':'{DateFileLastModifiedUtc}','Sequence':47},{'MetadataItem':101,'Name':'GpsLocation','DisplayName':'GPS location','IsVisibleForAlbum':false,'IsVisibleForGalleryObject':false,'IsEditable':false,'DefaultValue':'{GpsLocation}','Sequence':48},{'MetadataItem':103,'Name':'GpsLatitude','DisplayName':'GPS latitude','IsVisibleForAlbum':false,'IsVisibleForGalleryObject':false,'IsEditable':false,'DefaultValue':'{GpsLatitude}','Sequence':49},{'MetadataItem':104,'Name':'GpsLongitude','DisplayName':'GPS longitude','IsVisibleForAlbum':false,'IsVisibleForGalleryObject':false,'IsEditable':false,'DefaultValue':'{GpsLongitude}','Sequence':50},{'MetadataItem':105,'Name':'GpsDestLocation','DisplayName':'GPS dest. location','IsVisibleForAlbum':false,'IsVisibleForGalleryObject':false,'IsEditable':false,'DefaultValue':'{GpsDestLocation}','Sequence':51},{'MetadataItem':108,'Name':'GpsDestLongitude','DisplayName':'GPS dest. longitude','IsVisibleForAlbum':false,'IsVisibleForGalleryObject':false,'IsEditable':false,'DefaultValue':'{GpsDestLongitude}','Sequence':52},{'MetadataItem':107,'Name':'GpsDestLatitude','DisplayName':'GPS dest. latitude','IsVisibleForAlbum':false,'IsVisibleForGalleryObject':false,'IsEditable':false,'DefaultValue':'{GpsDestLatitude}','Sequence':53},{'MetadataItem':110,'Name':'GpsVersion','DisplayName':'GPS version','IsVisibleForAlbum':false,'IsVisibleForGalleryObject':false,'IsEditable':false,'DefaultValue':'{GpsVersion}','Sequence':54},{'MetadataItem':109,'Name':'GpsAltitude','DisplayName':'GPS altitude','IsVisibleForAlbum':false,'IsVisibleForGalleryObject':false,'IsEditable':false,'DefaultValue':'{GpsAltitude}','Sequence':55},{'MetadataItem':113,'Name':'RatingCount','DisplayName':'Number of ratings','IsVisibleForAlbum':false,'IsVisibleForGalleryObject':false,'IsEditable':false,'DefaultValue':'0','Sequence':56},{'MetadataItem':1012,'Name':'IptcOriginalTransmissionReference','DisplayName':'Transmission ref.','IsVisibleForAlbum':false,'IsVisibleForGalleryObject':true,'IsEditable':false,'DefaultValue':'{IptcOriginalTransmissionReference}','Sequence':57},{'MetadataItem':1013,'Name':'IptcProvinceState','DisplayName':'Province/State','IsVisibleForAlbum':false,'IsVisibleForGalleryObject':true,'IsEditable':false,'DefaultValue':'{IptcProvinceState}','Sequence':58},{'MetadataItem':1010,'Name':'IptcKeywords','DisplayName':'IptcKeywords','IsVisibleForAlbum':false,'IsVisibleForGalleryObject':true,'IsEditable':false,'DefaultValue':'{IptcKeywords}','Sequence':59},{'MetadataItem':1011,'Name':'IptcObjectName','DisplayName':'Object name','IsVisibleForAlbum':false,'IsVisibleForGalleryObject':true,'IsEditable':false,'DefaultValue':'{IptcObjectName}','Sequence':60},{'MetadataItem':1014,'Name':'IptcRecordVersion','DisplayName':'Record version','IsVisibleForAlbum':false,'IsVisibleForGalleryObject':true,'IsEditable':false,'DefaultValue':'{IptcRecordVersion}','Sequence':61},{'MetadataItem':1017,'Name':'IptcSublocation','DisplayName':'Sub-location','IsVisibleForAlbum':false,'IsVisibleForGalleryObject':true,'IsEditable':false,'DefaultValue':'{IptcSublocation}','Sequence':62},{'MetadataItem':1018,'Name':'IptcWriterEditor','DisplayName':'Writer/Editor','IsVisibleForAlbum':false,'IsVisibleForGalleryObject':true,'IsEditable':false,'DefaultValue':'{IptcWriterEditor}','Sequence':63},{'MetadataItem':1015,'Name':'IptcSource','DisplayName':'Source','IsVisibleForAlbum':false,'IsVisibleForGalleryObject':true,'IsEditable':false,'DefaultValue':'{IptcSource}','Sequence':64},{'MetadataItem':1016,'Name':'IptcSpecialInstructions','DisplayName':'Instructions','IsVisibleForAlbum':false,'IsVisibleForGalleryObject':true,'IsEditable':false,'DefaultValue':'{IptcSpecialInstructions}','Sequence':65},{'MetadataItem':1003,'Name':'IptcCaption','DisplayName':'Caption','IsVisibleForAlbum':false,'IsVisibleForGalleryObject':true,'IsEditable':false,'DefaultValue':'{IptcCaption}','Sequence':66},{'MetadataItem':1004,'Name':'IptcCity','DisplayName':'City','IsVisibleForAlbum':false,'IsVisibleForGalleryObject':true,'IsEditable':false,'DefaultValue':'{IptcCity}','Sequence':67},{'MetadataItem':1001,'Name':'IptcByline','DisplayName':'By-line','IsVisibleForAlbum':false,'IsVisibleForGalleryObject':true,'IsEditable':false,'DefaultValue':'{IptcByline}','Sequence':68},{'MetadataItem':1002,'Name':'IptcBylineTitle','DisplayName':'By-line title','IsVisibleForAlbum':false,'IsVisibleForGalleryObject':true,'IsEditable':false,'DefaultValue':'{IptcBylineTitle}','Sequence':69},{'MetadataItem':1005,'Name':'IptcCopyrightNotice','DisplayName':'Copyright','IsVisibleForAlbum':false,'IsVisibleForGalleryObject':true,'IsEditable':false,'DefaultValue':'{IptcCopyrightNotice}','Sequence':70},{'MetadataItem':1008,'Name':'IptcDateCreated','DisplayName':'Date created','IsVisibleForAlbum':false,'IsVisibleForGalleryObject':true,'IsEditable':false,'DefaultValue':'{IptcDateCreated}','Sequence':71},{'MetadataItem':1009,'Name':'IptcHeadline','DisplayName':'Headline','IsVisibleForAlbum':false,'IsVisibleForGalleryObject':true,'IsEditable':false,'DefaultValue':'{IptcHeadline}','Sequence':72},{'MetadataItem':1006,'Name':'IptcCountryPrimaryLocationName','DisplayName':'Country','IsVisibleForAlbum':false,'IsVisibleForGalleryObject':true,'IsEditable':false,'DefaultValue':'{IptcCountryPrimaryLocationName}','Sequence':73},{'MetadataItem':1007,'Name':'IptcCredit','DisplayName':'Credit','IsVisibleForAlbum':false,'IsVisibleForGalleryObject':true,'IsEditable':false,'DefaultValue':'{IptcCredit}','Sequence':74},{'MetadataItem':2000,'Name':'Custom1','DisplayName':'Custom1','IsVisibleForAlbum':false,'IsVisibleForGalleryObject':false,'IsEditable':false,'DefaultValue':'','Sequence':75},{'MetadataItem':2001,'Name':'Custom2','DisplayName':'Custom2','IsVisibleForAlbum':false,'IsVisibleForGalleryObject':false,'IsEditable':false,'DefaultValue':'','Sequence':76},{'MetadataItem':2002,'Name':'Custom3','DisplayName':'Custom3','IsVisibleForAlbum':false,'IsVisibleForGalleryObject':false,'IsEditable':false,'DefaultValue':'','Sequence':77},{'MetadataItem':2003,'Name':'Custom4','DisplayName':'Custom4','IsVisibleForAlbum':false,'IsVisibleForGalleryObject':false,'IsEditable':false,'DefaultValue':'','Sequence':78},{'MetadataItem':2004,'Name':'Custom5','DisplayName':'Custom5','IsVisibleForAlbum':false,'IsVisibleForGalleryObject':false,'IsEditable':false,'DefaultValue':'','Sequence':79},{'MetadataItem':2005,'Name':'Custom6','DisplayName':'Custom6','IsVisibleForAlbum':false,'IsVisibleForGalleryObject':false,'IsEditable':false,'DefaultValue':'','Sequence':80},{'MetadataItem':2006,'Name':'Custom7','DisplayName':'Custom7','IsVisibleForAlbum':false,'IsVisibleForGalleryObject':false,'IsEditable':false,'DefaultValue':'','Sequence':81},{'MetadataItem':2007,'Name':'Custom8','DisplayName':'Custom8','IsVisibleForAlbum':false,'IsVisibleForGalleryObject':false,'IsEditable':false,'DefaultValue':'','Sequence':82},{'MetadataItem':2008,'Name':'Custom9','DisplayName':'Custom9','IsVisibleForAlbum':false,'IsVisibleForGalleryObject':false,'IsEditable':false,'DefaultValue':'','Sequence':83},{'MetadataItem':2009,'Name':'Custom10','DisplayName':'Custom10','IsVisibleForAlbum':false,'IsVisibleForGalleryObject':false,'IsEditable':false,'DefaultValue':'','Sequence':84},{'MetadataItem':2010,'Name':'Custom11','DisplayName':'Custom11','IsVisibleForAlbum':false,'IsVisibleForGalleryObject':false,'IsEditable':false,'DefaultValue':'','Sequence':85},{'MetadataItem':2011,'Name':'Custom12','DisplayName':'Custom12','IsVisibleForAlbum':false,'IsVisibleForGalleryObject':false,'IsEditable':false,'DefaultValue':'','Sequence':86},{'MetadataItem':2012,'Name':'Custom13','DisplayName':'Custom13','IsVisibleForAlbum':false,'IsVisibleForGalleryObject':false,'IsEditable':false,'DefaultValue':'','Sequence':87},{'MetadataItem':2013,'Name':'Custom14','DisplayName':'Custom14','IsVisibleForAlbum':false,'IsVisibleForGalleryObject':false,'IsEditable':false,'DefaultValue':'','Sequence':88},{'MetadataItem':2014,'Name':'Custom15','DisplayName':'Custom15','IsVisibleForAlbum':false,'IsVisibleForGalleryObject':false,'IsEditable':false,'DefaultValue':'','Sequence':89},{'MetadataItem':2015,'Name':'Custom16','DisplayName':'Custom16','IsVisibleForAlbum':false,'IsVisibleForGalleryObject':false,'IsEditable':false,'DefaultValue':'','Sequence':90},{'MetadataItem':2016,'Name':'Custom17','DisplayName':'Custom17','IsVisibleForAlbum':false,'IsVisibleForGalleryObject':false,'IsEditable':false,'DefaultValue':'','Sequence':91},{'MetadataItem':2017,'Name':'Custom18','DisplayName':'Custom18','IsVisibleForAlbum':false,'IsVisibleForGalleryObject':false,'IsEditable':false,'DefaultValue':'','Sequence':92},{'MetadataItem':2018,'Name':'Custom19','DisplayName':'Custom19','IsVisibleForAlbum':false,'IsVisibleForGalleryObject':false,'IsEditable':false,'DefaultValue':'','Sequence':93},{'MetadataItem':2019,'Name':'Custom20','DisplayName':'Custom20','IsVisibleForAlbum':false,'IsVisibleForGalleryObject':false,'IsEditable':false,'DefaultValue':'','Sequence':94}]" });
         ctx.GallerySettings.AddOrUpdate(a => new { a.FKGalleryId, a.SettingName }, new GallerySettingDto { FKGalleryId = galleryDto.GalleryId, SettingName = "MetadataDateTimeFormatString", SettingValue = "MMM dd, yyyy h:mm:ss tt" });
         ctx.GallerySettings.AddOrUpdate(a => new { a.FKGalleryId, a.SettingName }, new GallerySettingDto { FKGalleryId = galleryDto.GalleryId, SettingName = "EnableMediaObjectDownload", SettingValue = "True" });
         ctx.GallerySettings.AddOrUpdate(a => new { a.FKGalleryId, a.SettingName }, new GallerySettingDto { FKGalleryId = galleryDto.GalleryId, SettingName = "EnableAnonymousOriginalMediaObjectDownload", SettingValue = "True" });
         ctx.GallerySettings.AddOrUpdate(a => new { a.FKGalleryId, a.SettingName }, new GallerySettingDto { FKGalleryId = galleryDto.GalleryId, SettingName = "EnableGalleryObjectZipDownload", SettingValue = "True" });
         ctx.GallerySettings.AddOrUpdate(a => new { a.FKGalleryId, a.SettingName }, new GallerySettingDto { FKGalleryId = galleryDto.GalleryId, SettingName = "EnableAlbumZipDownload", SettingValue = "True" });
         ctx.GallerySettings.AddOrUpdate(a => new { a.FKGalleryId, a.SettingName }, new GallerySettingDto { FKGalleryId = galleryDto.GalleryId, SettingName = "EnableSlideShow", SettingValue = "True" });
         ctx.GallerySettings.AddOrUpdate(a => new { a.FKGalleryId, a.SettingName }, new GallerySettingDto { FKGalleryId = galleryDto.GalleryId, SettingName = "SlideShowType", SettingValue = "FullScreen" });
         ctx.GallerySettings.AddOrUpdate(a => new { a.FKGalleryId, a.SettingName }, new GallerySettingDto { FKGalleryId = galleryDto.GalleryId, SettingName = "MaxThumbnailLength", SettingValue = "115" });
         ctx.GallerySettings.AddOrUpdate(a => new { a.FKGalleryId, a.SettingName }, new GallerySettingDto { FKGalleryId = galleryDto.GalleryId, SettingName = "ThumbnailImageJpegQuality", SettingValue = "70" });
         ctx.GallerySettings.AddOrUpdate(a => new { a.FKGalleryId, a.SettingName }, new GallerySettingDto { FKGalleryId = galleryDto.GalleryId, SettingName = "ThumbnailFileNamePrefix", SettingValue = "zThumb_" });
         ctx.GallerySettings.AddOrUpdate(a => new { a.FKGalleryId, a.SettingName }, new GallerySettingDto { FKGalleryId = galleryDto.GalleryId, SettingName = "MaxOptimizedLength", SettingValue = "640" });
         ctx.GallerySettings.AddOrUpdate(a => new { a.FKGalleryId, a.SettingName }, new GallerySettingDto { FKGalleryId = galleryDto.GalleryId, SettingName = "OptimizedImageJpegQuality", SettingValue = "70" });
         ctx.GallerySettings.AddOrUpdate(a => new { a.FKGalleryId, a.SettingName }, new GallerySettingDto { FKGalleryId = galleryDto.GalleryId, SettingName = "OptimizedImageTriggerSizeKb", SettingValue = "50" });
         ctx.GallerySettings.AddOrUpdate(a => new { a.FKGalleryId, a.SettingName }, new GallerySettingDto { FKGalleryId = galleryDto.GalleryId, SettingName = "OptimizedFileNamePrefix", SettingValue = "zOpt_" });
         ctx.GallerySettings.AddOrUpdate(a => new { a.FKGalleryId, a.SettingName }, new GallerySettingDto { FKGalleryId = galleryDto.GalleryId, SettingName = "OriginalImageJpegQuality", SettingValue = "95" });
         ctx.GallerySettings.AddOrUpdate(a => new { a.FKGalleryId, a.SettingName }, new GallerySettingDto { FKGalleryId = galleryDto.GalleryId, SettingName = "DiscardOriginalImageDuringImport", SettingValue = "False" });
         ctx.GallerySettings.AddOrUpdate(a => new { a.FKGalleryId, a.SettingName }, new GallerySettingDto { FKGalleryId = galleryDto.GalleryId, SettingName = "ApplyWatermark", SettingValue = "False" });
         ctx.GallerySettings.AddOrUpdate(a => new { a.FKGalleryId, a.SettingName }, new GallerySettingDto { FKGalleryId = galleryDto.GalleryId, SettingName = "ApplyWatermarkToThumbnails", SettingValue = "False" });
         ctx.GallerySettings.AddOrUpdate(a => new { a.FKGalleryId, a.SettingName }, new GallerySettingDto { FKGalleryId = galleryDto.GalleryId, SettingName = "WatermarkText", SettingValue = "Copyright 2014, Your Company Name, All Rights Reserved" });
         ctx.GallerySettings.AddOrUpdate(a => new { a.FKGalleryId, a.SettingName }, new GallerySettingDto { FKGalleryId = galleryDto.GalleryId, SettingName = "WatermarkTextFontName", SettingValue = "Verdana" });
         ctx.GallerySettings.AddOrUpdate(a => new { a.FKGalleryId, a.SettingName }, new GallerySettingDto { FKGalleryId = galleryDto.GalleryId, SettingName = "WatermarkTextFontSize", SettingValue = "13" });
         ctx.GallerySettings.AddOrUpdate(a => new { a.FKGalleryId, a.SettingName }, new GallerySettingDto { FKGalleryId = galleryDto.GalleryId, SettingName = "WatermarkTextWidthPercent", SettingValue = "50" });
         ctx.GallerySettings.AddOrUpdate(a => new { a.FKGalleryId, a.SettingName }, new GallerySettingDto { FKGalleryId = galleryDto.GalleryId, SettingName = "WatermarkTextColor", SettingValue = "White" });
         ctx.GallerySettings.AddOrUpdate(a => new { a.FKGalleryId, a.SettingName }, new GallerySettingDto { FKGalleryId = galleryDto.GalleryId, SettingName = "WatermarkTextOpacityPercent", SettingValue = "35" });
         ctx.GallerySettings.AddOrUpdate(a => new { a.FKGalleryId, a.SettingName }, new GallerySettingDto { FKGalleryId = galleryDto.GalleryId, SettingName = "WatermarkTextLocation", SettingValue = "BottomCenter" });
         ctx.GallerySettings.AddOrUpdate(a => new { a.FKGalleryId, a.SettingName }, new GallerySettingDto { FKGalleryId = galleryDto.GalleryId, SettingName = "WatermarkImagePath", SettingValue = "gs/skins/dark/images/gsp-logo.png" });
         ctx.GallerySettings.AddOrUpdate(a => new { a.FKGalleryId, a.SettingName }, new GallerySettingDto { FKGalleryId = galleryDto.GalleryId, SettingName = "WatermarkImageWidthPercent", SettingValue = "85" });
         ctx.GallerySettings.AddOrUpdate(a => new { a.FKGalleryId, a.SettingName }, new GallerySettingDto { FKGalleryId = galleryDto.GalleryId, SettingName = "WatermarkImageOpacityPercent", SettingValue = "25" });
         ctx.GallerySettings.AddOrUpdate(a => new { a.FKGalleryId, a.SettingName }, new GallerySettingDto { FKGalleryId = galleryDto.GalleryId, SettingName = "WatermarkImageLocation", SettingValue = "MiddleCenter" });
         ctx.GallerySettings.AddOrUpdate(a => new { a.FKGalleryId, a.SettingName }, new GallerySettingDto { FKGalleryId = galleryDto.GalleryId, SettingName = "SendEmailOnError", SettingValue = "True" });
         ctx.GallerySettings.AddOrUpdate(a => new { a.FKGalleryId, a.SettingName }, new GallerySettingDto { FKGalleryId = galleryDto.GalleryId, SettingName = "AutoStartMediaObject", SettingValue = "False" });
         ctx.GallerySettings.AddOrUpdate(a => new { a.FKGalleryId, a.SettingName }, new GallerySettingDto { FKGalleryId = galleryDto.GalleryId, SettingName = "DefaultVideoPlayerWidth", SettingValue = "640" });
         ctx.GallerySettings.AddOrUpdate(a => new { a.FKGalleryId, a.SettingName }, new GallerySettingDto { FKGalleryId = galleryDto.GalleryId, SettingName = "DefaultVideoPlayerHeight", SettingValue = "480" });
         ctx.GallerySettings.AddOrUpdate(a => new { a.FKGalleryId, a.SettingName }, new GallerySettingDto { FKGalleryId = galleryDto.GalleryId, SettingName = "DefaultAudioPlayerWidth", SettingValue = "600" });
         ctx.GallerySettings.AddOrUpdate(a => new { a.FKGalleryId, a.SettingName }, new GallerySettingDto { FKGalleryId = galleryDto.GalleryId, SettingName = "DefaultAudioPlayerHeight", SettingValue = "60" });
         ctx.GallerySettings.AddOrUpdate(a => new { a.FKGalleryId, a.SettingName }, new GallerySettingDto { FKGalleryId = galleryDto.GalleryId, SettingName = "DefaultGenericObjectWidth", SettingValue = "640" });
         ctx.GallerySettings.AddOrUpdate(a => new { a.FKGalleryId, a.SettingName }, new GallerySettingDto { FKGalleryId = galleryDto.GalleryId, SettingName = "DefaultGenericObjectHeight", SettingValue = "480" });
         ctx.GallerySettings.AddOrUpdate(a => new { a.FKGalleryId, a.SettingName }, new GallerySettingDto { FKGalleryId = galleryDto.GalleryId, SettingName = "MaxUploadSize", SettingValue = "2097151" });
         ctx.GallerySettings.AddOrUpdate(a => new { a.FKGalleryId, a.SettingName }, new GallerySettingDto { FKGalleryId = galleryDto.GalleryId, SettingName = "AllowAddLocalContent", SettingValue = "True" });
         ctx.GallerySettings.AddOrUpdate(a => new { a.FKGalleryId, a.SettingName }, new GallerySettingDto { FKGalleryId = galleryDto.GalleryId, SettingName = "AllowAddExternalContent", SettingValue = "True" });
         ctx.GallerySettings.AddOrUpdate(a => new { a.FKGalleryId, a.SettingName }, new GallerySettingDto { FKGalleryId = galleryDto.GalleryId, SettingName = "AllowAnonymousBrowsing", SettingValue = "True" });
         ctx.GallerySettings.AddOrUpdate(a => new { a.FKGalleryId, a.SettingName }, new GallerySettingDto { FKGalleryId = galleryDto.GalleryId, SettingName = "PageSize", SettingValue = "0" });
         ctx.GallerySettings.AddOrUpdate(a => new { a.FKGalleryId, a.SettingName }, new GallerySettingDto { FKGalleryId = galleryDto.GalleryId, SettingName = "PagerLocation", SettingValue = "TopAndBottom" });
         ctx.GallerySettings.AddOrUpdate(a => new { a.FKGalleryId, a.SettingName }, new GallerySettingDto { FKGalleryId = galleryDto.GalleryId, SettingName = "EnableSelfRegistration", SettingValue = "False" });
         ctx.GallerySettings.AddOrUpdate(a => new { a.FKGalleryId, a.SettingName }, new GallerySettingDto { FKGalleryId = galleryDto.GalleryId, SettingName = "RequireEmailValidationForSelfRegisteredUser", SettingValue = "False" });
         ctx.GallerySettings.AddOrUpdate(a => new { a.FKGalleryId, a.SettingName }, new GallerySettingDto { FKGalleryId = galleryDto.GalleryId, SettingName = "RequireApprovalForSelfRegisteredUser", SettingValue = "False" });
         ctx.GallerySettings.AddOrUpdate(a => new { a.FKGalleryId, a.SettingName }, new GallerySettingDto { FKGalleryId = galleryDto.GalleryId, SettingName = "UseEmailForAccountName", SettingValue = "False" });
         ctx.GallerySettings.AddOrUpdate(a => new { a.FKGalleryId, a.SettingName }, new GallerySettingDto { FKGalleryId = galleryDto.GalleryId, SettingName = "DefaultRolesForSelfRegisteredUser", SettingValue = "" });
         ctx.GallerySettings.AddOrUpdate(a => new { a.FKGalleryId, a.SettingName }, new GallerySettingDto { FKGalleryId = galleryDto.GalleryId, SettingName = "UsersToNotifyWhenAccountIsCreated", SettingValue = "" });
         ctx.GallerySettings.AddOrUpdate(a => new { a.FKGalleryId, a.SettingName }, new GallerySettingDto { FKGalleryId = galleryDto.GalleryId, SettingName = "UsersToNotifyWhenErrorOccurs", SettingValue = "" });
         ctx.GallerySettings.AddOrUpdate(a => new { a.FKGalleryId, a.SettingName }, new GallerySettingDto { FKGalleryId = galleryDto.GalleryId, SettingName = "EnableUserAlbum", SettingValue = "False" });
         ctx.GallerySettings.AddOrUpdate(a => new { a.FKGalleryId, a.SettingName }, new GallerySettingDto { FKGalleryId = galleryDto.GalleryId, SettingName = "EnableUserAlbumDefaultForUser", SettingValue = "True" });
         ctx.GallerySettings.AddOrUpdate(a => new { a.FKGalleryId, a.SettingName }, new GallerySettingDto { FKGalleryId = galleryDto.GalleryId, SettingName = "UserAlbumParentAlbumId", SettingValue = "0" });
         ctx.GallerySettings.AddOrUpdate(a => new { a.FKGalleryId, a.SettingName }, new GallerySettingDto { FKGalleryId = galleryDto.GalleryId, SettingName = "UserAlbumNameTemplate", SettingValue = "{UserName}'s gallery" });
         ctx.GallerySettings.AddOrUpdate(a => new { a.FKGalleryId, a.SettingName }, new GallerySettingDto { FKGalleryId = galleryDto.GalleryId, SettingName = "UserAlbumSummaryTemplate", SettingValue = "Welcome to your personal gallery. You can easily add photos, video, and other files. When you are logged in, an Actions menu appears in the upper left to help you manage your gallery." });
         ctx.GallerySettings.AddOrUpdate(a => new { a.FKGalleryId, a.SettingName }, new GallerySettingDto { FKGalleryId = galleryDto.GalleryId, SettingName = "RedirectToUserAlbumAfterLogin", SettingValue = "False" });
         ctx.GallerySettings.AddOrUpdate(a => new { a.FKGalleryId, a.SettingName }, new GallerySettingDto { FKGalleryId = galleryDto.GalleryId, SettingName = "VideoThumbnailPosition", SettingValue = "3" });
         ctx.GallerySettings.AddOrUpdate(a => new { a.FKGalleryId, a.SettingName }, new GallerySettingDto { FKGalleryId = galleryDto.GalleryId, SettingName = "EnableAutoSync", SettingValue = "False" });
         ctx.GallerySettings.AddOrUpdate(a => new { a.FKGalleryId, a.SettingName }, new GallerySettingDto { FKGalleryId = galleryDto.GalleryId, SettingName = "AutoSyncIntervalMinutes", SettingValue = "1440" });
         ctx.GallerySettings.AddOrUpdate(a => new { a.FKGalleryId, a.SettingName }, new GallerySettingDto { FKGalleryId = galleryDto.GalleryId, SettingName = "LastAutoSync", SettingValue = "" });
         ctx.GallerySettings.AddOrUpdate(a => new { a.FKGalleryId, a.SettingName }, new GallerySettingDto { FKGalleryId = galleryDto.GalleryId, SettingName = "EnableRemoteSync", SettingValue = "False" });
         ctx.GallerySettings.AddOrUpdate(a => new { a.FKGalleryId, a.SettingName }, new GallerySettingDto { FKGalleryId = galleryDto.GalleryId, SettingName = "RemoteAccessPassword", SettingValue = "" });
         ctx.GallerySettings.AddOrUpdate(a => new { a.FKGalleryId, a.SettingName }, new GallerySettingDto { FKGalleryId = galleryDto.GalleryId, SettingName = "MediaEncoderSettings", SettingValue = @".mp3||.mp3||~~.flv||.flv||~~.m4a||.m4a||~~*video||.mp4||-y -i ""{SourceFilePath}"" -vf ""scale=min(iw*min(640/iw\,480/ih)\,iw):min(ih*min(640/iw\,480/ih)\,ih){AutoRotateFilter}"" -vcodec libx264 -movflags +faststart -metadata:s:v:0 rotate=0 ""{DestinationFilePath}""~~*video||.flv||-i ""{SourceFilePath}"" -y ""{DestinationFilePath}""~~*audio||.m4a||-i ""{SourceFilePath}"" -y ""{DestinationFilePath}""" });
         ctx.GallerySettings.AddOrUpdate(a => new { a.FKGalleryId, a.SettingName }, new GallerySettingDto { FKGalleryId = galleryDto.GalleryId, SettingName = "MediaEncoderTimeoutMs", SettingValue = "900000" });
     }
 }
Пример #11
0
        // Note for next migration. I forgot the left pane JS replacement in the section "Task 671: Improve touchscreen support"
        // above in the initial release of 3.2.0. It was added on May 19, 4 days after the 3.2.0 release.
        // As an extra precaution, we should re-apply this fix in the next migration as well, so anyone who didn't manually
        // update their template still gets the fix.
        /// <summary>
        /// Upgrades the 3.2.0 data to the 3.2.1 data. Applies to data such as app settings, gallery settings, templates, etc.
        /// Does not contain data structure changes such as new columns.
        /// </summary>
        /// <param name="ctx">Context to be used for updating data.</param>
        private static void UpgradeTo321(GalleryDb ctx)
        {
            foreach (var uiTmpl in ctx.UiTemplates.Where(t => t.TemplateType == UiTemplateType.LeftPane))
            {
                // Task 671: Improve touchscreen support.
                // NOTE: This should have been in the 3.2.0 upgrade, but it was forgotten.
                const string srcText = @"// Render the left pane, but not for touchscreens UNLESS the left pane is the only visible pane
            var isTouch = window.Gsp.isTouchScreen();
            var renderLeftPane = !isTouch  || (isTouch && ($('.gsp_tb_s_CenterPane:visible, .gsp_tb_s_RightPane:visible').length == 0));

            if (renderLeftPane ) {
             $('#{{:Settings.LeftPaneClientId}}').html( $.render [ '{{:Settings.LeftPaneTmplName}}' ]( window.{{:Settings.ClientId}}.gspData ));";

                const string replText = @"// Render the left pane if it exists
            var $lp = $('#{{:Settings.LeftPaneClientId}}');

            if ($lp.length > 0) {
             $lp.html( $.render [ '{{:Settings.LeftPaneTmplName}}' ]( window.{{:Settings.ClientId}}.gspData ));";

                uiTmpl.ScriptTemplate = uiTmpl.ScriptTemplate.Replace(srcText, replText);
            }

            // Update data schema version to 3.2.1
            var asDataSchema = ctx.AppSettings.First(a => a.SettingName == "DataSchemaVersion");
            asDataSchema.SettingValue = "3.2.1";

            ctx.SaveChanges();
        }
Пример #12
0
        /// <summary>
        /// Adds or updates the media object Facebook Comments widget and the right pane Facebook Like widget.
        /// </summary>
        private static void InsertFacebookTemplates()
        {
            using (var ctx = new GalleryDb())
            {
                var galleryId = ctx.Galleries.Single(g => g.IsTemplate).GalleryId;

                ctx.UiTemplates.AddOrUpdate(a => new { a.TemplateType, a.FKGalleryId, a.Name }, new UiTemplateDto
                {
                    TemplateType = UiTemplateType.MediaObject,
                    Name = "Default with Facebook Comments Widget",
                    FKGalleryId = galleryId,
                    Description = "",
                    HtmlTemplate = GetMediaObjectHtmlTmpl(true),
                    ScriptTemplate = GetMediaObjectJsTmpl(true)
                });

                ctx.UiTemplates.AddOrUpdate(a => new { a.TemplateType, a.FKGalleryId, a.Name }, new UiTemplateDto
                {
                    TemplateType = UiTemplateType.RightPane,
                    Name = "Default with Facebook Like Widget",
                    FKGalleryId = galleryId,
                    Description = "",
                    HtmlTemplate = GetRightPaneHtmlTmpl(false, true),
                    ScriptTemplate = GetRightPaneJsTmpl(false, true)
                });

                ctx.SaveChanges();
            }
        }
Пример #13
0
        /// <summary>
        /// Upgrades the 3.0.3 data to the 3.1.0 data. Applies to data such as app settings, gallery settings, templates, etc.
        /// Does not contain data structure changes such as new columns.
        /// </summary>
        /// <param name="ctx">Context to be used for updating data.</param>
        private static void UpgradeTo310(GalleryDb ctx)
        {
            // Insert Orientation meta item into metadata definitions just before the ExposureProgram item.
            foreach (var metaDef in ctx.GallerySettings.Where(gs => gs.SettingName == "MetadataDisplaySettings"))
            {
                // First grab the sequence of ExposureProgram, then subtract one.
                // Matches: 'MetadataItem':14{ANY_TEXT}'Sequence':{ANY_DIGITS} => {ANY_DIGITS} is assigned to seq group name
                var match = System.Text.RegularExpressions.Regex.Match(metaDef.SettingValue, @"['""]MetadataItem['""]:14.+?['""]Sequence['""]:(?<seq>\d+)");

                var sequence = 12; // Default to 12 if we don't find one, which is correct if the user hasn't modified the original order
                if (match.Success)
                {
                    sequence = Convert.ToInt32(match.Groups["seq"].Value, CultureInfo.InvariantCulture) - 1;
                }

                // Serialized values are separated by apostrophes when first inserted; they are replaced by quotes by the JSON serializer when subsequently
                // saved, so we check for both. Look for the beginning of the ExposureProgram item and insert the orientation item just before it.
                if (!metaDef.SettingValue.Contains(@"""MetadataItem"":43") && !metaDef.SettingValue.Contains(@"'MetadataItem':43"))
                {
                    metaDef.SettingValue = metaDef.SettingValue.Replace(@"{""MetadataItem"":14", String.Concat(@"{""MetadataItem"":43,""Name"":""Orientation"",""DisplayName"":""Orientation"",""IsVisibleForAlbum"":false,""IsVisibleForGalleryObject"":true,""IsEditable"":false,""DefaultValue"":""{Orientation}"",""Sequence"":", sequence, @"},{""MetadataItem"":14"));
                    metaDef.SettingValue = metaDef.SettingValue.Replace(@"{'MetadataItem':14", String.Concat(@"{'MetadataItem':43,'Name':'Orientation','DisplayName':'Orientation','IsVisibleForAlbum':false,'IsVisibleForGalleryObject':true,'IsEditable':false,'DefaultValue':'{Orientation}','Sequence':", sequence, @"},{'MetadataItem':14"));
                }
            }

            // Task 611 & 645: Update MP4 encoder setting to (1) perform higher quality transcoding (2) auto-rotate videos (3) remove orientation flag
            const string mp4Setting303 = @"-y -i ""{SourceFilePath}"" -vf ""scale=min(iw*min(640/iw\,480/ih)\,iw):min(ih*min(640/iw\,480/ih)\,ih)"" -b:v 384k -vcodec libx264 -flags +loop+mv4 -cmp 256 -partitions +parti4x4+parti8x8+partp4x4+partp8x8 -subq 6 -trellis 0 -refs 5 -bf 0 -coder 0 -me_range 16 -g 250 -keyint_min 25 -sc_threshold 40 -i_qfactor 0.71 -qmin 10 -qmax 51 -qdiff 4 -ac 1 -ar 16000 -r 13 -ab 32000 -movflags +faststart ""{DestinationFilePath}""";
            const string mp4Setting310 = @"-y -i ""{SourceFilePath}"" -vf ""scale=min(iw*min(640/iw\,480/ih)\,iw):min(ih*min(640/iw\,480/ih)\,ih){AutoRotateFilter}"" -vcodec libx264 -movflags +faststart -metadata:s:v:0 rotate=0 ""{DestinationFilePath}""";
            foreach (var metaDef in ctx.GallerySettings.Where(gs => gs.SettingName == "MediaEncoderSettings"))
            {
                metaDef.SettingValue = metaDef.SettingValue.Replace(mp4Setting303, mp4Setting310);
            }

            // Task 664: Change jQuery 1.10.1 to 1.10.2
            var appSetting = ctx.AppSettings.FirstOrDefault(a => a.SettingName == "JQueryScriptPath");

            if (appSetting != null && appSetting.SettingValue == "//ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js")
            {
                appSetting.SettingValue = "//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js";
            }

            // Task 649: Add .3GP file support
            if (!ctx.MimeTypes.Any(mt => mt.FileExtension == ".3gp"))
            {
                ctx.MimeTypes.Add(new MimeTypeDto
                    {
                        FileExtension = ".3gp",
                        MimeTypeValue = "video/mp4",
                        BrowserMimeTypeValue = ""
                    });
            }

            // Update data schema version to 3.1.0
            var asDataSchema = ctx.AppSettings.First(a => a.SettingName == "DataSchemaVersion");
            asDataSchema.SettingValue = "3.1.0";

            ctx.SaveChanges();
        }
Пример #14
0
        private static void InsertMimeTypes(GalleryDb ctx)
        {
            ctx.MimeTypes.AddOrUpdate(a => a.FileExtension, new MimeTypeDto { FileExtension = ".3gp", MimeTypeValue = "video/mp4", BrowserMimeTypeValue = "" });
            ctx.MimeTypes.AddOrUpdate(a => a.FileExtension, new MimeTypeDto { FileExtension = ".afl", MimeTypeValue = "video/animaflex", BrowserMimeTypeValue = "" });
            ctx.MimeTypes.AddOrUpdate(a => a.FileExtension, new MimeTypeDto { FileExtension = ".aif", MimeTypeValue = "audio/aiff", BrowserMimeTypeValue = "" });
            ctx.MimeTypes.AddOrUpdate(a => a.FileExtension, new MimeTypeDto { FileExtension = ".aifc", MimeTypeValue = "audio/aiff", BrowserMimeTypeValue = "" });
            ctx.MimeTypes.AddOrUpdate(a => a.FileExtension, new MimeTypeDto { FileExtension = ".aiff", MimeTypeValue = "audio/aiff", BrowserMimeTypeValue = "" });
            ctx.MimeTypes.AddOrUpdate(a => a.FileExtension, new MimeTypeDto { FileExtension = ".asf", MimeTypeValue = "video/x-ms-asf", BrowserMimeTypeValue = "" });
            ctx.MimeTypes.AddOrUpdate(a => a.FileExtension, new MimeTypeDto { FileExtension = ".asx", MimeTypeValue = "video/x-ms-asf", BrowserMimeTypeValue = "" });
            ctx.MimeTypes.AddOrUpdate(a => a.FileExtension, new MimeTypeDto { FileExtension = ".au", MimeTypeValue = "audio/basic", BrowserMimeTypeValue = "" });
            ctx.MimeTypes.AddOrUpdate(a => a.FileExtension, new MimeTypeDto { FileExtension = ".avi", MimeTypeValue = "video/x-ms-wvx", BrowserMimeTypeValue = "" });
            ctx.MimeTypes.AddOrUpdate(a => a.FileExtension, new MimeTypeDto { FileExtension = ".avs", MimeTypeValue = "video/avs-video", BrowserMimeTypeValue = "" });
            ctx.MimeTypes.AddOrUpdate(a => a.FileExtension, new MimeTypeDto { FileExtension = ".bm", MimeTypeValue = "image/bmp", BrowserMimeTypeValue = "" });
            ctx.MimeTypes.AddOrUpdate(a => a.FileExtension, new MimeTypeDto { FileExtension = ".bmp", MimeTypeValue = "image/bmp", BrowserMimeTypeValue = "" });
            ctx.MimeTypes.AddOrUpdate(a => a.FileExtension, new MimeTypeDto { FileExtension = ".chm", MimeTypeValue = "application/vnd.ms-htmlhelp", BrowserMimeTypeValue = "" });
            ctx.MimeTypes.AddOrUpdate(a => a.FileExtension, new MimeTypeDto { FileExtension = ".css", MimeTypeValue = "text/css", BrowserMimeTypeValue = "" });
            ctx.MimeTypes.AddOrUpdate(a => a.FileExtension, new MimeTypeDto { FileExtension = ".divx", MimeTypeValue = "video/divx", BrowserMimeTypeValue = "" });
            ctx.MimeTypes.AddOrUpdate(a => a.FileExtension, new MimeTypeDto { FileExtension = ".dl", MimeTypeValue = "video/dl", BrowserMimeTypeValue = "" });
            ctx.MimeTypes.AddOrUpdate(a => a.FileExtension, new MimeTypeDto { FileExtension = ".doc", MimeTypeValue = "application/msword", BrowserMimeTypeValue = "" });
            ctx.MimeTypes.AddOrUpdate(a => a.FileExtension, new MimeTypeDto { FileExtension = ".docm", MimeTypeValue = "application/vnd.ms-word.document.macroEnabled.12", BrowserMimeTypeValue = "" });
            ctx.MimeTypes.AddOrUpdate(a => a.FileExtension, new MimeTypeDto { FileExtension = ".docx", MimeTypeValue = "application/vnd.openxmlformats-officedocument.wordprocessingml.document", BrowserMimeTypeValue = "" });
            ctx.MimeTypes.AddOrUpdate(a => a.FileExtension, new MimeTypeDto { FileExtension = ".dotx", MimeTypeValue = "application/vnd.openxmlformats-officedocument.wordprocessingml.template", BrowserMimeTypeValue = "" });
            ctx.MimeTypes.AddOrUpdate(a => a.FileExtension, new MimeTypeDto { FileExtension = ".dot", MimeTypeValue = "application/msword", BrowserMimeTypeValue = "" });
            ctx.MimeTypes.AddOrUpdate(a => a.FileExtension, new MimeTypeDto { FileExtension = ".dotm", MimeTypeValue = "application/vnd.ms-word.template.macroEnabled.12", BrowserMimeTypeValue = "" });
            ctx.MimeTypes.AddOrUpdate(a => a.FileExtension, new MimeTypeDto { FileExtension = ".dtd", MimeTypeValue = "application/xml-dtd", BrowserMimeTypeValue = "text/plain" });
            ctx.MimeTypes.AddOrUpdate(a => a.FileExtension, new MimeTypeDto { FileExtension = ".dv", MimeTypeValue = "video/x-dv", BrowserMimeTypeValue = "" });
            ctx.MimeTypes.AddOrUpdate(a => a.FileExtension, new MimeTypeDto { FileExtension = ".dwg", MimeTypeValue = "image/vnd.dwg", BrowserMimeTypeValue = "" });
            ctx.MimeTypes.AddOrUpdate(a => a.FileExtension, new MimeTypeDto { FileExtension = ".dxf", MimeTypeValue = "image/vnd.dwg", BrowserMimeTypeValue = "" });
            ctx.MimeTypes.AddOrUpdate(a => a.FileExtension, new MimeTypeDto { FileExtension = ".emf", MimeTypeValue = "image/x-emf", BrowserMimeTypeValue = "" });
            ctx.MimeTypes.AddOrUpdate(a => a.FileExtension, new MimeTypeDto { FileExtension = ".eps", MimeTypeValue = "image/postscript", BrowserMimeTypeValue = "" });
            ctx.MimeTypes.AddOrUpdate(a => a.FileExtension, new MimeTypeDto { FileExtension = ".exe", MimeTypeValue = "application/octet-stream", BrowserMimeTypeValue = "" });
            ctx.MimeTypes.AddOrUpdate(a => a.FileExtension, new MimeTypeDto { FileExtension = ".f4v", MimeTypeValue = "video/f4v", BrowserMimeTypeValue = "" });
            ctx.MimeTypes.AddOrUpdate(a => a.FileExtension, new MimeTypeDto { FileExtension = ".fif", MimeTypeValue = "image/fif", BrowserMimeTypeValue = "" });
            ctx.MimeTypes.AddOrUpdate(a => a.FileExtension, new MimeTypeDto { FileExtension = ".fli", MimeTypeValue = "video/fli", BrowserMimeTypeValue = "" });
            ctx.MimeTypes.AddOrUpdate(a => a.FileExtension, new MimeTypeDto { FileExtension = ".flo", MimeTypeValue = "image/florian", BrowserMimeTypeValue = "" });
            ctx.MimeTypes.AddOrUpdate(a => a.FileExtension, new MimeTypeDto { FileExtension = ".flv", MimeTypeValue = "video/x-flv", BrowserMimeTypeValue = "" });
            ctx.MimeTypes.AddOrUpdate(a => a.FileExtension, new MimeTypeDto { FileExtension = ".fpx", MimeTypeValue = "image/vnd.fpx", BrowserMimeTypeValue = "" });
            ctx.MimeTypes.AddOrUpdate(a => a.FileExtension, new MimeTypeDto { FileExtension = ".funk", MimeTypeValue = "audio/make", BrowserMimeTypeValue = "" });
            ctx.MimeTypes.AddOrUpdate(a => a.FileExtension, new MimeTypeDto { FileExtension = ".g3", MimeTypeValue = "image/g3fax", BrowserMimeTypeValue = "" });
            ctx.MimeTypes.AddOrUpdate(a => a.FileExtension, new MimeTypeDto { FileExtension = ".gif", MimeTypeValue = "image/gif", BrowserMimeTypeValue = "" });
            ctx.MimeTypes.AddOrUpdate(a => a.FileExtension, new MimeTypeDto { FileExtension = ".gl", MimeTypeValue = "video/gl", BrowserMimeTypeValue = "" });
            ctx.MimeTypes.AddOrUpdate(a => a.FileExtension, new MimeTypeDto { FileExtension = ".htm", MimeTypeValue = "text/html", BrowserMimeTypeValue = "" });
            ctx.MimeTypes.AddOrUpdate(a => a.FileExtension, new MimeTypeDto { FileExtension = ".html", MimeTypeValue = "text/html", BrowserMimeTypeValue = "" });
            ctx.MimeTypes.AddOrUpdate(a => a.FileExtension, new MimeTypeDto { FileExtension = ".ico", MimeTypeValue = "image/ico", BrowserMimeTypeValue = "" });
            ctx.MimeTypes.AddOrUpdate(a => a.FileExtension, new MimeTypeDto { FileExtension = ".ief", MimeTypeValue = "image/ief", BrowserMimeTypeValue = "" });
            ctx.MimeTypes.AddOrUpdate(a => a.FileExtension, new MimeTypeDto { FileExtension = ".iefs", MimeTypeValue = "image/ief", BrowserMimeTypeValue = "" });
            ctx.MimeTypes.AddOrUpdate(a => a.FileExtension, new MimeTypeDto { FileExtension = ".it", MimeTypeValue = "audio/it", BrowserMimeTypeValue = "" });
            ctx.MimeTypes.AddOrUpdate(a => a.FileExtension, new MimeTypeDto { FileExtension = ".jar", MimeTypeValue = "application/java-archive", BrowserMimeTypeValue = "" });
            ctx.MimeTypes.AddOrUpdate(a => a.FileExtension, new MimeTypeDto { FileExtension = ".jfif", MimeTypeValue = "image/jpeg", BrowserMimeTypeValue = "" });
            ctx.MimeTypes.AddOrUpdate(a => a.FileExtension, new MimeTypeDto { FileExtension = ".jfif-tbnl", MimeTypeValue = "image/jpeg", BrowserMimeTypeValue = "" });
            ctx.MimeTypes.AddOrUpdate(a => a.FileExtension, new MimeTypeDto { FileExtension = ".jpe", MimeTypeValue = "image/jpeg", BrowserMimeTypeValue = "" });
            ctx.MimeTypes.AddOrUpdate(a => a.FileExtension, new MimeTypeDto { FileExtension = ".jpeg", MimeTypeValue = "image/jpeg", BrowserMimeTypeValue = "" });
            ctx.MimeTypes.AddOrUpdate(a => a.FileExtension, new MimeTypeDto { FileExtension = ".jpg", MimeTypeValue = "image/jpeg", BrowserMimeTypeValue = "" });
            ctx.MimeTypes.AddOrUpdate(a => a.FileExtension, new MimeTypeDto { FileExtension = ".js", MimeTypeValue = "text/javascript", BrowserMimeTypeValue = "" });
            ctx.MimeTypes.AddOrUpdate(a => a.FileExtension, new MimeTypeDto { FileExtension = ".jut", MimeTypeValue = "image/jutvision", BrowserMimeTypeValue = "" });
            ctx.MimeTypes.AddOrUpdate(a => a.FileExtension, new MimeTypeDto { FileExtension = ".kar", MimeTypeValue = "audio/midi", BrowserMimeTypeValue = "" });
            ctx.MimeTypes.AddOrUpdate(a => a.FileExtension, new MimeTypeDto { FileExtension = ".la", MimeTypeValue = "audio/nspaudio", BrowserMimeTypeValue = "" });
            ctx.MimeTypes.AddOrUpdate(a => a.FileExtension, new MimeTypeDto { FileExtension = ".lma", MimeTypeValue = "audio/nspaudio", BrowserMimeTypeValue = "" });
            ctx.MimeTypes.AddOrUpdate(a => a.FileExtension, new MimeTypeDto { FileExtension = ".m1v", MimeTypeValue = "video/mpeg", BrowserMimeTypeValue = "" });
            ctx.MimeTypes.AddOrUpdate(a => a.FileExtension, new MimeTypeDto { FileExtension = ".m2a", MimeTypeValue = "audio/mpeg", BrowserMimeTypeValue = "" });
            ctx.MimeTypes.AddOrUpdate(a => a.FileExtension, new MimeTypeDto { FileExtension = ".m2ts", MimeTypeValue = "video/MP2T", BrowserMimeTypeValue = "" });
            ctx.MimeTypes.AddOrUpdate(a => a.FileExtension, new MimeTypeDto { FileExtension = ".m2v", MimeTypeValue = "video/mpeg", BrowserMimeTypeValue = "" });
            ctx.MimeTypes.AddOrUpdate(a => a.FileExtension, new MimeTypeDto { FileExtension = ".m4a", MimeTypeValue = "audio/m4a", BrowserMimeTypeValue = "" });
            ctx.MimeTypes.AddOrUpdate(a => a.FileExtension, new MimeTypeDto { FileExtension = ".m4v", MimeTypeValue = "video/m4v", BrowserMimeTypeValue = "" });
            ctx.MimeTypes.AddOrUpdate(a => a.FileExtension, new MimeTypeDto { FileExtension = ".mcf", MimeTypeValue = "image/vasa", BrowserMimeTypeValue = "" });
            ctx.MimeTypes.AddOrUpdate(a => a.FileExtension, new MimeTypeDto { FileExtension = ".mht", MimeTypeValue = "message/rfc822", BrowserMimeTypeValue = "" });
            ctx.MimeTypes.AddOrUpdate(a => a.FileExtension, new MimeTypeDto { FileExtension = ".mid", MimeTypeValue = "audio/midi", BrowserMimeTypeValue = "" });
            ctx.MimeTypes.AddOrUpdate(a => a.FileExtension, new MimeTypeDto { FileExtension = ".midi", MimeTypeValue = "audio/midi", BrowserMimeTypeValue = "" });
            ctx.MimeTypes.AddOrUpdate(a => a.FileExtension, new MimeTypeDto { FileExtension = ".mod", MimeTypeValue = "audio/mod", BrowserMimeTypeValue = "" });
            ctx.MimeTypes.AddOrUpdate(a => a.FileExtension, new MimeTypeDto { FileExtension = ".moov", MimeTypeValue = "video/mp4", BrowserMimeTypeValue = "" });
            ctx.MimeTypes.AddOrUpdate(a => a.FileExtension, new MimeTypeDto { FileExtension = ".mov", MimeTypeValue = "video/mp4", BrowserMimeTypeValue = "" });
            ctx.MimeTypes.AddOrUpdate(a => a.FileExtension, new MimeTypeDto { FileExtension = ".mp2", MimeTypeValue = "audio/mpeg", BrowserMimeTypeValue = "application/x-mplayer2" });
            ctx.MimeTypes.AddOrUpdate(a => a.FileExtension, new MimeTypeDto { FileExtension = ".mp3", MimeTypeValue = "audio/x-mp3", BrowserMimeTypeValue = "" });
            ctx.MimeTypes.AddOrUpdate(a => a.FileExtension, new MimeTypeDto { FileExtension = ".mp4", MimeTypeValue = "video/mp4", BrowserMimeTypeValue = "" });
            ctx.MimeTypes.AddOrUpdate(a => a.FileExtension, new MimeTypeDto { FileExtension = ".mpa", MimeTypeValue = "audio/mpeg", BrowserMimeTypeValue = "application/x-mplayer2" });
            ctx.MimeTypes.AddOrUpdate(a => a.FileExtension, new MimeTypeDto { FileExtension = ".mpe", MimeTypeValue = "video/mpeg", BrowserMimeTypeValue = "" });
            ctx.MimeTypes.AddOrUpdate(a => a.FileExtension, new MimeTypeDto { FileExtension = ".mpeg", MimeTypeValue = "video/mpeg", BrowserMimeTypeValue = "" });
            ctx.MimeTypes.AddOrUpdate(a => a.FileExtension, new MimeTypeDto { FileExtension = ".mpg", MimeTypeValue = "video/mpeg", BrowserMimeTypeValue = "" });
            ctx.MimeTypes.AddOrUpdate(a => a.FileExtension, new MimeTypeDto { FileExtension = ".mpga", MimeTypeValue = "audio/mpeg", BrowserMimeTypeValue = "" });
            ctx.MimeTypes.AddOrUpdate(a => a.FileExtension, new MimeTypeDto { FileExtension = ".mts", MimeTypeValue = "video/MP2T", BrowserMimeTypeValue = "" });
            ctx.MimeTypes.AddOrUpdate(a => a.FileExtension, new MimeTypeDto { FileExtension = ".my", MimeTypeValue = "audio/make", BrowserMimeTypeValue = "" });
            ctx.MimeTypes.AddOrUpdate(a => a.FileExtension, new MimeTypeDto { FileExtension = ".nap", MimeTypeValue = "image/naplps", BrowserMimeTypeValue = "" });
            ctx.MimeTypes.AddOrUpdate(a => a.FileExtension, new MimeTypeDto { FileExtension = ".naplps", MimeTypeValue = "image/naplps", BrowserMimeTypeValue = "" });
            ctx.MimeTypes.AddOrUpdate(a => a.FileExtension, new MimeTypeDto { FileExtension = ".oga", MimeTypeValue = "audio/ogg", BrowserMimeTypeValue = "" });
            ctx.MimeTypes.AddOrUpdate(a => a.FileExtension, new MimeTypeDto { FileExtension = ".ogg", MimeTypeValue = "video/ogg", BrowserMimeTypeValue = "" });
            ctx.MimeTypes.AddOrUpdate(a => a.FileExtension, new MimeTypeDto { FileExtension = ".ogv", MimeTypeValue = "video/ogg", BrowserMimeTypeValue = "" });
            ctx.MimeTypes.AddOrUpdate(a => a.FileExtension, new MimeTypeDto { FileExtension = ".pdf", MimeTypeValue = "application/pdf", BrowserMimeTypeValue = "" });
            ctx.MimeTypes.AddOrUpdate(a => a.FileExtension, new MimeTypeDto { FileExtension = ".pfunk", MimeTypeValue = "audio/make", BrowserMimeTypeValue = "" });
            ctx.MimeTypes.AddOrUpdate(a => a.FileExtension, new MimeTypeDto { FileExtension = ".pic", MimeTypeValue = "image/pict", BrowserMimeTypeValue = "" });
            ctx.MimeTypes.AddOrUpdate(a => a.FileExtension, new MimeTypeDto { FileExtension = ".pict", MimeTypeValue = "image/pict", BrowserMimeTypeValue = "" });
            ctx.MimeTypes.AddOrUpdate(a => a.FileExtension, new MimeTypeDto { FileExtension = ".png", MimeTypeValue = "image/png", BrowserMimeTypeValue = "" });
            ctx.MimeTypes.AddOrUpdate(a => a.FileExtension, new MimeTypeDto { FileExtension = ".potm", MimeTypeValue = "application/vnd.ms-powerpoint.template.macroEnabled.12", BrowserMimeTypeValue = "" });
            ctx.MimeTypes.AddOrUpdate(a => a.FileExtension, new MimeTypeDto { FileExtension = ".potx", MimeTypeValue = "application/vnd.openxmlformats-officedocument.presentationml.template", BrowserMimeTypeValue = "" });
            ctx.MimeTypes.AddOrUpdate(a => a.FileExtension, new MimeTypeDto { FileExtension = ".ppam", MimeTypeValue = "application/vnd.ms-powerpoint.addin.macroEnabled.12", BrowserMimeTypeValue = "" });
            ctx.MimeTypes.AddOrUpdate(a => a.FileExtension, new MimeTypeDto { FileExtension = ".pps", MimeTypeValue = "application/vnd.ms-powerpoint", BrowserMimeTypeValue = "" });
            ctx.MimeTypes.AddOrUpdate(a => a.FileExtension, new MimeTypeDto { FileExtension = ".ppsm", MimeTypeValue = "application/vnd.ms-powerpoint.slideshow.macroEnabled.12", BrowserMimeTypeValue = "" });
            ctx.MimeTypes.AddOrUpdate(a => a.FileExtension, new MimeTypeDto { FileExtension = ".ppsx", MimeTypeValue = "application/vnd.openxmlformats-officedocument.presentationml.slideshow", BrowserMimeTypeValue = "" });
            ctx.MimeTypes.AddOrUpdate(a => a.FileExtension, new MimeTypeDto { FileExtension = ".ppt", MimeTypeValue = "application/vnd.ms-powerpoint", BrowserMimeTypeValue = "" });
            ctx.MimeTypes.AddOrUpdate(a => a.FileExtension, new MimeTypeDto { FileExtension = ".pptm", MimeTypeValue = "application/vnd.ms-powerpoint.presentation.macroEnabled.12", BrowserMimeTypeValue = "" });
            ctx.MimeTypes.AddOrUpdate(a => a.FileExtension, new MimeTypeDto { FileExtension = ".pptx", MimeTypeValue = "application/vnd.openxmlformats-officedocument.presentationml.presentation", BrowserMimeTypeValue = "" });
            ctx.MimeTypes.AddOrUpdate(a => a.FileExtension, new MimeTypeDto { FileExtension = ".psd", MimeTypeValue = "image/psd", BrowserMimeTypeValue = "" });
            ctx.MimeTypes.AddOrUpdate(a => a.FileExtension, new MimeTypeDto { FileExtension = ".qcp", MimeTypeValue = "audio/vnd.qcelp", BrowserMimeTypeValue = "" });
            ctx.MimeTypes.AddOrUpdate(a => a.FileExtension, new MimeTypeDto { FileExtension = ".qt", MimeTypeValue = "video/mp4", BrowserMimeTypeValue = "" });
            ctx.MimeTypes.AddOrUpdate(a => a.FileExtension, new MimeTypeDto { FileExtension = ".ra", MimeTypeValue = "audio/x-pn-realaudio", BrowserMimeTypeValue = "" });
            ctx.MimeTypes.AddOrUpdate(a => a.FileExtension, new MimeTypeDto { FileExtension = ".ram", MimeTypeValue = "audio/x-pn-realaudio", BrowserMimeTypeValue = "" });
            ctx.MimeTypes.AddOrUpdate(a => a.FileExtension, new MimeTypeDto { FileExtension = ".ras", MimeTypeValue = "image/cmu-raster", BrowserMimeTypeValue = "" });
            ctx.MimeTypes.AddOrUpdate(a => a.FileExtension, new MimeTypeDto { FileExtension = ".rast", MimeTypeValue = "image/cmu-raster", BrowserMimeTypeValue = "" });
            ctx.MimeTypes.AddOrUpdate(a => a.FileExtension, new MimeTypeDto { FileExtension = ".rf", MimeTypeValue = "image/vnd.rn-realflash", BrowserMimeTypeValue = "" });
            ctx.MimeTypes.AddOrUpdate(a => a.FileExtension, new MimeTypeDto { FileExtension = ".rmi", MimeTypeValue = "audio/mid", BrowserMimeTypeValue = "" });
            ctx.MimeTypes.AddOrUpdate(a => a.FileExtension, new MimeTypeDto { FileExtension = ".rp", MimeTypeValue = "image/vnd.rn-realpix", BrowserMimeTypeValue = "" });
            ctx.MimeTypes.AddOrUpdate(a => a.FileExtension, new MimeTypeDto { FileExtension = ".rtf", MimeTypeValue = "application/rtf", BrowserMimeTypeValue = "" });
            ctx.MimeTypes.AddOrUpdate(a => a.FileExtension, new MimeTypeDto { FileExtension = ".rv", MimeTypeValue = "video/vnd.rn-realvideo", BrowserMimeTypeValue = "" });
            ctx.MimeTypes.AddOrUpdate(a => a.FileExtension, new MimeTypeDto { FileExtension = ".sgml", MimeTypeValue = "text/sgml", BrowserMimeTypeValue = "" });
            ctx.MimeTypes.AddOrUpdate(a => a.FileExtension, new MimeTypeDto { FileExtension = ".s3m", MimeTypeValue = "audio/s3m", BrowserMimeTypeValue = "" });
            ctx.MimeTypes.AddOrUpdate(a => a.FileExtension, new MimeTypeDto { FileExtension = ".snd", MimeTypeValue = "audio/basic", BrowserMimeTypeValue = "" });
            ctx.MimeTypes.AddOrUpdate(a => a.FileExtension, new MimeTypeDto { FileExtension = ".svf", MimeTypeValue = "image/vnd.dwg", BrowserMimeTypeValue = "" });
            ctx.MimeTypes.AddOrUpdate(a => a.FileExtension, new MimeTypeDto { FileExtension = ".svg", MimeTypeValue = "image/svg+xml", BrowserMimeTypeValue = "" });
            ctx.MimeTypes.AddOrUpdate(a => a.FileExtension, new MimeTypeDto { FileExtension = ".swf", MimeTypeValue = "application/x-shockwave-flash", BrowserMimeTypeValue = "" });
            ctx.MimeTypes.AddOrUpdate(a => a.FileExtension, new MimeTypeDto { FileExtension = ".tif", MimeTypeValue = "image/tiff", BrowserMimeTypeValue = "" });
            ctx.MimeTypes.AddOrUpdate(a => a.FileExtension, new MimeTypeDto { FileExtension = ".tiff", MimeTypeValue = "image/tiff", BrowserMimeTypeValue = "" });
            ctx.MimeTypes.AddOrUpdate(a => a.FileExtension, new MimeTypeDto { FileExtension = ".tsi", MimeTypeValue = "audio/tsp-audio", BrowserMimeTypeValue = "" });
            ctx.MimeTypes.AddOrUpdate(a => a.FileExtension, new MimeTypeDto { FileExtension = ".tsp", MimeTypeValue = "audio/tsplayer", BrowserMimeTypeValue = "" });
            ctx.MimeTypes.AddOrUpdate(a => a.FileExtension, new MimeTypeDto { FileExtension = ".turbot", MimeTypeValue = "image/florian", BrowserMimeTypeValue = "" });
            ctx.MimeTypes.AddOrUpdate(a => a.FileExtension, new MimeTypeDto { FileExtension = ".txt", MimeTypeValue = "text/plain", BrowserMimeTypeValue = "" });
            ctx.MimeTypes.AddOrUpdate(a => a.FileExtension, new MimeTypeDto { FileExtension = ".vdo", MimeTypeValue = "video/vdo", BrowserMimeTypeValue = "" });
            ctx.MimeTypes.AddOrUpdate(a => a.FileExtension, new MimeTypeDto { FileExtension = ".viv", MimeTypeValue = "video/vivo", BrowserMimeTypeValue = "" });
            ctx.MimeTypes.AddOrUpdate(a => a.FileExtension, new MimeTypeDto { FileExtension = ".vivo", MimeTypeValue = "video/vivo", BrowserMimeTypeValue = "" });
            ctx.MimeTypes.AddOrUpdate(a => a.FileExtension, new MimeTypeDto { FileExtension = ".voc", MimeTypeValue = "audio/voc", BrowserMimeTypeValue = "" });
            ctx.MimeTypes.AddOrUpdate(a => a.FileExtension, new MimeTypeDto { FileExtension = ".vos", MimeTypeValue = "video/vosaic", BrowserMimeTypeValue = "" });
            ctx.MimeTypes.AddOrUpdate(a => a.FileExtension, new MimeTypeDto { FileExtension = ".vox", MimeTypeValue = "audio/voxware", BrowserMimeTypeValue = "" });
            ctx.MimeTypes.AddOrUpdate(a => a.FileExtension, new MimeTypeDto { FileExtension = ".wax", MimeTypeValue = "audio/x-ms-wax", BrowserMimeTypeValue = "" });
            ctx.MimeTypes.AddOrUpdate(a => a.FileExtension, new MimeTypeDto { FileExtension = ".wav", MimeTypeValue = "audio/wav", BrowserMimeTypeValue = "application/x-mplayer2" });
            ctx.MimeTypes.AddOrUpdate(a => a.FileExtension, new MimeTypeDto { FileExtension = ".wbmp", MimeTypeValue = "image/vnd.wap.wbmp", BrowserMimeTypeValue = "" });
            ctx.MimeTypes.AddOrUpdate(a => a.FileExtension, new MimeTypeDto { FileExtension = ".webm", MimeTypeValue = "video/webm", BrowserMimeTypeValue = "" });
            ctx.MimeTypes.AddOrUpdate(a => a.FileExtension, new MimeTypeDto { FileExtension = ".wmf", MimeTypeValue = "image/wmf", BrowserMimeTypeValue = "" });
            ctx.MimeTypes.AddOrUpdate(a => a.FileExtension, new MimeTypeDto { FileExtension = ".wma", MimeTypeValue = "audio/x-ms-wma", BrowserMimeTypeValue = "" });
            ctx.MimeTypes.AddOrUpdate(a => a.FileExtension, new MimeTypeDto { FileExtension = ".wmv", MimeTypeValue = "video/x-ms-wmv", BrowserMimeTypeValue = "" });
            ctx.MimeTypes.AddOrUpdate(a => a.FileExtension, new MimeTypeDto { FileExtension = ".wvx", MimeTypeValue = "video/x-ms-wvx", BrowserMimeTypeValue = "" });
            ctx.MimeTypes.AddOrUpdate(a => a.FileExtension, new MimeTypeDto { FileExtension = ".xbap", MimeTypeValue = "application/x-ms-xbap", BrowserMimeTypeValue = "" });
            ctx.MimeTypes.AddOrUpdate(a => a.FileExtension, new MimeTypeDto { FileExtension = ".xaml", MimeTypeValue = "application/xaml+xml", BrowserMimeTypeValue = "" });
            ctx.MimeTypes.AddOrUpdate(a => a.FileExtension, new MimeTypeDto { FileExtension = ".xlam", MimeTypeValue = "application/vnd.ms-excel.addin.macroEnabled.12", BrowserMimeTypeValue = "" });
            ctx.MimeTypes.AddOrUpdate(a => a.FileExtension, new MimeTypeDto { FileExtension = ".xls", MimeTypeValue = "application/vnd.ms-excel", BrowserMimeTypeValue = "" });
            ctx.MimeTypes.AddOrUpdate(a => a.FileExtension, new MimeTypeDto { FileExtension = ".xlsb", MimeTypeValue = "application/vnd.ms-excel.sheet.binary.macroEnabled.12", BrowserMimeTypeValue = "" });
            ctx.MimeTypes.AddOrUpdate(a => a.FileExtension, new MimeTypeDto { FileExtension = ".xlsm", MimeTypeValue = "application/vnd.ms-excel.sheet.macroEnabled.12", BrowserMimeTypeValue = "" });
            ctx.MimeTypes.AddOrUpdate(a => a.FileExtension, new MimeTypeDto { FileExtension = ".xlsx", MimeTypeValue = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", BrowserMimeTypeValue = "" });
            ctx.MimeTypes.AddOrUpdate(a => a.FileExtension, new MimeTypeDto { FileExtension = ".xltm", MimeTypeValue = "application/vnd.ms-excel.template.macroEnabled.12", BrowserMimeTypeValue = "" });
            ctx.MimeTypes.AddOrUpdate(a => a.FileExtension, new MimeTypeDto { FileExtension = ".xltx", MimeTypeValue = "application/vnd.openxmlformats-officedocument.spreadsheetml.template", BrowserMimeTypeValue = "" });
            ctx.MimeTypes.AddOrUpdate(a => a.FileExtension, new MimeTypeDto { FileExtension = ".xif", MimeTypeValue = "image/vnd.xiff", BrowserMimeTypeValue = "" });
            ctx.MimeTypes.AddOrUpdate(a => a.FileExtension, new MimeTypeDto { FileExtension = ".xml", MimeTypeValue = "text/xml", BrowserMimeTypeValue = "" });
            ctx.MimeTypes.AddOrUpdate(a => a.FileExtension, new MimeTypeDto { FileExtension = ".xps", MimeTypeValue = "application/vnd.ms-xpsdocument", BrowserMimeTypeValue = "" });
            ctx.MimeTypes.AddOrUpdate(a => a.FileExtension, new MimeTypeDto { FileExtension = ".x-png", MimeTypeValue = "image/png", BrowserMimeTypeValue = "" });
            ctx.MimeTypes.AddOrUpdate(a => a.FileExtension, new MimeTypeDto { FileExtension = ".zip", MimeTypeValue = "application/octet-stream", BrowserMimeTypeValue = "" });

            ctx.SaveChanges();
        }
Пример #15
0
 private static void InsertUiTemplateAlbums(GalleryDb ctx)
 {
     // Don't do anything. At this point the only UI templates that have been created are for the template gallery. Later, in
     // Gallery.Configure, there is validation code that makes sure both the UI templates and the template/album relationships
     // have been created for each gallery.
 }
Пример #16
0
        private static void InsertUiTemplates(GalleryDb ctx)
        {
            var galleryId = ctx.Galleries.Single(g => g.IsTemplate).GalleryId;

            ctx.UiTemplates.AddOrUpdate(a => new { a.TemplateType, a.FKGalleryId, a.Name }, new UiTemplateDto
                                                                                                                                                                            {
                                                                                                                                                                                TemplateType = UiTemplateType.Album,
                                                                                                                                                                                Name = DefaultTmplName,
                                                                                                                                                                                FKGalleryId = galleryId,
                                                                                                                                                                                Description = "",
                                                                                                                                                                                HtmlTemplate = @"<div class='gsp_abm_sum'>
             <div class='gsp_abm_sum_col2'>
            <p class='gsp_abm_sum_col2_row1'>({{:Album.NumGalleryItems}}{{:Resource.AbmNumObjSuffix}})</p>
            <div class='gsp_abm_sum_col2_row2'>
             {{if Settings.ShowSlideShowButton}}
             <a class='gsp_abm_sum_ss_trigger gsp_abm_sum_btn' href='#'>
            <img src='{{:App.SkinPath}}/images/play-ss-m.png' title='{{:Resource.MoTbSsStart}}' alt=''>
             </a>
             {{/if}}
             {{if Settings.ShowUrlsButton}}
             <a class='gsp_abm_sum_sa_trigger gsp_abm_sum_btn' href='#'>
            <img src='{{:App.SkinPath}}/images/link-m.png' title='{{:Resource.AbmShareAlbum}}' alt=''>
             </a>
             {{/if}}
             {{if Settings.AllowZipDownload}}
             <a class='gsp_abm_sum_DownloadZip gsp_abm_sum_btn' href='{{: ~getDownloadUrl(Album.Id) }}'>
            <img src='{{:App.SkinPath}}/images/download-zip-m.png' title='{{:Resource.AbmDwnldZip}}' alt=''>
             </a>
             {{/if}}
             <span>
            <button class='gsp_abm_sum_rs'>{{:Resource.AbmRvsSortTt}}</button>
            <button class='gsp_btn_sb'>{{:Resource.AbmSortbyTt}}</button>
             </span>
             <ul class='gsp_abm_sum_sbi'>
            <li class='gsp_abm_sum_sbi_hdr'>{{:Resource.AbmSortbyTt}}</li>
            {{if Album.VirtualType == 1 && Album.Permissions.EditAlbum}}<li><a href='#' data-id='-2147483648'>{{:Resource.AbmSortbyCustom}}</a></li>{{/if}}
            <li><a href='#' data-id='8'>{{:Resource.AbmSortbyDatePictureTaken}}</a></li>
            <li><a href='#' data-id='111'>{{:Resource.AbmSortbyDateAdded}}</a></li>
            <li><a href='#' data-id='26'>{{:Resource.AbmSortbyRating}}</a></li>
            <li><a href='#' data-id='29'>{{:Resource.AbmSortbyTitle}}</a></li>
            <li><a href='#' data-id='34'>{{:Resource.AbmSortbyFilename}}</a></li>
             </ul>
            </div>
             </div>
             <p class='gsp_abm_sum_col1_row1'>
            {{if Album.VirtualType == 1 && Album.Permissions.EditAlbum}}
            <a class='gsp_abm_sum_pvt_trigger gsp_abm_sum_btn' href='#'>
            <img src='{{:App.SkinPath}}/images/lock-{{if Album.IsPrivate || !Settings.AllowAnonBrowsing}}active-{{/if}}s.png' title='{{if !Settings.AllowAnonBrowsing}}{{:Resource.AbmAnonDisabledTt}}{{else}}{{if Album.IsPrivate}}{{:Resource.AbmIsPvtTt}}{{else}}{{:Resource.AbmNotPvtTt}}{{/if}}{{/if}}' alt=''>
             </a>
            {{/if}}
            {{if Album.VirtualType == 1 && Album.Permissions.AdministerGallery}}
            <a class='gsp_abm_sum_ownr_trigger gsp_abm_sum_btn' href='#'>
            <img src='{{:App.SkinPath}}/images/user-s.png' title='{{:Resource.AbmOwnrTt}}' alt=''>
             </a>
            {{/if}}
            {{if Album.RssUrl}}
            <a class='gsp_abm_sum_btn' href='{{:Album.RssUrl}}'>
            <img src='{{:App.SkinPath}}/images/rss-s.png' title='{{:Resource.AbmRssTt}}' alt=''>
            </a>
            {{/if}}
            <span class='gsp_abm_sum_col1_row1_hdr'>{{:Resource.AbmPfx}}</span>
            <span class='gsp_abm_sum_col1_row1_dtl'>{{:Album.Title}}</span>
             </p>
             <div class='gsp_abm_sum_col1_row2'>
            <span class='gsp_abm_sum_col1_row2_hdr'></span>
            <span class='gsp_abm_sum_col1_row2_dtl'>{{:Album.Caption}}</span>
             </div>
            </div>

            {{if Album.GalleryItems.length == 0}}
             <p class='gsp_abm_noobj'>{{:Resource.AbmNoObj}} {{if Album.VirtualType == 1 && Album.Permissions.AddMediaObject}}<a href='{{: ~getAddUrl(#data) }}'>{{:Resource.AbmAddObj}}</a>{{/if}}</p>
            {{/if}}

            <ul class='gsp_floatcontainer gsp_abm_thmbs'>
             {{for Album.GalleryItems}}
             <li class='thmb{{if IsAlbum}} album{{/if}}' data-id='{{:Id}}' data-it='{{:ItemType}}' style='width:{{:Views[ViewIndex].Width + 40}}px;'>
            <a class='gsp_thmbLink' href='{{: ~getGalleryItemUrl(#data, !IsAlbum) }}'>
             <img class='gsp_thmb_img' style='width:{{:Views[ViewIndex].Width}}px;height:{{:Views[ViewIndex].Height}}px;' src='{{:Views[ViewIndex].Url}}'>
            </a>
            <p class='gsp_go_t' title='{{stripHtml:Title}}'>{{stripHtmlAndTruncate:Title}}</p>
             </li>
             {{/for}}
            </ul>

            <div class='gsp_abm_sum_share_dlg gsp_dlg'>
             <p class='gsp_abm_sum_share_dlg_t'>{{:Resource.AbmShareAlbum}}</p>
             <p class='gsp_abm_sum_share_dlg_s'>{{:Resource.AbmLinkToAlbum}}</p>
             <p><input type='text' class='gsp_abm_sum_share_dlg_ipt' value='{{: ~getAlbumUrl(Album.Id, true) }}' /></p>
            </div>

            <div class='gsp_abm_sum_ownr_dlg gsp_dlg'>
             <p class='gsp_abm_sum_ownr_dlg_t'>{{:Resource.AbmOwnr}}</p>
             <p class='gsp_abm_sum_ownr_dlg_s'>{{:Resource.AbmOwnrDtl}}</p>
            {{if Album.Permissions.AdministerGallery}}
             <p class='gsp_abm_sum_ownr_dlg_o'><span>{{:Resource.AbmOwnrLbl}}</span> <input type='text' class='gsp_abm_sum_ownr_dlg_ipt' value='{{:Album.Owner}}' /></p>
            {{/if}}
            {{if Album.InheritedOwners}}
             <p class='gsp_abm_sum_ownr_dlg_io'>{{:Resource.AbmOwnrInhtd}} {{:Album.InheritedOwners}}</p>
            {{/if}}
            </div>",
                                                                                                                                                                                ScriptTemplate = @"// Call the gspThumbnails plug-in, which adds the HTML to the page and then configures it
            $('#{{:Settings.ThumbnailClientId}}').gspThumbnails('{{:Settings.ThumbnailTmplName}}', window.{{:Settings.ClientId}}.gspData);"
                                                                                                                                                                            });

            ctx.UiTemplates.AddOrUpdate(a => new { a.TemplateType, a.FKGalleryId, a.Name }, new UiTemplateDto
                                                                                                                                                                            {
                                                                                                                                                                                TemplateType = UiTemplateType.MediaObject,
                                                                                                                                                                                Name = DefaultTmplName,
                                                                                                                                                                                FKGalleryId = galleryId,
                                                                                                                                                                                Description = "",
                                                                                                                                                                                HtmlTemplate = GetMediaObjectHtmlTmpl(false),
                                                                                                                                                                                ScriptTemplate = GetMediaObjectJsTmpl(false)
                                                                                                                                                                            });

            ctx.UiTemplates.AddOrUpdate(a => new { a.TemplateType, a.FKGalleryId, a.Name }, new UiTemplateDto
                                                                                                                                                                            {
                                                                                                                                                                                TemplateType = UiTemplateType.Header,
                                                                                                                                                                                Name = DefaultTmplName,
                                                                                                                                                                                FKGalleryId = galleryId,
                                                                                                                                                                                Description = "",
                                                                                                                                                                                HtmlTemplate = GetHeaderHtmlTmpl(false),
                                                                                                                                                                                ScriptTemplate = GetHeaderJsTmpl(false)
                                                                                                                                                                            });

            ctx.UiTemplates.AddOrUpdate(a => new { a.TemplateType, a.FKGalleryId, a.Name }, new UiTemplateDto
                                                                                                                                                                            {
                                                                                                                                                                                TemplateType = UiTemplateType.LeftPane,
                                                                                                                                                                                Name = DefaultTmplName,
                                                                                                                                                                                FKGalleryId = galleryId,
                                                                                                                                                                                Description = "",
                                                                                                                                                                                HtmlTemplate = GetLeftPaneHtmlTmpl(false, false),
                                                                                                                                                                                ScriptTemplate = GetLeftPaneJsTmpl(false, false)
                                                                                                                                                                            });

            ctx.UiTemplates.AddOrUpdate(a => new { a.TemplateType, a.FKGalleryId, a.Name }, new UiTemplateDto
                                                                                                                                                                            {
                                                                                                                                                                                TemplateType = UiTemplateType.RightPane,
                                                                                                                                                                                Name = DefaultTmplName,
                                                                                                                                                                                FKGalleryId = galleryId,
                                                                                                                                                                                Description = "",
                                                                                                                                                                                HtmlTemplate = GetRightPaneHtmlTmpl(false, false),
                                                                                                                                                                                ScriptTemplate = GetRightPaneJsTmpl(false, false)
                                                                                                                                                                            });

            ctx.UiTemplates.AddOrUpdate(a => new { a.TemplateType, a.FKGalleryId, a.Name }, new UiTemplateDto
                                                                                                                                                                            {
                                                                                                                                                                                TemplateType = UiTemplateType.Album,
                                                                                                                                                                                Name = "List View",
                                                                                                                                                                                FKGalleryId = galleryId,
                                                                                                                                                                                Description = "",
                                                                                                                                                                                HtmlTemplate = @"<table>
            <thead style='font-weight:bold;'><td>Title</td><td>Type</td><thead>
            {{for Album.GalleryItems}}
            <tr>
            <td>
             <p><a title='{{:Title}}' href='{{:#parent.parent.data.App.CurrentPageUrl}}{{if IsAlbum}}?aid={{:Id}}'>{{:#parent.parent.parent.data.Resource.AbmPfx}} {{else}}?moid={{:Id}}'>{{/if}}{{:Title}}</a></p>
            </td>
            <td><p>{{getItemTypeDesc:ItemType}}</p></td>
            </tr>
            {{/for}}
            </table>",
                                                                                                                                                                                ScriptTemplate = "$('#{{:Settings.ThumbnailClientId}}').html($.render [ '{{:Settings.ThumbnailTmplName}}' ](window.{{:Settings.ClientId}}.gspData));"
                                                                                                                                                                            });

            ctx.SaveChanges(); // Save so we can reference these records in InsertJQueryTemplateAlbums()
        }
Пример #17
0
        /// <summary>
        /// Adds or updates the PayPal 'view cart' and 'add to cart' widgets.
        /// </summary>
        private static void InsertPayPalTemplates()
        {
            using (var ctx = new GalleryDb())
            {
                var galleryId = ctx.Galleries.Single(g => g.IsTemplate).GalleryId;

                ctx.UiTemplates.AddOrUpdate(a => new { a.TemplateType, a.FKGalleryId, a.Name }, new UiTemplateDto
                {
                    TemplateType = UiTemplateType.Header,
                    Name = "Default with PayPal View Cart Widget",
                    FKGalleryId = galleryId,
                    Description = "",
                    HtmlTemplate = GetHeaderHtmlTmpl(true),
                    ScriptTemplate = GetHeaderJsTmpl(true)
                });

                ctx.UiTemplates.AddOrUpdate(a => new { a.TemplateType, a.FKGalleryId, a.Name }, new UiTemplateDto
                {
                    TemplateType = UiTemplateType.RightPane,
                    Name = "Default with PayPal Add To Cart Widget",
                    FKGalleryId = galleryId,
                    Description = "",
                    HtmlTemplate = GetRightPaneHtmlTmpl(true, false),
                    ScriptTemplate = GetRightPaneJsTmpl(true, false)
                });

                ctx.SaveChanges();
            }
        }
Пример #18
0
        /// <summary>
        /// Upgrades the 3.0.0 data to the 3.0.1 data. Applies to data such as app settings, gallery settings, templates, etc.
        /// Does not contain data structure changes such as new columns.
        /// </summary>
        /// <param name="ctx">Context to be used for updating data.</param>
        private static void UpgradeTo301(GalleryDb ctx)
        {
            // Bug 547: Change jQuery 1.10.0 to 1.10.1 (the migration code for 2.6 => 3.0 mistakenly specified 1.10.0 instead of 1.10.1)
            var appSetting = ctx.AppSettings.FirstOrDefault(a => a.SettingName == "JQueryScriptPath");

            if (appSetting != null && appSetting.SettingValue == "//ajax.googleapis.com/ajax/libs/jquery/1.10.0/jquery.min.js")
            {
                appSetting.SettingValue = "//ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js";
            }

            // Bug 570: Change "DateAdded" to "Date Added"
            foreach (var metaDef in ctx.GallerySettings.Where(gs => gs.SettingName == "MetadataDisplaySettings"))
            {
                // Serialized values are separated by apostrophes when first inserted; they are replaced by quotes by the JSON serializer when subsequently
                // saved, so we check for both.
                metaDef.SettingValue = metaDef.SettingValue.Replace(@"""MetadataItem"":111,""Name"":""DateAdded"",""DisplayName"":""DateAdded""", @"""MetadataItem"":111,""Name"":""DateAdded"",""DisplayName"":""Date Added""");
                metaDef.SettingValue = metaDef.SettingValue.Replace(@"'MetadataItem':111,'Name':'DateAdded','DisplayName':'DateAdded'", @"'MetadataItem':111,'Name':'DateAdded','DisplayName':'Date Added'");
            }

            // Bug 578: Change MP4 encoder setting
            foreach (var metaDef in ctx.GallerySettings.Where(gs => gs.SettingName == "MediaEncoderSettings"))
            {
                metaDef.SettingValue = metaDef.SettingValue.Replace(@"-s {Width}x{Height} -b:v 384k", @"-vf ""scale=min(iw*min(640/iw\,480/ih)\,iw):min(ih*min(640/iw\,480/ih)\,ih)"" -b:v 384k");
            }

            // Bug 554: (a) Fix M4V templates
            var mimeType = ctx.MimeTypes.FirstOrDefault(mt => mt.FileExtension == ".m4v" && mt.MimeTypeValue == "video/x-m4v");
            if (mimeType != null)
            {
                mimeType.MimeTypeValue = "video/m4v";
            }

            // Bug 554: (b) Delete x-m4v / safari template
            var mediaTmpl = ctx.MediaTemplates.FirstOrDefault(mt => mt.MimeType == "video/x-m4v" && mt.BrowserId == "safari");
            if (mediaTmpl != null)
            {
                ctx.MediaTemplates.Remove(mediaTmpl);
            }

            // Bug 554: (c) Delete existing m4v templates
            foreach (var tmpl in ctx.MediaTemplates.Where(mt => mt.MimeType == "video/m4v"))
            {
                ctx.MediaTemplates.Remove(tmpl);
            }

            // Bug 554: (d) Add m4v templates based on the mp4 ones
            foreach (var tmpl in ctx.MediaTemplates.Where(mt => mt.MimeType == "video/mp4"))
            {
                ctx.MediaTemplates.Add(new MediaTemplateDto()
                {
                    MimeType = "video/m4v",
                    BrowserId = tmpl.BrowserId,
                    HtmlTemplate = tmpl.HtmlTemplate,
                    ScriptTemplate = tmpl.ScriptTemplate
                });
            }

            // Bug 555: (a) Add MP3 template for IE1TO8 (copy it from Firefox, which uses Silverlight)
            var mp3MediaTmpl = ctx.MediaTemplates.FirstOrDefault(mt => mt.MimeType == "audio/x-mp3" && mt.BrowserId == "firefox");
            if (mp3MediaTmpl != null && (!ctx.MediaTemplates.Any(mt => mt.MimeType == mp3MediaTmpl.MimeType && mt.BrowserId == "ie1to8")))
            {
                ctx.MediaTemplates.Add(new MediaTemplateDto()
                {
                    MimeType = mp3MediaTmpl.MimeType,
                    BrowserId = "ie1to8",
                    HtmlTemplate = mp3MediaTmpl.HtmlTemplate,
                    ScriptTemplate = mp3MediaTmpl.ScriptTemplate
                });

            }

            // Bug 555: (b) Delete MP3 template for Safari
            mp3MediaTmpl = ctx.MediaTemplates.FirstOrDefault(mt => mt.MimeType == "audio/x-mp3" && mt.BrowserId == "safari");
            if (mp3MediaTmpl != null)
            {
                ctx.MediaTemplates.Remove(mp3MediaTmpl);
            }

            // Bug 564: (a) Change MIME type of .qt and .moov files from video/quicktime to video/mp4
            foreach (var qtMimeType in ctx.MimeTypes.Where(mt => new[] { ".qt", ".moov" }.Contains(mt.FileExtension) && mt.MimeTypeValue == "video/quicktime"))
            {
                qtMimeType.MimeTypeValue = "video/mp4";
            }

            // Bug 564: (b) Delete video/quicktime safari template
            foreach (var qtMediaTmpl in ctx.MediaTemplates.Where(mt => mt.MimeType == "video/quicktime" && mt.BrowserId == "safari"))
            {
                ctx.MediaTemplates.Remove(qtMediaTmpl);
            }

            // Bug 562: Add PDF template for Safari. It looks mostly like the IE one except we have to clear the iframe src before we can hide it.

            const string pdfScriptTmplSafari = @"// IE and Safari render Adobe Reader iframes on top of jQuery UI dialogs, so add event handler to hide frame while dialog is visible
            // Safari requires that we clear the iframe src before we can hide it
            $('.gsp_mo_share_dlg').on('dialogopen', function() {
             $('#{UniqueId}_frame').attr('src', '').css('visibility', 'hidden');
            }).on('dialogclose', function() {
            $('#{UniqueId}_frame').attr('src', '{MediaObjectUrl}').css('visibility', 'visible');
            });";

            if (!ctx.MediaTemplates.Any(mt => mt.MimeType == "application/pdf" && mt.BrowserId == "safari"))
            {
                ctx.MediaTemplates.Add(new MediaTemplateDto()
                {
                    MimeType = "application/pdf",
                    BrowserId = "safari",
                    HtmlTemplate = "<p><a href='{MediaObjectUrl}'>Enlarge PDF to fit browser window</a></p><iframe id='{UniqueId}_frame' src='{MediaObjectUrl}' frameborder='0' style='width:680px;height:600px;border:1px solid #000;'></iframe>",
                    ScriptTemplate = pdfScriptTmplSafari
                });
            }

            // Bug 580: Need to use AddMediaObject permission instead of EditAlbum permission when deciding whether to render the Add link in an empty album.
            // Task 579: Change lock icon tooltip when anonymous access is disabled
            // Task 575: Update signature of jsRender helper functions getAlbumUrl, getGalleryItemUrl, getDownloadUrl, currentUrl
            foreach (var uiTmpl in ctx.UiTemplates.Where(t => t.TemplateType == UiTemplateType.Album))
            {
                const string srcText580 = "{{if Album.Permissions.EditAlbum}}<a href='{{: ~getAddUrl(#data) }}'>{{:Resource.AbmAddObj}}</a>{{/if}}";
                const string replText580 = "{{if Album.Permissions.AddMediaObject}}<a href='{{: ~getAddUrl(#data) }}'>{{:Resource.AbmAddObj}}</a>{{/if}}";

                const string srcText579 = "<img src='{{:App.SkinPath}}/images/lock-{{if Album.IsPrivate}}active-{{/if}}s.png' title='{{if Album.IsPrivate}}{{:Resource.AbmIsPvtTt}}{{else}}{{:Resource.AbmNotPvtTt}}{{/if}}' alt=''>";
                const string replText579 = "<img src='{{:App.SkinPath}}/images/lock-{{if Album.IsPrivate || !Settings.AllowAnonBrowsing}}active-{{/if}}s.png' title='{{if !Settings.AllowAnonBrowsing}}{{:Resource.AbmAnonDisabledTt}}{{else}}{{if Album.IsPrivate}}{{:Resource.AbmIsPvtTt}}{{else}}{{:Resource.AbmNotPvtTt}}{{/if}}{{/if}}' alt=''>";

                const string srcText575a = "~getAlbumUrl(#data)";
                const string replText575a = "~getAlbumUrl(Album.Id, true)";

                const string srcText575b = "~getGalleryItemUrl(#data)";
                const string replText575b = "~getGalleryItemUrl(#data, !IsAlbum)";

                const string srcText575c = "~getDownloadUrl(#data)";
                const string replText575c = "~getDownloadUrl(Album.Id)";

                uiTmpl.HtmlTemplate = uiTmpl.HtmlTemplate.Replace(srcText580, replText580);
                uiTmpl.HtmlTemplate = uiTmpl.HtmlTemplate.Replace(srcText579, replText579);
                uiTmpl.HtmlTemplate = uiTmpl.HtmlTemplate.Replace(srcText575a, replText575a);
                uiTmpl.HtmlTemplate = uiTmpl.HtmlTemplate.Replace(srcText575b, replText575b);
                uiTmpl.HtmlTemplate = uiTmpl.HtmlTemplate.Replace(srcText575c, replText575c);
            }

            // Task 575: Update signature of jsRender helper function getDownloadUrl
            foreach (var uiTmpl in ctx.UiTemplates.Where(t => t.TemplateType == UiTemplateType.MediaObject))
            {
                const string srcText575c = "~getDownloadUrl()";
                const string replText575c = "~getDownloadUrl(Album.Id)";

                const string srcText575d = "~currentUrl()";
                const string replText575d = "~getMediaUrl(MediaItem.Id, true)";

                uiTmpl.HtmlTemplate = uiTmpl.HtmlTemplate.Replace(srcText575c, replText575c);
                uiTmpl.HtmlTemplate = uiTmpl.HtmlTemplate.Replace(srcText575d, replText575d);
            }

            // Update data schema version to 3.0.1
            var asDataSchema = ctx.AppSettings.First(a => a.SettingName == "DataSchemaVersion");
            asDataSchema.SettingValue = "3.0.1";

            ctx.SaveChanges();
        }
Пример #19
0
 /// <summary>
 /// Returns the current data schema version as defined in the AppSetting table.
 /// </summary>
 /// <returns>An instance of <see cref="GalleryDataSchemaVersion" /> indicating the current data schema version
 /// as defined in the AppSetting table.</returns>
 private static GalleryDataSchemaVersion GetCurrentSchema(GalleryDb ctx)
 {
     return GalleryDataSchemaVersionEnumHelper.ConvertGalleryDataSchemaVersionToEnum(ctx.AppSettings.First(a => a.SettingName == "DataSchemaVersion").SettingValue);
 }
Пример #20
0
        private static void InsertMetadata(GalleryDb ctx)
        {
            // Insert default set of data for root album.
            var rootAlbumWithMissingTitle = ctx.Albums.FirstOrDefault(a => a.FKAlbumParentId == null && a.Metadata.All(md => md.MetaName != MetadataItemName.Title));

            if (rootAlbumWithMissingTitle != null)
            {
                ctx.Metadatas.Add(new MetadataDto { MetaName = MetadataItemName.Title, FKAlbumId = rootAlbumWithMissingTitle.AlbumId, Value = "ALL ALBUMS" });
            }

            var rootAlbumWithMissingCaption = ctx.Albums.FirstOrDefault(a => a.FKAlbumParentId == null && a.Metadata.All(md => md.MetaName != MetadataItemName.Caption));

            if (rootAlbumWithMissingCaption != null)
            {
                ctx.Metadatas.Add(new MetadataDto { MetaName = MetadataItemName.Caption, FKAlbumId = rootAlbumWithMissingCaption.AlbumId, Value = "Welcome to Gallery Server Pro! <span class='gsp_msgfriendly'>Start by <a href='?g=createaccount' style='color: #7ad199;'>creating an admin account</a>.</span>" });
            }

            //ctx.Metadatas.AddOrUpdate(m => new { m.MetaName, m.Value }, new MetadataDto { MetaName = MetadataItemName.AlbumTitle, FKAlbumId = rootAlbumId, Value = "Welcome to Gallery Server Pro!" });
            //ctx.Metadatas.AddOrUpdate(m => m.MetaName, new MetadataDto { MetaName = MetadataItemName.AlbumTitle, FKAlbumId = rootAlbumId, Value = "Welcome to Gallery Server Pro!" });
        }
Пример #21
0
        /// <summary>
        /// Upgrades the 3.1.0 data to the 3.2.0 data. Applies to data such as app settings, gallery settings, templates, etc.
        /// Does not contain data structure changes such as new columns.
        /// </summary>
        /// <param name="ctx">Context to be used for updating data.</param>
        private static void UpgradeTo320(GalleryDb ctx)
        {
            foreach (var uiTmpl in ctx.UiTemplates.Where(t => t.TemplateType == UiTemplateType.Album))
            {
                // Task 669: Allow manual sorting of media objects
                // Step 1: Add the Custom option to the sort by dropdown
                var srcText = @"<li class='gsp_abm_sum_sbi_hdr'>{{:Resource.AbmSortbyTt}}</li>";

                var replText = @"<li class='gsp_abm_sum_sbi_hdr'>{{:Resource.AbmSortbyTt}}</li>
{{if Album.VirtualType == 1 && Album.Permissions.EditAlbum}}<li><a href='#' data-id='-2147483648'>{{:Resource.AbmSortbyCustom}}</a></li>{{/if}}";

                uiTmpl.HtmlTemplate = uiTmpl.HtmlTemplate.Replace(srcText, replText);

                // Step 2: Convert the thumbnails into a list of <li> tags instead of <div>'s. Required for jQuery UI Sortable.
                srcText = @"<div class='gsp_floatcontainer'>
 {{for Album.GalleryItems}}
 <div class='thmb{{if IsAlbum}} album{{/if}}' data-id='{{:Id}}' data-it='{{:ItemType}}'>
	<a class='gsp_thmbLink' href='{{: ~getGalleryItemUrl(#data, !IsAlbum) }}'>
	 <img class='gsp_thmb_img' style='width:{{:Views[ViewIndex].Width}}px;height:{{:Views[ViewIndex].Height}}px;' src='{{:Views[ViewIndex].Url}}'>
	</a>
	<p class='gsp_go_t' style='width:{{:Views[ViewIndex].Width + 40}}px;' title='{{stripHtml:Title}}'>{{stripHtmlAndTruncate:Title}}</p>
 </div>
 {{/for}}
</div>";

                replText = @"<ul class='gsp_floatcontainer gsp_abm_thmbs'>
 {{for Album.GalleryItems}}
 <li class='thmb{{if IsAlbum}} album{{/if}}' data-id='{{:Id}}' data-it='{{:ItemType}}' style='width:{{:Views[ViewIndex].Width + 40}}px;'>
	<a class='gsp_thmbLink' href='{{: ~getGalleryItemUrl(#data, !IsAlbum) }}'>
	 <img class='gsp_thmb_img' style='width:{{:Views[ViewIndex].Width}}px;height:{{:Views[ViewIndex].Height}}px;' src='{{:Views[ViewIndex].Url}}'>
	</a>
	<p class='gsp_go_t' title='{{stripHtml:Title}}'>{{stripHtmlAndTruncate:Title}}</p>
 </li>
 {{/for}}
</ul>";

                uiTmpl.HtmlTemplate = uiTmpl.HtmlTemplate.Replace(srcText, replText);

                // Step 3: Update the JavaScript so that left pane is rendered regardless of whether the client is on a touchscreen device
                srcText = @"var isTouch = window.Gsp.isTouchScreen();
var renderLeftPane = !isTouch  || (isTouch && ($('.gsp_tb_s_CenterPane:visible, .gsp_tb_s_RightPane:visible').length == 0));

if (renderLeftPane ) {
 $('#{{:Settings.LeftPaneClientId}}').html( $.render [ '{{:Settings.LeftPaneTmplName}}' ]( window.{{:Settings.ClientId}}.gspData ));
";

                replText = @"var $lp = $('#{{:Settings.LeftPaneClientId}}');

if ($lp.length > 0) {
 $lp.html( $.render [ '{{:Settings.LeftPaneTmplName}}' ]( window.{{:Settings.ClientId}}.gspData ));
";

                uiTmpl.ScriptTemplate = uiTmpl.ScriptTemplate.Replace(srcText, replText);

                // Bug 709: Link to add objects page should not appear in empty virtual albums
                // Add a condition to the if statement so that Add link appears only for non-virtual albums
                srcText = @"{{if Album.Permissions.AddMediaObject}}<a href='{{: ~getAddUrl(#data) }}'>{{:Resource.AbmAddObj}}</a>{{/if}}";

                replText = @"{{if Album.VirtualType == 1 && Album.Permissions.AddMediaObject}}<a href='{{: ~getAddUrl(#data) }}'>{{:Resource.AbmAddObj}}</a>{{/if}}";

                uiTmpl.HtmlTemplate = uiTmpl.HtmlTemplate.Replace(srcText, replText);

                // Task 722: Add RSS link to album template
                srcText = @"
	<span class='gsp_abm_sum_col1_row1_hdr'>{{:Resource.AbmPfx}}</span>"    ;

                replText = @"
{{if Album.RssUrl}}
	<a class='gsp_abm_sum_btn' href='{{:Album.RssUrl}}'>
		<img src='{{:App.SkinPath}}/images/rss-s.png' title='{{:Resource.AbmRssTt}}' alt=''>
	</a>
{{/if}}
	<span class='gsp_abm_sum_col1_row1_hdr'>{{:Resource.AbmPfx}}</span>"    ;

                uiTmpl.HtmlTemplate = uiTmpl.HtmlTemplate.Replace(srcText, replText);

                // Task 730: Assign owner button should not be visible for virtual albums
                srcText = @"
{{if Album.Permissions.AdministerGallery}}
	<a class='gsp_abm_sum_ownr_trigger gsp_abm_sum_btn' href='#'>"    ;

                replText = @"
{{if Album.VirtualType == 1 && Album.Permissions.AdministerGallery}}
	<a class='gsp_abm_sum_ownr_trigger gsp_abm_sum_btn' href='#'>"    ;

                uiTmpl.HtmlTemplate = uiTmpl.HtmlTemplate.Replace(srcText, replText);
            }

            // Task 681: Merge My account button into username in header
            foreach (var uiTmpl in ctx.UiTemplates.Where(t => t.TemplateType == UiTemplateType.Header))
            {
                // Step 1: Remove the HTML for the 'My account' icon
                var srcText = @"
	{{if Settings.AllowManageOwnAccount}}
	<div class='gsp_useroption'>
	 <a class='gsp_myaccountlink' href='{{:App.CurrentPageUrl}}?g=myaccount&aid={{:Album.Id}}'>
		<img class='gsp_myaccount-user-icon' title='{{:Resource.HdrMyAccountTt}}' alt='{{:Resource.HdrMyAccountTt}}' src='{{:App.SkinPath}}/images/user-l.png'>
	 </a></div>
	 {{/if}}"    ;

                var replText = "";

                uiTmpl.HtmlTemplate = uiTmpl.HtmlTemplate.Replace(srcText, replText);

                // Step 2: Replace the username with a hyperlinked username that takes user to 'My account' page,
                // except when AllowManageOwnAccount=false, in which case just display the username like before.
                srcText = @"	<span id='{{:Settings.ClientId}}_userwelcome' class='gsp_welcome'>{{:User.UserName}}</span></div>";

                replText = @"{{if Settings.AllowManageOwnAccount}}
		<a id='{{:Settings.ClientId}}_userwelcome' href='{{:App.CurrentPageUrl}}?g=myaccount&aid={{:Album.Id}}' class='gsp_welcome' title='{{:Resource.HdrMyAccountTt}}'>{{:User.UserName}}</a>
	 {{else}}
		<span id='{{:Settings.ClientId}}_userwelcome' class='gsp_welcome'>{{:User.UserName}}</span>
	 {{/if}}
	 </div>"    ;

                uiTmpl.HtmlTemplate = uiTmpl.HtmlTemplate.Replace(srcText, replText);
            }

            foreach (var uiTmpl in ctx.UiTemplates.Where(t => t.TemplateType == UiTemplateType.LeftPane))
            {
                // Task 675: Add RECENTLY ADDED and TOP RATED links to left pane
                const string srcText = @"<div id='{{:Settings.ClientId}}_lptv'></div>";

                const string replText = @"<div id='{{:Settings.ClientId}}_lptv' class='gsp_lpalbumtree'></div>
{{if App.LatestUrl}}<p class='gsp_lplatest'><a href='{{:App.LatestUrl}}' class='jstree-anchor'><i class='jstree-icon'></i>{{:Resource.LpRecent}}</a></p>{{/if}}
{{if App.TopRatedUrl}}<p class='gsp_lptoprated'><a href='{{:App.TopRatedUrl}}' class='jstree-anchor'><i class='jstree-icon'></i>{{:Resource.LpTopRated}}</a></p>{{/if}}";

                uiTmpl.HtmlTemplate = uiTmpl.HtmlTemplate.Replace(srcText, replText);
            }

            // Task 727: Update jQuery 1.10.2 to 1.11.1. Update jQuery UI 1.10.3 to 1.10.4.
            var appSetting = ctx.AppSettings.FirstOrDefault(a => a.SettingName == "JQueryScriptPath");

            if (appSetting != null && appSetting.SettingValue == "//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js")
            {
                appSetting.SettingValue = "//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js";
            }

            appSetting = ctx.AppSettings.FirstOrDefault(a => a.SettingName == "JQueryUiScriptPath");

            if (appSetting != null && appSetting.SettingValue == "//ajax.googleapis.com/ajax/libs/jqueryui/1.10.3/jquery-ui.min.js")
            {
                appSetting.SettingValue = "//ajax.googleapis.com/ajax/libs/jqueryui/1.10.4/jquery-ui.min.js";
            }

            // Task 722: Now that {MediaObjectUrl} is an absolute URL, remove any instances of {HostUrl} that precede it.
            // Under default settings this only affects the HTML portion of two video/divx records, but we're making it more
            // generic to catch any customizations an admin may have done.
            foreach (var tmpl in ctx.MediaTemplates.Where(mt => mt.HtmlTemplate.Contains("{HostUrl}{MediaObjectUrl}") || mt.ScriptTemplate.Contains("{HostUrl}{MediaObjectUrl}")))
            {
                tmpl.HtmlTemplate   = tmpl.HtmlTemplate.Replace("{HostUrl}{MediaObjectUrl}", "{MediaObjectUrl}");
                tmpl.ScriptTemplate = tmpl.ScriptTemplate.Replace("{HostUrl}{MediaObjectUrl}", "{MediaObjectUrl}");
            }

            // Update data schema version to 3.2.0
            var asDataSchema = ctx.AppSettings.First(a => a.SettingName == "DataSchemaVersion");

            asDataSchema.SettingValue = "3.2.0";

            ctx.SaveChanges();

            // Task 674: Add/update Enterprise UI templates introduced in 3.2.0
            var pkRow = ctx.AppSettings.Single(a => a.SettingName == "ProductKey");

            if (pkRow.SettingValue == Constants.ProductKeyEnterprise)
            {
                SeedController.InsertEnterpriseTemplates();
            }
        }
Пример #22
0
        private static void InsertMimeTypeGalleries(GalleryDb ctx)
        {
            var galleryId = ctx.Galleries.First(g => !g.IsTemplate).GalleryId;

            foreach (var mimeTypeDto in ctx.MimeTypes)
            {
                ctx.MimeTypeGalleries.AddOrUpdate(a => new { a.FKGalleryId, a.FKMimeTypeId }, new MimeTypeGalleryDto
                                                                                                                                                                            {
                                                                                                                                                                                FKGalleryId = galleryId,
                                                                                                                                                                                FKMimeTypeId = mimeTypeDto.MimeTypeId,
                                                                                                                                                                                IsEnabled = mimeTypeDto.FileExtension.Equals(".jpg", StringComparison.OrdinalIgnoreCase) || mimeTypeDto.FileExtension.Equals(".jpeg", StringComparison.OrdinalIgnoreCase)
                                                                                                                                                                            });
            }
        }
Пример #23
0
        /// <summary>
        /// Upgrades the 3.0.2 data to the 3.0.3 data. Applies to data such as app settings, gallery settings, templates, etc.
        /// Does not contain data structure changes such as new columns.
        /// </summary>
        /// <param name="ctx">Context to be used for updating data.</param>
        private static void UpgradeTo303(GalleryDb ctx)
        {
            // Fix bug# 632: Error "Cannot find skin path"
            // Change skin name from "Dark" to "dark".
            var asSkin = ctx.AppSettings.First(a => a.SettingName == "Skin");
            if (asSkin.SettingValue == "Dark")
            {
                asSkin.SettingValue = "dark";
            }

            // Fix bug# 633: Upgrading from 2.6 may result in duplicate sets of tags
            // Delete any duplicate "tag" metadata rows
            // FYI: We need the ToList() to avoid this error in SQL CE: The ntext and image data types cannot be used in WHERE, HAVING, GROUP BY, ON, or IN clauses, except when these data types are used with the LIKE or IS NULL predicates.
            var dupMetaTags = ctx.Metadatas
                .Where(m => m.MetaName == MetadataItemName.Tags)
                .GroupBy(m => m.FKMediaObjectId).Where(m => m.Count() > 1)
                .ToList()
                .Select(m => m.Where(t => t.Value == String.Empty))
                .Select(m => m.FirstOrDefault());

            foreach (var dupMetaTag in dupMetaTags)
            {
                ctx.Metadatas.Remove(dupMetaTag);
            }

            // Update data schema version to 3.0.3
            var asDataSchema = ctx.AppSettings.First(a => a.SettingName == "DataSchemaVersion");
            asDataSchema.SettingValue = "3.0.3";

            ctx.SaveChanges();
        }
Пример #24
0
 /// <summary>
 /// Inserts the seed data into the Gallery Server Pro tables. This will reset all data to their default values.
 /// </summary>
 /// <param name="ctx">The data context.</param>
 public static void InsertSeedData(GalleryDb ctx)
 {
     InsertAppSettings(ctx);
     InsertGalleries(ctx);
     InsertAlbums(ctx);
     InsertMetadata(ctx);
     InsertGallerySettings(ctx);
     InsertMimeTypes(ctx);
     InsertMimeTypeGalleries(ctx);
     InsertMediaTemplates(ctx);
     InsertUiTemplates(ctx);
     InsertUiTemplateAlbums(ctx);
 }
Пример #25
0
        /// <summary>
        /// Upgrades the 3.1.0 data to the 3.2.0 data. Applies to data such as app settings, gallery settings, templates, etc.
        /// Does not contain data structure changes such as new columns.
        /// </summary>
        /// <param name="ctx">Context to be used for updating data.</param>
        private static void UpgradeTo320(GalleryDb ctx)
        {
            foreach (var uiTmpl in ctx.UiTemplates.Where(t => t.TemplateType == UiTemplateType.Album))
            {
                // Task 669: Allow manual sorting of media objects
                // Step 1: Add the Custom option to the sort by dropdown
                var srcText = @"<li class='gsp_abm_sum_sbi_hdr'>{{:Resource.AbmSortbyTt}}</li>";

                var replText = @"<li class='gsp_abm_sum_sbi_hdr'>{{:Resource.AbmSortbyTt}}</li>
            {{if Album.VirtualType == 1 && Album.Permissions.EditAlbum}}<li><a href='#' data-id='-2147483648'>{{:Resource.AbmSortbyCustom}}</a></li>{{/if}}";

                uiTmpl.HtmlTemplate = uiTmpl.HtmlTemplate.Replace(srcText, replText);

                // Step 2: Convert the thumbnails into a list of <li> tags instead of <div>'s. Required for jQuery UI Sortable.
                srcText = @"<div class='gsp_floatcontainer'>
             {{for Album.GalleryItems}}
             <div class='thmb{{if IsAlbum}} album{{/if}}' data-id='{{:Id}}' data-it='{{:ItemType}}'>
            <a class='gsp_thmbLink' href='{{: ~getGalleryItemUrl(#data, !IsAlbum) }}'>
             <img class='gsp_thmb_img' style='width:{{:Views[ViewIndex].Width}}px;height:{{:Views[ViewIndex].Height}}px;' src='{{:Views[ViewIndex].Url}}'>
            </a>
            <p class='gsp_go_t' style='width:{{:Views[ViewIndex].Width + 40}}px;' title='{{stripHtml:Title}}'>{{stripHtmlAndTruncate:Title}}</p>
             </div>
             {{/for}}
            </div>";

                replText = @"<ul class='gsp_floatcontainer gsp_abm_thmbs'>
             {{for Album.GalleryItems}}
             <li class='thmb{{if IsAlbum}} album{{/if}}' data-id='{{:Id}}' data-it='{{:ItemType}}' style='width:{{:Views[ViewIndex].Width + 40}}px;'>
            <a class='gsp_thmbLink' href='{{: ~getGalleryItemUrl(#data, !IsAlbum) }}'>
             <img class='gsp_thmb_img' style='width:{{:Views[ViewIndex].Width}}px;height:{{:Views[ViewIndex].Height}}px;' src='{{:Views[ViewIndex].Url}}'>
            </a>
            <p class='gsp_go_t' title='{{stripHtml:Title}}'>{{stripHtmlAndTruncate:Title}}</p>
             </li>
             {{/for}}
            </ul>";

                uiTmpl.HtmlTemplate = uiTmpl.HtmlTemplate.Replace(srcText, replText);

                // Step 3: Update the JavaScript so that left pane is rendered regardless of whether the client is on a touchscreen device
                srcText = @"var isTouch = window.Gsp.isTouchScreen();
            var renderLeftPane = !isTouch  || (isTouch && ($('.gsp_tb_s_CenterPane:visible, .gsp_tb_s_RightPane:visible').length == 0));

            if (renderLeftPane ) {
             $('#{{:Settings.LeftPaneClientId}}').html( $.render [ '{{:Settings.LeftPaneTmplName}}' ]( window.{{:Settings.ClientId}}.gspData ));
            ";

                replText = @"var $lp = $('#{{:Settings.LeftPaneClientId}}');

            if ($lp.length > 0) {
             $lp.html( $.render [ '{{:Settings.LeftPaneTmplName}}' ]( window.{{:Settings.ClientId}}.gspData ));
            ";

                uiTmpl.ScriptTemplate = uiTmpl.ScriptTemplate.Replace(srcText, replText);

                // Bug 709: Link to add objects page should not appear in empty virtual albums
                // Add a condition to the if statement so that Add link appears only for non-virtual albums
                srcText = @"{{if Album.Permissions.AddMediaObject}}<a href='{{: ~getAddUrl(#data) }}'>{{:Resource.AbmAddObj}}</a>{{/if}}";

                replText = @"{{if Album.VirtualType == 1 && Album.Permissions.AddMediaObject}}<a href='{{: ~getAddUrl(#data) }}'>{{:Resource.AbmAddObj}}</a>{{/if}}";

                uiTmpl.HtmlTemplate = uiTmpl.HtmlTemplate.Replace(srcText, replText);

                // Task 722: Add RSS link to album template
                srcText = @"
            <span class='gsp_abm_sum_col1_row1_hdr'>{{:Resource.AbmPfx}}</span>";

                replText = @"
            {{if Album.RssUrl}}
            <a class='gsp_abm_sum_btn' href='{{:Album.RssUrl}}'>
            <img src='{{:App.SkinPath}}/images/rss-s.png' title='{{:Resource.AbmRssTt}}' alt=''>
            </a>
            {{/if}}
            <span class='gsp_abm_sum_col1_row1_hdr'>{{:Resource.AbmPfx}}</span>";

                uiTmpl.HtmlTemplate = uiTmpl.HtmlTemplate.Replace(srcText, replText);

                // Task 730: Assign owner button should not be visible for virtual albums
                srcText = @"
            {{if Album.Permissions.AdministerGallery}}
            <a class='gsp_abm_sum_ownr_trigger gsp_abm_sum_btn' href='#'>";

                replText = @"
            {{if Album.VirtualType == 1 && Album.Permissions.AdministerGallery}}
            <a class='gsp_abm_sum_ownr_trigger gsp_abm_sum_btn' href='#'>";

                uiTmpl.HtmlTemplate = uiTmpl.HtmlTemplate.Replace(srcText, replText);
            }

            // Task 681: Merge My account button into username in header
            foreach (var uiTmpl in ctx.UiTemplates.Where(t => t.TemplateType == UiTemplateType.Header))
            {
                // Step 1: Remove the HTML for the 'My account' icon
                var srcText = @"
            {{if Settings.AllowManageOwnAccount}}
            <div class='gsp_useroption'>
             <a class='gsp_myaccountlink' href='{{:App.CurrentPageUrl}}?g=myaccount&aid={{:Album.Id}}'>
            <img class='gsp_myaccount-user-icon' title='{{:Resource.HdrMyAccountTt}}' alt='{{:Resource.HdrMyAccountTt}}' src='{{:App.SkinPath}}/images/user-l.png'>
             </a></div>
             {{/if}}";

                var replText = "";

                uiTmpl.HtmlTemplate = uiTmpl.HtmlTemplate.Replace(srcText, replText);

                // Step 2: Replace the username with a hyperlinked username that takes user to 'My account' page,
                // except when AllowManageOwnAccount=false, in which case just display the username like before.
                srcText = @"	<span id='{{:Settings.ClientId}}_userwelcome' class='gsp_welcome'>{{:User.UserName}}</span></div>";

                replText = @"{{if Settings.AllowManageOwnAccount}}
            <a id='{{:Settings.ClientId}}_userwelcome' href='{{:App.CurrentPageUrl}}?g=myaccount&aid={{:Album.Id}}' class='gsp_welcome' title='{{:Resource.HdrMyAccountTt}}'>{{:User.UserName}}</a>
             {{else}}
            <span id='{{:Settings.ClientId}}_userwelcome' class='gsp_welcome'>{{:User.UserName}}</span>
             {{/if}}
             </div>";

                uiTmpl.HtmlTemplate = uiTmpl.HtmlTemplate.Replace(srcText, replText);
            }

            foreach (var uiTmpl in ctx.UiTemplates.Where(t => t.TemplateType == UiTemplateType.LeftPane))
            {
                // Task 675: Add RECENTLY ADDED and TOP RATED links to left pane
                const string srcText = @"<div id='{{:Settings.ClientId}}_lptv'></div>";

                const string replText = @"<div id='{{:Settings.ClientId}}_lptv' class='gsp_lpalbumtree'></div>
            {{if App.LatestUrl}}<p class='gsp_lplatest'><a href='{{:App.LatestUrl}}' class='jstree-anchor'><i class='jstree-icon'></i>{{:Resource.LpRecent}}</a></p>{{/if}}
            {{if App.TopRatedUrl}}<p class='gsp_lptoprated'><a href='{{:App.TopRatedUrl}}' class='jstree-anchor'><i class='jstree-icon'></i>{{:Resource.LpTopRated}}</a></p>{{/if}}";

                uiTmpl.HtmlTemplate = uiTmpl.HtmlTemplate.Replace(srcText, replText);
            }

            // Task 727: Update jQuery 1.10.2 to 1.11.1. Update jQuery UI 1.10.3 to 1.10.4.
            var appSetting = ctx.AppSettings.FirstOrDefault(a => a.SettingName == "JQueryScriptPath");

            if (appSetting != null && appSetting.SettingValue == "//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js")
            {
                appSetting.SettingValue = "//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js";
            }

            appSetting = ctx.AppSettings.FirstOrDefault(a => a.SettingName == "JQueryUiScriptPath");

            if (appSetting != null && appSetting.SettingValue == "//ajax.googleapis.com/ajax/libs/jqueryui/1.10.3/jquery-ui.min.js")
            {
                appSetting.SettingValue = "//ajax.googleapis.com/ajax/libs/jqueryui/1.10.4/jquery-ui.min.js";
            }

            // Task 722: Now that {MediaObjectUrl} is an absolute URL, remove any instances of {HostUrl} that precede it.
            // Under default settings this only affects the HTML portion of two video/divx records, but we're making it more
            // generic to catch any customizations an admin may have done.
            foreach (var tmpl in ctx.MediaTemplates.Where(mt => mt.HtmlTemplate.Contains("{HostUrl}{MediaObjectUrl}") || mt.ScriptTemplate.Contains("{HostUrl}{MediaObjectUrl}")))
            {
                tmpl.HtmlTemplate = tmpl.HtmlTemplate.Replace("{HostUrl}{MediaObjectUrl}", "{MediaObjectUrl}");
                tmpl.ScriptTemplate = tmpl.ScriptTemplate.Replace("{HostUrl}{MediaObjectUrl}", "{MediaObjectUrl}");
            }

            // Update data schema version to 3.2.0
            var asDataSchema = ctx.AppSettings.First(a => a.SettingName == "DataSchemaVersion");
            asDataSchema.SettingValue = "3.2.0";

            ctx.SaveChanges();

            // Task 674: Add/update Enterprise UI templates introduced in 3.2.0
            var pkRow = ctx.AppSettings.Single(a => a.SettingName == "ProductKey");

            if (pkRow.SettingValue == Constants.ProductKeyEnterprise)
            {
                SeedController.InsertEnterpriseTemplates();
            }
        }
Пример #26
0
 /// <summary>
 /// Returns the current data schema version as defined in the AppSetting table.
 /// </summary>
 /// <returns>An instance of <see cref="GalleryDataSchemaVersion" /> indicating the current data schema version
 /// as defined in the AppSetting table.</returns>
 private static GalleryDataSchemaVersion GetCurrentSchema(GalleryDb ctx)
 {
     return(GalleryDataSchemaVersionEnumHelper.ConvertGalleryDataSchemaVersionToEnum(ctx.AppSettings.First(a => a.SettingName == "DataSchemaVersion").SettingValue));
 }
Пример #27
0
        /// <summary>
        /// Verify there are gallery settings for the current gallery that match every template gallery setting, creating any
        /// if necessary.
        /// </summary>
        private void ConfigureGallerySettingsTable()
        {
            var foundTmplGallerySettings = false;
            using (var repo = new GallerySettingRepository())
            {
                repo.Load();

                // Loop through each template gallery setting.
                foreach (var gsTmpl in repo.Where(g => g.Gallery.IsTemplate))
                {
                    foundTmplGallerySettings = true;
                    if (!repo.Local.Any(gs => gs.SettingName == gsTmpl.SettingName && gs.FKGalleryId == GalleryId))
                    {
                        // This gallery is missing an entry for a gallery setting. Create one by copying it from the template gallery.
                        repo.Add(new GallerySettingDto()
                                             {
                                                 FKGalleryId = GalleryId,
                                                 SettingName = gsTmpl.SettingName,
                                                 SettingValue = gsTmpl.SettingValue
                                             });
                    }
                }

                repo.Save();
            }

            if (!foundTmplGallerySettings)
            {
                // If there weren't *any* template gallery settings, insert the seed data. Generally this won't be necessary, but it
                // can help recover from certain conditions, such as when a SQL Server connection is accidentally specified without
                // the MultipleActiveResultSets keyword (or it was false). In this situation the galleries are inserted but an error
                // prevents the remaining data from being inserted. Once the user corrects this and tries again, this code can run to
                // finish inserting the seed data.
                using (var ctx = new GalleryDb())
                {
                    SeedController.InsertSeedData(ctx);
                }
            }
        }
Пример #28
0
        private static void InsertAlbums(GalleryDb ctx)
        {
            // Insert the root album into the first non-template gallery.
            var galleryId = ctx.Galleries.First(g => !g.IsTemplate).GalleryId;

            if (!ctx.Albums.Any(a => a.FKAlbumParentId == null && a.FKGalleryId == galleryId))
            {
                var rootAlbum = new AlbumDto
                                                    {
                                                        FKGalleryId = galleryId,
                                                        FKAlbumParentId = null,
                                                        DirectoryName = String.Empty,
                                                        ThumbnailMediaObjectId = 0,
                                                        SortByMetaName = MetadataItemName.DateAdded,
                                                        SortAscending = true,
                                                        Seq = 0,
                                                        DateAdded = DateTime.Now,
                                                        CreatedBy = "System",
                                                        LastModifiedBy = "System",
                                                        DateLastModified = DateTime.Now,
                                                        OwnedBy = String.Empty,
                                                        OwnerRoleName = String.Empty,
                                                        IsPrivate = false
                                                    };

                ctx.Albums.Add(rootAlbum);
            }

            SaveChanges(ctx);

            // NOTE: The title & summary for this album are validated and inserted if necessary in the function InsertMetadata().

            // Add the title
            //ctx.Metadatas.AddOrUpdate(m => new { m.FKAlbumId, m.MetaName }, new MetadataDto
            //	{
            //		FKAlbumId = rootAlbum.AlbumId,
            //		MetaName = MetadataItemName.Title,
            //		Value = "All albums"
            //	});

            //// Add the caption
            //ctx.Metadatas.AddOrUpdate(m => new { m.FKAlbumId, m.MetaName }, new MetadataDto
            //	{
            //		FKAlbumId = rootAlbum.AlbumId,
            //		MetaName = MetadataItemName.Caption,
            //		Value = "Welcome to Gallery Server Pro!"
            //	});
        }
Пример #29
0
        /// <summary>
        /// Upgrades the 3.0.1 data to the 3.0.2 data. Applies to data such as app settings, gallery settings, templates, etc.
        /// Does not contain data structure changes such as new columns.
        /// </summary>
        /// <param name="ctx">Context to be used for updating data.</param>
        private static void UpgradeTo302(GalleryDb ctx)
        {
            // Bug 625: Search results do not allow downloading original file
            foreach (var uiTmpl in ctx.UiTemplates.Where(t => t.TemplateType == UiTemplateType.MediaObject))
            {
                const string srcText = "{{if Settings.AllowOriginalDownload}}";
                const string replText = "{{if Album.Permissions.ViewOriginalMediaObject}}";

                uiTmpl.HtmlTemplate = uiTmpl.HtmlTemplate.Replace(srcText, replText);
            }

            // Update data schema version to 3.0.2
            var asDataSchema = ctx.AppSettings.First(a => a.SettingName == "DataSchemaVersion");
            asDataSchema.SettingValue = "3.0.2";

            ctx.SaveChanges();
        }
Пример #30
0
        /// <summary>
        /// Upgrades the 3.0.0 data to the 3.0.1 data. Applies to data such as app settings, gallery settings, templates, etc.
        /// Does not contain data structure changes such as new columns.
        /// </summary>
        /// <param name="ctx">Context to be used for updating data.</param>
        private static void UpgradeTo301(GalleryDb ctx)
        {
            // Bug 547: Change jQuery 1.10.0 to 1.10.1 (the migration code for 2.6 => 3.0 mistakenly specified 1.10.0 instead of 1.10.1)
            var appSetting = ctx.AppSettings.FirstOrDefault(a => a.SettingName == "JQueryScriptPath");

            if (appSetting != null && appSetting.SettingValue == "//ajax.googleapis.com/ajax/libs/jquery/1.10.0/jquery.min.js")
            {
                appSetting.SettingValue = "//ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js";
            }

            // Bug 570: Change "DateAdded" to "Date Added"
            foreach (var metaDef in ctx.GallerySettings.Where(gs => gs.SettingName == "MetadataDisplaySettings"))
            {
                // Serialized values are separated by apostrophes when first inserted; they are replaced by quotes by the JSON serializer when subsequently
                // saved, so we check for both.
                metaDef.SettingValue = metaDef.SettingValue.Replace(@"""MetadataItem"":111,""Name"":""DateAdded"",""DisplayName"":""DateAdded""", @"""MetadataItem"":111,""Name"":""DateAdded"",""DisplayName"":""Date Added""");
                metaDef.SettingValue = metaDef.SettingValue.Replace(@"'MetadataItem':111,'Name':'DateAdded','DisplayName':'DateAdded'", @"'MetadataItem':111,'Name':'DateAdded','DisplayName':'Date Added'");
            }

            // Bug 578: Change MP4 encoder setting
            foreach (var metaDef in ctx.GallerySettings.Where(gs => gs.SettingName == "MediaEncoderSettings"))
            {
                metaDef.SettingValue = metaDef.SettingValue.Replace(@"-s {Width}x{Height} -b:v 384k", @"-vf ""scale=min(iw*min(640/iw\,480/ih)\,iw):min(ih*min(640/iw\,480/ih)\,ih)"" -b:v 384k");
            }

            // Bug 554: (a) Fix M4V templates
            var mimeType = ctx.MimeTypes.FirstOrDefault(mt => mt.FileExtension == ".m4v" && mt.MimeTypeValue == "video/x-m4v");

            if (mimeType != null)
            {
                mimeType.MimeTypeValue = "video/m4v";
            }

            // Bug 554: (b) Delete x-m4v / safari template
            var mediaTmpl = ctx.MediaTemplates.FirstOrDefault(mt => mt.MimeType == "video/x-m4v" && mt.BrowserId == "safari");

            if (mediaTmpl != null)
            {
                ctx.MediaTemplates.Remove(mediaTmpl);
            }

            // Bug 554: (c) Delete existing m4v templates
            foreach (var tmpl in ctx.MediaTemplates.Where(mt => mt.MimeType == "video/m4v"))
            {
                ctx.MediaTemplates.Remove(tmpl);
            }

            // Bug 554: (d) Add m4v templates based on the mp4 ones
            foreach (var tmpl in ctx.MediaTemplates.Where(mt => mt.MimeType == "video/mp4"))
            {
                ctx.MediaTemplates.Add(new MediaTemplateDto()
                {
                    MimeType       = "video/m4v",
                    BrowserId      = tmpl.BrowserId,
                    HtmlTemplate   = tmpl.HtmlTemplate,
                    ScriptTemplate = tmpl.ScriptTemplate
                });
            }

            // Bug 555: (a) Add MP3 template for IE1TO8 (copy it from Firefox, which uses Silverlight)
            var mp3MediaTmpl = ctx.MediaTemplates.FirstOrDefault(mt => mt.MimeType == "audio/x-mp3" && mt.BrowserId == "firefox");

            if (mp3MediaTmpl != null && (!ctx.MediaTemplates.Any(mt => mt.MimeType == mp3MediaTmpl.MimeType && mt.BrowserId == "ie1to8")))
            {
                ctx.MediaTemplates.Add(new MediaTemplateDto()
                {
                    MimeType       = mp3MediaTmpl.MimeType,
                    BrowserId      = "ie1to8",
                    HtmlTemplate   = mp3MediaTmpl.HtmlTemplate,
                    ScriptTemplate = mp3MediaTmpl.ScriptTemplate
                });
            }

            // Bug 555: (b) Delete MP3 template for Safari
            mp3MediaTmpl = ctx.MediaTemplates.FirstOrDefault(mt => mt.MimeType == "audio/x-mp3" && mt.BrowserId == "safari");
            if (mp3MediaTmpl != null)
            {
                ctx.MediaTemplates.Remove(mp3MediaTmpl);
            }

            // Bug 564: (a) Change MIME type of .qt and .moov files from video/quicktime to video/mp4
            foreach (var qtMimeType in ctx.MimeTypes.Where(mt => new[] { ".qt", ".moov" }.Contains(mt.FileExtension) && mt.MimeTypeValue == "video/quicktime"))
            {
                qtMimeType.MimeTypeValue = "video/mp4";
            }

            // Bug 564: (b) Delete video/quicktime safari template
            foreach (var qtMediaTmpl in ctx.MediaTemplates.Where(mt => mt.MimeType == "video/quicktime" && mt.BrowserId == "safari"))
            {
                ctx.MediaTemplates.Remove(qtMediaTmpl);
            }

            // Bug 562: Add PDF template for Safari. It looks mostly like the IE one except we have to clear the iframe src before we can hide it.

            const string pdfScriptTmplSafari = @"// IE and Safari render Adobe Reader iframes on top of jQuery UI dialogs, so add event handler to hide frame while dialog is visible
// Safari requires that we clear the iframe src before we can hide it
$('.gsp_mo_share_dlg').on('dialogopen', function() {
 $('#{UniqueId}_frame').attr('src', '').css('visibility', 'hidden');
}).on('dialogclose', function() {
$('#{UniqueId}_frame').attr('src', '{MediaObjectUrl}').css('visibility', 'visible');
});";

            if (!ctx.MediaTemplates.Any(mt => mt.MimeType == "application/pdf" && mt.BrowserId == "safari"))
            {
                ctx.MediaTemplates.Add(new MediaTemplateDto()
                {
                    MimeType       = "application/pdf",
                    BrowserId      = "safari",
                    HtmlTemplate   = "<p><a href='{MediaObjectUrl}'>Enlarge PDF to fit browser window</a></p><iframe id='{UniqueId}_frame' src='{MediaObjectUrl}' frameborder='0' style='width:680px;height:600px;border:1px solid #000;'></iframe>",
                    ScriptTemplate = pdfScriptTmplSafari
                });
            }

            // Bug 580: Need to use AddMediaObject permission instead of EditAlbum permission when deciding whether to render the Add link in an empty album.
            // Task 579: Change lock icon tooltip when anonymous access is disabled
            // Task 575: Update signature of jsRender helper functions getAlbumUrl, getGalleryItemUrl, getDownloadUrl, currentUrl
            foreach (var uiTmpl in ctx.UiTemplates.Where(t => t.TemplateType == UiTemplateType.Album))
            {
                const string srcText580  = "{{if Album.Permissions.EditAlbum}}<a href='{{: ~getAddUrl(#data) }}'>{{:Resource.AbmAddObj}}</a>{{/if}}";
                const string replText580 = "{{if Album.Permissions.AddMediaObject}}<a href='{{: ~getAddUrl(#data) }}'>{{:Resource.AbmAddObj}}</a>{{/if}}";

                const string srcText579  = "<img src='{{:App.SkinPath}}/images/lock-{{if Album.IsPrivate}}active-{{/if}}s.png' title='{{if Album.IsPrivate}}{{:Resource.AbmIsPvtTt}}{{else}}{{:Resource.AbmNotPvtTt}}{{/if}}' alt=''>";
                const string replText579 = "<img src='{{:App.SkinPath}}/images/lock-{{if Album.IsPrivate || !Settings.AllowAnonBrowsing}}active-{{/if}}s.png' title='{{if !Settings.AllowAnonBrowsing}}{{:Resource.AbmAnonDisabledTt}}{{else}}{{if Album.IsPrivate}}{{:Resource.AbmIsPvtTt}}{{else}}{{:Resource.AbmNotPvtTt}}{{/if}}{{/if}}' alt=''>";

                const string srcText575a  = "~getAlbumUrl(#data)";
                const string replText575a = "~getAlbumUrl(Album.Id, true)";

                const string srcText575b  = "~getGalleryItemUrl(#data)";
                const string replText575b = "~getGalleryItemUrl(#data, !IsAlbum)";

                const string srcText575c  = "~getDownloadUrl(#data)";
                const string replText575c = "~getDownloadUrl(Album.Id)";

                uiTmpl.HtmlTemplate = uiTmpl.HtmlTemplate.Replace(srcText580, replText580);
                uiTmpl.HtmlTemplate = uiTmpl.HtmlTemplate.Replace(srcText579, replText579);
                uiTmpl.HtmlTemplate = uiTmpl.HtmlTemplate.Replace(srcText575a, replText575a);
                uiTmpl.HtmlTemplate = uiTmpl.HtmlTemplate.Replace(srcText575b, replText575b);
                uiTmpl.HtmlTemplate = uiTmpl.HtmlTemplate.Replace(srcText575c, replText575c);
            }

            // Task 575: Update signature of jsRender helper function getDownloadUrl
            foreach (var uiTmpl in ctx.UiTemplates.Where(t => t.TemplateType == UiTemplateType.MediaObject))
            {
                const string srcText575c  = "~getDownloadUrl()";
                const string replText575c = "~getDownloadUrl(Album.Id)";

                const string srcText575d  = "~currentUrl()";
                const string replText575d = "~getMediaUrl(MediaItem.Id, true)";

                uiTmpl.HtmlTemplate = uiTmpl.HtmlTemplate.Replace(srcText575c, replText575c);
                uiTmpl.HtmlTemplate = uiTmpl.HtmlTemplate.Replace(srcText575d, replText575d);
            }

            // Update data schema version to 3.0.1
            var asDataSchema = ctx.AppSettings.First(a => a.SettingName == "DataSchemaVersion");

            asDataSchema.SettingValue = "3.0.1";

            ctx.SaveChanges();
        }
Пример #31
0
        private static void InsertAppSettings(GalleryDb ctx)
        {
            var appSettings = new[]
                                                    {
                                                        new AppSettingDto {SettingName = "Skin", SettingValue = "dark"},
                                                        new AppSettingDto {SettingName = "MediaObjectDownloadBufferSize", SettingValue = "32768"},
                                                        new AppSettingDto {SettingName = "EncryptMediaObjectUrlOnClient", SettingValue = "False"},
                                                        new AppSettingDto {SettingName = "EncryptionKey", SettingValue = "mNU-h7:5f_)3=c%@^}#U9Tn*"},
                                                        new AppSettingDto {SettingName = "JQueryScriptPath", SettingValue = "//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"},
                                                        new AppSettingDto {SettingName = "JQueryMigrateScriptPath", SettingValue = "//code.jquery.com/jquery-migrate-1.2.1.js"},
                                                        new AppSettingDto {SettingName = "JQueryUiScriptPath", SettingValue = "//ajax.googleapis.com/ajax/libs/jqueryui/1.10.4/jquery-ui.min.js"},
                                                        new AppSettingDto {SettingName = "MembershipProviderName", SettingValue = ""},
                                                        new AppSettingDto {SettingName = "RoleProviderName", SettingValue = ""},
                                                        new AppSettingDto {SettingName = "ProductKey", SettingValue = ""},
                                                        new AppSettingDto {SettingName = "EnableCache", SettingValue = "True"},
                                                        new AppSettingDto {SettingName = "AllowGalleryAdminToManageUsersAndRoles", SettingValue = "True"},
                                                        new AppSettingDto {SettingName = "AllowGalleryAdminToViewAllUsersAndRoles", SettingValue = "True"},
                                                        new AppSettingDto {SettingName = "MaxNumberErrorItems", SettingValue = "200"},
                                                        new AppSettingDto {SettingName = "EmailFromName", SettingValue = "Gallery Server Pro"},
                                                        new AppSettingDto {SettingName = "EmailFromAddress", SettingValue = "*****@*****.**"},
                                                        new AppSettingDto {SettingName = "SmtpServer", SettingValue = ""},
                                                        new AppSettingDto {SettingName = "SmtpServerPort", SettingValue = ""},
                                                        new AppSettingDto {SettingName = "SendEmailUsingSsl", SettingValue = "False"},
                                                        new AppSettingDto {SettingName = "DataSchemaVersion", SettingValue = GalleryDataSchemaVersionEnumHelper.ConvertGalleryDataSchemaVersionToString(GalleryDb.DataSchemaVersion)}
                                                    };

            ctx.AppSettings.AddOrUpdate(a => a.SettingName, appSettings);

            SaveChanges(ctx);
        }