mirror of
https://github.com/OrchardCMS/Orchard.git
synced 2025-10-15 03:25:23 +08:00
Merge
--HG-- branch : dev
This commit is contained in:
@@ -788,6 +788,11 @@ msgstr "Nom"
|
|||||||
msgid "Title"
|
msgid "Title"
|
||||||
msgstr "Titre"
|
msgstr "Titre"
|
||||||
|
|
||||||
|
#: ~/Core/Reports/Views/Admin/Index.aspx
|
||||||
|
#| msgid "Date"
|
||||||
|
msgid "Date"
|
||||||
|
msgstr "Date"
|
||||||
|
|
||||||
#: ~/Core/Routable/Drivers/RoutePartDriver.cs
|
#: ~/Core/Routable/Drivers/RoutePartDriver.cs
|
||||||
#| msgid "Please do not use any of the following characters in your slugs: \"/\", \":\", \"?\", \"#\", \"[\", \"]\", \"@\", \"!\", \"$\", \"&\", \"'\", \"(\", \")\", \"*\", \"+\", \",\", \";\", \"=\". No spaces are allowed (please use dashes or underscores instead)."
|
#| msgid "Please do not use any of the following characters in your slugs: \"/\", \":\", \"?\", \"#\", \"[\", \"]\", \"@\", \"!\", \"$\", \"&\", \"'\", \"(\", \")\", \"*\", \"+\", \",\", \";\", \"=\". No spaces are allowed (please use dashes or underscores instead)."
|
||||||
msgid "Please do not use any of the following characters in your slugs: \"/\", \":\", \"?\", \"#\", \"[\", \"]\", \"@\", \"!\", \"$\", \"&\", \"'\", \"(\", \")\", \"*\", \"+\", \",\", \";\", \"=\". No spaces are allowed (please use dashes or underscores instead)."
|
msgid "Please do not use any of the following characters in your slugs: \"/\", \":\", \"?\", \"#\", \"[\", \"]\", \"@\", \"!\", \"$\", \"&\", \"'\", \"(\", \")\", \"*\", \"+\", \",\", \";\", \"=\". No spaces are allowed (please use dashes or underscores instead)."
|
||||||
@@ -2028,6 +2033,26 @@ msgstr "Permettre les nouveaux commentaires"
|
|||||||
msgid "Enable to show the comment form. Disabling still allows the existing comments to be shown but does not allow the conversation to continue."
|
msgid "Enable to show the comment form. Disabling still allows the existing comments to be shown but does not allow the conversation to continue."
|
||||||
msgstr "Permettre l'affichage du formulaire de commentaire. Désactiver ceci permet aux commentaires existants d'être affichés mais ne permet pas à la conversation de se prolonger."
|
msgstr "Permettre l'affichage du formulaire de commentaire. Désactiver ceci permet aux commentaires existants d'être affichés mais ne permet pas à la conversation de se prolonger."
|
||||||
|
|
||||||
|
#: ~/Modules/Orchard.Comments/Views/EditorTemplates/Parts/Comments.Comments.ascx
|
||||||
|
#| msgid "Comments"
|
||||||
|
msgid "Comments"
|
||||||
|
msgstr "Commentaires"
|
||||||
|
|
||||||
|
#: ~/Modules/Orchard.Comments/Views/EditorTemplates/Parts/Comments.Comments.ascx
|
||||||
|
#| msgid "Comments are shown. Existing comments are displayed."
|
||||||
|
msgid "Comments are shown. Existing comments are displayed."
|
||||||
|
msgstr "Les commentaires existants sont affichés."
|
||||||
|
|
||||||
|
#: ~/Modules/Orchard.Comments/Views/EditorTemplates/Parts/Comments.Comments.ascx
|
||||||
|
#| msgid "Allow new comments"
|
||||||
|
msgid "Allow new comments"
|
||||||
|
msgstr "Autoriser les nouveaux commentaires"
|
||||||
|
|
||||||
|
#: ~/Modules/Orchard.Comments/Views/EditorTemplates/Parts/Comments.Comments.ascx
|
||||||
|
#| msgid "Enable to show the comment form. Disabling still allows the existing comments to be shown but does not allow the conversation to continue."
|
||||||
|
msgid "Enable to show the comment form. Disabling still allows the existing comments to be shown but does not allow the conversation to continue."
|
||||||
|
msgstr "Afficher le formulaire d'entrée des commentaires. Désactiver ne supprime pas l'affichage des commentaires existants mais empêche la poursuite de la conversation."
|
||||||
|
|
||||||
#: ~/Modules/Orchard.Comments/Views/EditorTemplates/Parts/Comments.SiteSettings.ascx
|
#: ~/Modules/Orchard.Comments/Views/EditorTemplates/Parts/Comments.SiteSettings.ascx
|
||||||
#| msgid "Comments"
|
#| msgid "Comments"
|
||||||
msgid "Comments"
|
msgid "Comments"
|
||||||
@@ -2048,6 +2073,11 @@ msgstr "Activer la protection contre le Spam"
|
|||||||
msgid "Akismet key"
|
msgid "Akismet key"
|
||||||
msgstr "Clé Akismet"
|
msgstr "Clé Akismet"
|
||||||
|
|
||||||
|
#: ~/Modules/Orchard.Comments/Views/EditorTemplates/Parts/Comments.SiteSettings.ascx
|
||||||
|
#| msgid "Akismet endpoint URL"
|
||||||
|
msgid "Akismet endpoint URL"
|
||||||
|
msgstr "URL du service Akismet"
|
||||||
|
|
||||||
#: ~/Modules/Orchard.Comments/Views/EditorTemplates/Parts/Comments.SiteSettings.ascx
|
#: ~/Modules/Orchard.Comments/Views/EditorTemplates/Parts/Comments.SiteSettings.ascx
|
||||||
#| msgid "Blog URL"
|
#| msgid "Blog URL"
|
||||||
msgid "Blog URL"
|
msgid "Blog URL"
|
||||||
@@ -2129,8 +2159,8 @@ msgid "The \"{0}\" field has been removed."
|
|||||||
msgstr "Le champ \"{0}\" a été enlevé."
|
msgstr "Le champ \"{0}\" a été enlevé."
|
||||||
|
|
||||||
#: ~/Modules/Orchard.ContentTypes/Views/Admin/AddFieldTo.ascx
|
#: ~/Modules/Orchard.ContentTypes/Views/Admin/AddFieldTo.ascx
|
||||||
#| msgid "Add a new field to \"{0}\""
|
#| msgid "Add New Field To \"{0}\""
|
||||||
msgid "Add a new field to \"{0}\""
|
msgid "Add New Field To \"{0}\""
|
||||||
msgstr "Ajouter un nouveau champ à '{0}'"
|
msgstr "Ajouter un nouveau champ à '{0}'"
|
||||||
|
|
||||||
#: ~/Modules/Orchard.ContentTypes/Views/Admin/AddFieldTo.ascx
|
#: ~/Modules/Orchard.ContentTypes/Views/Admin/AddFieldTo.ascx
|
||||||
@@ -4114,9 +4144,9 @@ msgid "Permissions"
|
|||||||
msgstr "Permissions"
|
msgstr "Permissions"
|
||||||
|
|
||||||
#: ~/Modules/Orchard.Roles/Views/Admin/Edit.aspx
|
#: ~/Modules/Orchard.Roles/Views/Admin/Edit.aspx
|
||||||
#| msgid "{0} Module"
|
#| msgid "{0} Feature"
|
||||||
msgid "{0} Module"
|
msgid "{0} Feature"
|
||||||
msgstr "Module {0}"
|
msgstr "Fonctionnalité {0}"
|
||||||
|
|
||||||
#: ~/Modules/Orchard.Roles/Views/Admin/Edit.aspx
|
#: ~/Modules/Orchard.Roles/Views/Admin/Edit.aspx
|
||||||
#| msgid "Permission"
|
#| msgid "Permission"
|
||||||
@@ -4398,6 +4428,11 @@ msgstr "L'étiquette n'a pas pu être effacée."
|
|||||||
msgid "Editing tags failed: "
|
msgid "Editing tags failed: "
|
||||||
msgstr "La modification des étiquettes a échoué: "
|
msgstr "La modification des étiquettes a échoué: "
|
||||||
|
|
||||||
|
#: ~/Modules/Orchard.Tags/Controllers/AdminController.cs
|
||||||
|
#| msgid "Couldn't create tag"
|
||||||
|
msgid "Couldn't create tag"
|
||||||
|
msgstr "L'étiquette n'a pas pu être créée."
|
||||||
|
|
||||||
#: ~/Modules/Orchard.Tags/Controllers/AdminController.cs
|
#: ~/Modules/Orchard.Tags/Controllers/AdminController.cs
|
||||||
#| msgid "The tag {0} already exists"
|
#| msgid "The tag {0} already exists"
|
||||||
msgid "The tag {0} already exists"
|
msgid "The tag {0} already exists"
|
||||||
@@ -5053,7 +5088,7 @@ msgstr "Modifier"
|
|||||||
msgid "Posted by {0} {1}"
|
msgid "Posted by {0} {1}"
|
||||||
msgstr "Posté par {0} {1}"
|
msgstr "Posté par {0} {1}"
|
||||||
|
|
||||||
#: ~/Themes/Classic/Views/DisplayTemplates/Parts/Pages.Page.Metadata.ascx
|
#: ~/Themes/Classic/Views/DisplayTemplates/Parts/Common.Metadata.ascx
|
||||||
#| msgid "nobody(?)"
|
#| msgid "nobody(?)"
|
||||||
msgid "nobody(?)"
|
msgid "nobody(?)"
|
||||||
msgstr "personne(?)"
|
msgstr "personne(?)"
|
||||||
@@ -5073,7 +5108,7 @@ msgstr "Modifier"
|
|||||||
msgid "Posted by {0} {1}"
|
msgid "Posted by {0} {1}"
|
||||||
msgstr "Posté par {0} {1}"
|
msgstr "Posté par {0} {1}"
|
||||||
|
|
||||||
#: ~/Themes/ClassicDark/Views/DisplayTemplates/Parts/Pages.Page.Metadata.ascx
|
#: ~/Themes/ClassicDark/Views/DisplayTemplates/Parts/Common.Metadata.ascx
|
||||||
#| msgid "nobody(?)"
|
#| msgid "nobody(?)"
|
||||||
msgid "nobody(?)"
|
msgid "nobody(?)"
|
||||||
msgstr "personne(?)"
|
msgstr "personne(?)"
|
||||||
@@ -5129,8 +5164,8 @@ msgid "Log Off"
|
|||||||
msgstr "Déconnexion"
|
msgstr "Déconnexion"
|
||||||
|
|
||||||
#: ~/Themes/Contoso/Views/User.ascx
|
#: ~/Themes/Contoso/Views/User.ascx
|
||||||
#| msgid "Login"
|
#| msgid "Log on"
|
||||||
msgid "Login"
|
msgid "Log on"
|
||||||
msgstr "Connexion"
|
msgstr "Connexion"
|
||||||
|
|
||||||
#: ~/Themes/Contoso/Views/DisplayTemplates/Items/Blogs.BlogPost.ListByArchive.ascx
|
#: ~/Themes/Contoso/Views/DisplayTemplates/Items/Blogs.BlogPost.ListByArchive.ascx
|
||||||
@@ -5183,6 +5218,11 @@ msgstr "Bonjour {0}!"
|
|||||||
msgid "Comment"
|
msgid "Comment"
|
||||||
msgstr "Commentaire"
|
msgstr "Commentaire"
|
||||||
|
|
||||||
|
#: ~/Themes/Contoso/Views/DisplayTemplates/Parts/Comments.Comments.ascx
|
||||||
|
#| msgid "<span class='CommentUserName'>Leave a comment {0}!</span>"
|
||||||
|
msgid "<span class='CommentUserName'>Leave a comment {0}!</span>"
|
||||||
|
msgstr "<span class='CommentUserName'>Laissez-nous un commentaire, {0}!</span>"
|
||||||
|
|
||||||
#: ~/Themes/Contoso/Views/DisplayTemplates/Parts/Comments.Comments.ascx
|
#: ~/Themes/Contoso/Views/DisplayTemplates/Parts/Comments.Comments.ascx
|
||||||
#| msgid "Submit Comment"
|
#| msgid "Submit Comment"
|
||||||
msgid "Submit Comment"
|
msgid "Submit Comment"
|
||||||
@@ -5308,6 +5348,11 @@ msgstr "Commentaire"
|
|||||||
msgid "Submit Comment"
|
msgid "Submit Comment"
|
||||||
msgstr "Envoyer le commentaire"
|
msgstr "Envoyer le commentaire"
|
||||||
|
|
||||||
|
#: ~/Themes/Corporate/Views/DisplayTemplates/Parts/Common.Metadata.ascx
|
||||||
|
#| msgid "nobody(?)"
|
||||||
|
msgid "nobody(?)"
|
||||||
|
msgstr "personne(?)"
|
||||||
|
|
||||||
#: ~/Themes/Green/Views/DisplayTemplates/Parts/Common.Metadata.ascx
|
#: ~/Themes/Green/Views/DisplayTemplates/Parts/Common.Metadata.ascx
|
||||||
#| msgid "nobody(?)"
|
#| msgid "nobody(?)"
|
||||||
msgid "nobody(?)"
|
msgid "nobody(?)"
|
||||||
|
@@ -12,6 +12,7 @@
|
|||||||
.content-localization .content-localizations li,
|
.content-localization .content-localizations li,
|
||||||
.content-localization .add-localization {
|
.content-localization .add-localization {
|
||||||
font-size:1.2em;
|
font-size:1.2em;
|
||||||
|
float:left;
|
||||||
}
|
}
|
||||||
.content-localization .content-localizations>* {
|
.content-localization .content-localizations>* {
|
||||||
display:inline-block;
|
display:inline-block;
|
||||||
|
@@ -7,7 +7,7 @@ html.dyn input.hinted {
|
|||||||
font-style:italic;
|
font-style:italic;
|
||||||
}
|
}
|
||||||
input#PublishLater_ScheduledPublishUtcDate {
|
input#PublishLater_ScheduledPublishUtcDate {
|
||||||
width:56%;
|
width:50%;
|
||||||
}
|
}
|
||||||
input#PublishLater_ScheduledPublishUtcTime {
|
input#PublishLater_ScheduledPublishUtcTime {
|
||||||
width:36%;
|
width:36%;
|
||||||
|
@@ -125,7 +125,7 @@ namespace Lucene.Services {
|
|||||||
.Delete(true);
|
.Delete(true);
|
||||||
|
|
||||||
var settingsFileName = GetSettingsFileName(indexName);
|
var settingsFileName = GetSettingsFileName(indexName);
|
||||||
if(File.Exists(settingsFileName)) {
|
if (File.Exists(settingsFileName)) {
|
||||||
File.Delete(settingsFileName);
|
File.Delete(settingsFileName);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -139,7 +139,7 @@ namespace Lucene.Services {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void Store(string indexName, IEnumerable<LuceneDocumentIndex> indexDocuments) {
|
public void Store(string indexName, IEnumerable<LuceneDocumentIndex> indexDocuments) {
|
||||||
if(indexDocuments.AsQueryable().Count() == 0) {
|
if (indexDocuments.AsQueryable().Count() == 0) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -151,7 +151,7 @@ namespace Lucene.Services {
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
|
|
||||||
foreach ( var indexDocument in indexDocuments ) {
|
foreach (var indexDocument in indexDocuments) {
|
||||||
current = indexDocument;
|
current = indexDocument;
|
||||||
var doc = CreateDocument(indexDocument);
|
var doc = CreateDocument(indexDocument);
|
||||||
|
|
||||||
@@ -159,7 +159,7 @@ namespace Lucene.Services {
|
|||||||
Logger.Debug("Document [{0}] indexed", indexDocument.ContentItemId);
|
Logger.Debug("Document [{0}] indexed", indexDocument.ContentItemId);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch ( Exception ex ) {
|
catch (Exception ex) {
|
||||||
Logger.Error(ex, "An unexpected error occured while add the document [{0}] from the index [{1}].", current.ContentItemId, indexName);
|
Logger.Error(ex, "An unexpected error occured while add the document [{0}] from the index [{1}].", current.ContentItemId, indexName);
|
||||||
}
|
}
|
||||||
finally {
|
finally {
|
||||||
|
@@ -47,6 +47,7 @@ namespace Lucene.Services {
|
|||||||
|
|
||||||
InitPendingClause();
|
InitPendingClause();
|
||||||
}
|
}
|
||||||
|
|
||||||
public ISearchBuilder Parse(string defaultField, string query) {
|
public ISearchBuilder Parse(string defaultField, string query) {
|
||||||
return Parse(new string[] {defaultField}, query);
|
return Parse(new string[] {defaultField}, query);
|
||||||
}
|
}
|
||||||
|
@@ -1,4 +1,5 @@
|
|||||||
using Orchard.ContentManagement.Handlers;
|
using Orchard.ContentManagement.FieldStorage.InfosetStorage;
|
||||||
|
using Orchard.ContentManagement.Handlers;
|
||||||
using Orchard.ContentManagement;
|
using Orchard.ContentManagement;
|
||||||
using Orchard.Core.Common.Models;
|
using Orchard.Core.Common.Models;
|
||||||
using Orchard.Tasks.Indexing;
|
using Orchard.Tasks.Indexing;
|
||||||
@@ -21,16 +22,18 @@ namespace Orchard.Indexing.Handlers {
|
|||||||
_indexingTaskManager = indexingTaskManager;
|
_indexingTaskManager = indexingTaskManager;
|
||||||
_indexNotifierHandlers = indexNotifierHandlers;
|
_indexNotifierHandlers = indexNotifierHandlers;
|
||||||
|
|
||||||
OnPublishing<ContentPart<CommonPartRecord>>(CreateIndexingTask);
|
OnPublishing<ContentPart>(CreateIndexingTask);
|
||||||
OnRemoved<ContentPart<CommonPartRecord>>(RemoveIndexingTask);
|
OnRemoved<ContentPart>(RemoveIndexingTask);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CreateIndexingTask(PublishContentContext context, ContentPart<CommonPartRecord> part) {
|
void CreateIndexingTask(PublishContentContext context, ContentPart part) {
|
||||||
_indexingTaskManager.CreateUpdateIndexTask(context.ContentItem);
|
_indexingTaskManager.CreateUpdateIndexTask(context.ContentItem);
|
||||||
|
// UpdateIndex();
|
||||||
}
|
}
|
||||||
|
|
||||||
void RemoveIndexingTask(RemoveContentContext context, ContentPart<CommonPartRecord> part) {
|
void RemoveIndexingTask(RemoveContentContext context, ContentPart part) {
|
||||||
_indexingTaskManager.CreateDeleteIndexTask(context.ContentItem);
|
_indexingTaskManager.CreateDeleteIndexTask(context.ContentItem);
|
||||||
|
// UpdateIndex();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void UpdateIndex() {
|
private void UpdateIndex() {
|
||||||
|
@@ -13,15 +13,20 @@ namespace Orchard.Indexing.Handlers {
|
|||||||
OnIndexing<InfosetPart>(
|
OnIndexing<InfosetPart>(
|
||||||
(context, cp) => {
|
(context, cp) => {
|
||||||
var infosetPart = context.ContentItem.As<InfosetPart>();
|
var infosetPart = context.ContentItem.As<InfosetPart>();
|
||||||
if ( infosetPart != null ) {
|
if (infosetPart == null) {
|
||||||
foreach ( var part in infosetPart.ContentItem.Parts ) {
|
return;
|
||||||
foreach ( var field in part.PartDefinition.Fields ) {
|
}
|
||||||
if ( field.Settings.GetModel<FieldIndexing>().Included ) {
|
|
||||||
var fieldName = field.Name;
|
// part fields
|
||||||
var value = part.Fields.Where(f => f.Name == fieldName).First().Storage.Get<string>(null);
|
foreach ( var part in infosetPart.ContentItem.Parts ) {
|
||||||
context.DocumentIndex.Add(String.Format("{0}-{1}", infosetPart.TypeDefinition.Name, fieldName.ToLower()), value).RemoveTags().Analyze();
|
foreach ( var field in part.PartDefinition.Fields ) {
|
||||||
}
|
if (!field.Settings.GetModel<FieldIndexing>().Included) {
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var fieldName = field.Name;
|
||||||
|
var value = part.Fields.Where(f => f.Name == fieldName).First().Storage.Get<string>(null);
|
||||||
|
context.DocumentIndex.Add(String.Format("{0}-{1}", infosetPart.TypeDefinition.Name.ToLower(), fieldName.ToLower()), value).RemoveTags().Analyze();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@@ -103,8 +103,10 @@ namespace Orchard.Indexing.Services {
|
|||||||
|
|
||||||
|
|
||||||
// nothing to do ?
|
// nothing to do ?
|
||||||
if (taskRecords.Length + updateIndexDocuments.Count == 0)
|
if (taskRecords.Length + updateIndexDocuments.Count == 0) {
|
||||||
|
Logger.Information("Index update requested, nothing to do");
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
Logger.Information("Processing {0} indexing tasks", taskRecords.Length);
|
Logger.Information("Processing {0} indexing tasks", taskRecords.Length);
|
||||||
|
|
||||||
|
@@ -2,20 +2,25 @@
|
|||||||
using Orchard.Environment;
|
using Orchard.Environment;
|
||||||
using Orchard.Environment.Extensions;
|
using Orchard.Environment.Extensions;
|
||||||
using Orchard.Environment.Extensions.Models;
|
using Orchard.Environment.Extensions.Models;
|
||||||
|
using Orchard.Localization;
|
||||||
using Orchard.Packaging.Services;
|
using Orchard.Packaging.Services;
|
||||||
|
using Orchard.UI.Notify;
|
||||||
|
|
||||||
namespace Orchard.Packaging {
|
namespace Orchard.Packaging {
|
||||||
[OrchardFeature("Gallery")]
|
[OrchardFeature("Gallery")]
|
||||||
public class DefaultPackagingUpdater : IFeatureEventHandler {
|
public class DefaultPackagingUpdater : IFeatureEventHandler {
|
||||||
private readonly IPackagingSourceManager _packagingSourceManager;
|
private readonly IPackagingSourceManager _packagingSourceManager;
|
||||||
|
private readonly INotifier _notifier;
|
||||||
|
|
||||||
public DefaultPackagingUpdater(IPackagingSourceManager packagingSourceManager) {
|
public DefaultPackagingUpdater(IPackagingSourceManager packagingSourceManager, INotifier notifier) {
|
||||||
_packagingSourceManager = packagingSourceManager;
|
_packagingSourceManager = packagingSourceManager;
|
||||||
|
_notifier = notifier;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Localizer T { get; set; }
|
||||||
|
|
||||||
public void Install(Feature feature) {
|
public void Install(Feature feature) {
|
||||||
// add http://orchardproject.net/feeds/modules as the default Modules Feed
|
_packagingSourceManager.AddSource(new PackagingSource { Id = Guid.NewGuid(), FeedTitle = "Orchard Module Gallery", FeedUrl = "http://orchardproject.net/gallery/feed" });
|
||||||
_packagingSourceManager.AddSource(new PackagingSource { Id = Guid.NewGuid(), FeedTitle = "Orchard Module Gallery", FeedUrl = "http://orchardproject.net/feeds/modules" });
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Enable(Feature feature) {
|
public void Enable(Feature feature) {
|
||||||
|
@@ -8,32 +8,38 @@ using System.Xml.Linq;
|
|||||||
using System.Xml.Serialization;
|
using System.Xml.Serialization;
|
||||||
using Orchard.Environment.Extensions;
|
using Orchard.Environment.Extensions;
|
||||||
using Orchard.FileSystems.AppData;
|
using Orchard.FileSystems.AppData;
|
||||||
|
using Orchard.Localization;
|
||||||
|
using Orchard.UI.Notify;
|
||||||
|
|
||||||
namespace Orchard.Packaging.Services {
|
namespace Orchard.Packaging.Services {
|
||||||
[OrchardFeature("PackagingServices")]
|
[OrchardFeature("PackagingServices")]
|
||||||
public class PackagingSourceManager : IPackagingSourceManager {
|
public class PackagingSourceManager : IPackagingSourceManager {
|
||||||
private static readonly XmlSerializer _sourceSerializer = new XmlSerializer(typeof (List<PackagingSource>), new XmlRootAttribute("Sources"));
|
private static readonly XmlSerializer _sourceSerializer = new XmlSerializer(typeof(List<PackagingSource>), new XmlRootAttribute("Sources"));
|
||||||
private readonly IAppDataFolder _appDataFolder;
|
private readonly IAppDataFolder _appDataFolder;
|
||||||
|
private readonly INotifier _notifier;
|
||||||
|
|
||||||
public PackagingSourceManager(IAppDataFolder appDataFolder) {
|
public PackagingSourceManager(IAppDataFolder appDataFolder, INotifier notifier) {
|
||||||
_appDataFolder = appDataFolder;
|
_appDataFolder = appDataFolder;
|
||||||
|
_notifier = notifier;
|
||||||
|
T = NullLocalizer.Instance;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Localizer T { get; set; }
|
||||||
|
|
||||||
#region IPackagingSourceManager Members
|
#region IPackagingSourceManager Members
|
||||||
|
|
||||||
public IEnumerable<PackagingSource> GetSources() {
|
public IEnumerable<PackagingSource> GetSources() {
|
||||||
string text = _appDataFolder.ReadFile(GetSourcesPath());
|
string text = _appDataFolder.ReadFile(GetSourcesPath());
|
||||||
if (string.IsNullOrEmpty(text)) {
|
if ( string.IsNullOrEmpty(text) ) {
|
||||||
return Enumerable.Empty<PackagingSource>();
|
return Enumerable.Empty<PackagingSource>();
|
||||||
}
|
}
|
||||||
|
|
||||||
var textReader = new StringReader(_appDataFolder.ReadFile(GetSourcesPath()));
|
var textReader = new StringReader(_appDataFolder.ReadFile(GetSourcesPath()));
|
||||||
return (IEnumerable<PackagingSource>) _sourceSerializer.Deserialize(textReader);
|
return (IEnumerable<PackagingSource>)_sourceSerializer.Deserialize(textReader);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void AddSource(PackagingSource source) {
|
public void AddSource(PackagingSource source) {
|
||||||
UpdateSource(source);
|
SaveSources(GetSources().Concat(new[] { source }).GroupBy(x => x.FeedUrl).Select(g => g.First()));
|
||||||
SaveSources(GetSources().Concat(new[] {source}));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void RemoveSource(Guid id) {
|
public void RemoveSource(Guid id) {
|
||||||
@@ -41,16 +47,16 @@ namespace Orchard.Packaging.Services {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void UpdateLists() {
|
public void UpdateLists() {
|
||||||
foreach (PackagingSource source in GetSources()) {
|
foreach ( PackagingSource source in GetSources() ) {
|
||||||
UpdateSource(source);
|
UpdateSource(source);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public IEnumerable<PackagingEntry> GetModuleList(PackagingSource packagingSource = null) {
|
public IEnumerable<PackagingEntry> GetModuleList(PackagingSource packagingSource = null) {
|
||||||
IEnumerable<PackagingEntry> packageInfos = ( packagingSource == null ? GetSources() : new [] { packagingSource })
|
IEnumerable<PackagingEntry> packageInfos = ( packagingSource == null ? GetSources() : new[] { packagingSource } )
|
||||||
.SelectMany(
|
.SelectMany(
|
||||||
source =>
|
source =>
|
||||||
Bind(ParseFeed(_appDataFolder.ReadFile(GetFeedCachePath(source))),
|
Bind(ParseFeed(GetModuleListForSource(source)),
|
||||||
feed =>
|
feed =>
|
||||||
feed.Items.SelectMany(
|
feed.Items.SelectMany(
|
||||||
item =>
|
item =>
|
||||||
@@ -65,6 +71,13 @@ namespace Orchard.Packaging.Services {
|
|||||||
return packageInfos.ToArray();
|
return packageInfos.ToArray();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private string GetModuleListForSource(PackagingSource source) {
|
||||||
|
if ( !_appDataFolder.FileExists(GetFeedCachePath(source)) ) {
|
||||||
|
UpdateSource(source);
|
||||||
|
}
|
||||||
|
return _appDataFolder.ReadFile(GetFeedCachePath(source));
|
||||||
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
private static string GetSourcesPath() {
|
private static string GetSourcesPath() {
|
||||||
@@ -83,8 +96,13 @@ namespace Orchard.Packaging.Services {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void UpdateSource(PackagingSource source) {
|
private void UpdateSource(PackagingSource source) {
|
||||||
XDocument feed = XDocument.Load(source.FeedUrl, LoadOptions.PreserveWhitespace);
|
try {
|
||||||
_appDataFolder.CreateFile(GetFeedCachePath(source), feed.ToString(SaveOptions.DisableFormatting));
|
XDocument feed = XDocument.Load(source.FeedUrl, LoadOptions.PreserveWhitespace);
|
||||||
|
_appDataFolder.CreateFile(GetFeedCachePath(source), feed.ToString(SaveOptions.DisableFormatting));
|
||||||
|
}
|
||||||
|
catch ( Exception e ) {
|
||||||
|
_notifier.Warning(T("Error loading content of feed '{0}': {1}", source.FeedUrl, e.Message));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -93,7 +111,7 @@ namespace Orchard.Packaging.Services {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private static IEnumerable<T> Unit<T>(T t) where T : class {
|
private static IEnumerable<T> Unit<T>(T t) where T : class {
|
||||||
return t != null ? new[] {t} : Enumerable.Empty<T>();
|
return t != null ? new[] { t } : Enumerable.Empty<T>();
|
||||||
}
|
}
|
||||||
|
|
||||||
private static IEnumerable<T2> Bind<T, T2>(T t, Func<T, IEnumerable<T2>> f) where T : class {
|
private static IEnumerable<T2> Bind<T, T2>(T t, Func<T, IEnumerable<T2>> f) where T : class {
|
||||||
@@ -101,6 +119,9 @@ namespace Orchard.Packaging.Services {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private SyndicationFeed ParseFeed(string content) {
|
private SyndicationFeed ParseFeed(string content) {
|
||||||
|
if ( string.IsNullOrEmpty(( content )) )
|
||||||
|
return new SyndicationFeed();
|
||||||
|
|
||||||
var formatter = new Atom10FeedFormatter<SyndicationFeed>();
|
var formatter = new Atom10FeedFormatter<SyndicationFeed>();
|
||||||
formatter.ReadFrom(XmlReader.Create(new StringReader(content)));
|
formatter.ReadFrom(XmlReader.Create(new StringReader(content)));
|
||||||
return formatter.Feed;
|
return formatter.Feed;
|
||||||
|
17
src/Orchard.Web/Modules/Orchard.Packaging/Styles/admin.css
Normal file
17
src/Orchard.Web/Modules/Orchard.Packaging/Styles/admin.css
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
.moduleName {
|
||||||
|
float:left;
|
||||||
|
}
|
||||||
|
|
||||||
|
.contentItems .related {
|
||||||
|
padding:1.2em 0.4em 0.5em
|
||||||
|
}
|
||||||
|
|
||||||
|
.contentItems .properties {
|
||||||
|
float:none;
|
||||||
|
clear:both;
|
||||||
|
}
|
||||||
|
|
||||||
|
.contentItems .pageStatus {
|
||||||
|
margin:.8em 0;
|
||||||
|
color:#666;
|
||||||
|
}
|
@@ -1,4 +1,6 @@
|
|||||||
<%@ Control Language="C#" Inherits="Orchard.Mvc.ViewUserControl<Orchard.Packaging.ViewModels.PackagingModulesViewModel>" %>
|
<%@ Control Language="C#" Inherits="Orchard.Mvc.ViewUserControl<Orchard.Packaging.ViewModels.PackagingModulesViewModel>" %>
|
||||||
|
<% Html.RegisterStyle("admin.css"); %>
|
||||||
|
|
||||||
<h1>
|
<h1>
|
||||||
<%: Html.TitleForPage(T("Browse Gallery").ToString())%></h1>
|
<%: Html.TitleForPage(T("Browse Gallery").ToString())%></h1>
|
||||||
|
|
||||||
@@ -25,21 +27,22 @@
|
|||||||
<ul class="contentItems">
|
<ul class="contentItems">
|
||||||
<%foreach (var item in Model.Modules) {%>
|
<%foreach (var item in Model.Modules) {%>
|
||||||
<li>
|
<li>
|
||||||
<ul class="summary">
|
<div class="moduleName">
|
||||||
<div class="properties">
|
|
||||||
<h2><%: (item.SyndicationItem.Title == null ? T("(No title)").Text : item.SyndicationItem.Title.Text)%><span> - <%: T("Version: {0}", "1.0")%></span></h2>
|
<h2><%: (item.SyndicationItem.Title == null ? T("(No title)").Text : item.SyndicationItem.Title.Text)%><span> - <%: T("Version: {0}", "1.0")%></span></h2>
|
||||||
<p><%: (item.SyndicationItem.Summary == null ? T("(No description").Text : item.SyndicationItem.Summary.Text) %></p>
|
|
||||||
<ul class="pageStatus" style="color:#666; margin:.6em 0 0 0;">
|
|
||||||
<li><%: T("Last Updated: {0}", item.SyndicationItem.LastUpdatedTime.ToLocalTime()) %></li>
|
|
||||||
<li> | <%: T("Author: {0}", item.SyndicationItem.Authors.Any() ? String.Join(", ", item.SyndicationItem.Authors.Select(a => a.Name)) : T("Unknown").Text)%></li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="related">
|
<div class="related">
|
||||||
<%:Html.ActionLink(T("Install").ToString(), "Install", new RouteValueDictionary {{"SyndicationId",item.SyndicationItem.Id}})%><%:T(" | ") %>
|
<%:Html.ActionLink(T("Install").ToString(), "Install", new RouteValueDictionary {{"SyndicationId",item.SyndicationItem.Id}})%><%:T(" | ") %>
|
||||||
<a href="<%:item.PackageStreamUri%>"><%: T("Download") %></a>
|
<a href="<%:item.PackageStreamUri%>"><%: T("Download") %></a>
|
||||||
|
</div>
|
||||||
|
|
||||||
</div>
|
<div class="properties">
|
||||||
</ul>
|
<p><%: (item.SyndicationItem.Summary == null ? T("(No description").Text : item.SyndicationItem.Summary.Text) %>The sandbox module is a testing ground for Orchard developers and should not be activated except for testing and development purposes.</p>
|
||||||
|
<ul class="pageStatus">
|
||||||
|
<li><%: T("Last Updated: {0}", item.SyndicationItem.LastUpdatedTime.ToLocalTime()) %></li>
|
||||||
|
<li> | <%: T("Author: {0}", item.SyndicationItem.Authors.Any() ? String.Join(", ", item.SyndicationItem.Authors.Select(a => a.Name)) : T("Unknown").Text)%></li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
</li><%
|
</li><%
|
||||||
}%>
|
}%>
|
||||||
</ul><%
|
</ul><%
|
||||||
|
@@ -379,6 +379,7 @@ span.message {
|
|||||||
}
|
}
|
||||||
.content-localization .content-localizations li:hover {
|
.content-localization .content-localizations li:hover {
|
||||||
background-color: #000;
|
background-color: #000;
|
||||||
|
border-color: #99ff66;
|
||||||
}
|
}
|
||||||
.content-localization .content-localizations li a {
|
.content-localization .content-localizations li a {
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
|
@@ -425,6 +425,7 @@ html, body {background-color: #FFFFFF; background-image: url(../Content/Images/b
|
|||||||
|
|
||||||
.content-localization .content-localizations ul {
|
.content-localization .content-localizations ul {
|
||||||
overflow: auto;
|
overflow: auto;
|
||||||
|
list-style-type:none;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@@ -1,3 +1,13 @@
|
|||||||
.contentItems {
|
.contentItems {
|
||||||
border:1px solid #D3D2D2;
|
border:1px solid #D3D2D2;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
button, .button, .button:link, .button:visited {
|
||||||
|
cursor:pointer;
|
||||||
|
padding:0.1em 0.8em 0.2em 0.8em;
|
||||||
|
text-align:center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.button {
|
||||||
|
line-height:inherit;
|
||||||
|
}
|
@@ -445,7 +445,7 @@ label input {
|
|||||||
}
|
}
|
||||||
/* todo: (heskew) try to get .text on stuff like .text-box */
|
/* todo: (heskew) try to get .text on stuff like .text-box */
|
||||||
select, textarea, input.text, input.textMedium, input.text-box {
|
select, textarea, input.text, input.textMedium, input.text-box {
|
||||||
padding:1px;
|
padding:3px;
|
||||||
border:1px solid #bdbcbc;
|
border:1px solid #bdbcbc;
|
||||||
}
|
}
|
||||||
input.text, input.textMedium, input.text-box {
|
input.text, input.textMedium, input.text-box {
|
||||||
@@ -454,6 +454,9 @@ input.text, input.textMedium, input.text-box {
|
|||||||
input.textMedium {
|
input.textMedium {
|
||||||
width:26em;
|
width:26em;
|
||||||
}
|
}
|
||||||
|
select {
|
||||||
|
padding:1px;
|
||||||
|
}
|
||||||
select:focus, textarea:focus, input.text:focus, input.text-box:focus {
|
select:focus, textarea:focus, input.text:focus, input.text-box:focus {
|
||||||
border-color:#666d51;
|
border-color:#666d51;
|
||||||
}
|
}
|
||||||
@@ -472,7 +475,6 @@ textarea {
|
|||||||
min-height:8em;
|
min-height:8em;
|
||||||
}
|
}
|
||||||
#main input.large.text, #main textarea {
|
#main input.large.text, #main textarea {
|
||||||
padding:4px;
|
|
||||||
width:99%;
|
width:99%;
|
||||||
}
|
}
|
||||||
#main .primary input.large.text, #main .primary textarea {
|
#main .primary input.large.text, #main .primary textarea {
|
||||||
@@ -635,6 +637,7 @@ button.ibutton {
|
|||||||
/* (Items) Tables
|
/* (Items) Tables
|
||||||
----------------------------------------------------------*/
|
----------------------------------------------------------*/
|
||||||
table.items {
|
table.items {
|
||||||
|
margin:0 0 1.4em 0;
|
||||||
background:#fff;
|
background:#fff;
|
||||||
border:1px solid #eaeaea;
|
border:1px solid #eaeaea;
|
||||||
border-bottom:none;
|
border-bottom:none;
|
||||||
|
@@ -105,6 +105,9 @@ namespace Orchard.Data {
|
|||||||
private Hash ComputeHash() {
|
private Hash ComputeHash() {
|
||||||
var hash = new Hash();
|
var hash = new Hash();
|
||||||
|
|
||||||
|
hash.AddString(_shellSettings.DataProvider);
|
||||||
|
hash.AddString(_shellSettings.DataTablePrefix);
|
||||||
|
hash.AddString(_shellSettings.DataConnectionString);
|
||||||
hash.AddString(_shellSettings.Name);
|
hash.AddString(_shellSettings.Name);
|
||||||
|
|
||||||
// We need to hash the assemnly names, record names and property names
|
// We need to hash the assemnly names, record names and property names
|
||||||
|
@@ -3,7 +3,7 @@ using System.Collections.Generic;
|
|||||||
using Orchard.ContentManagement;
|
using Orchard.ContentManagement;
|
||||||
|
|
||||||
namespace Orchard.Indexing {
|
namespace Orchard.Indexing {
|
||||||
public interface IIndexProvider : IDependency {
|
public interface IIndexProvider : ISingletonDependency {
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Creates a new index
|
/// Creates a new index
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@@ -12,6 +12,8 @@ namespace Orchard.Utility {
|
|||||||
public string Value { get { return _hash.ToString(); } }
|
public string Value { get { return _hash.ToString(); } }
|
||||||
|
|
||||||
public void AddString(string value) {
|
public void AddString(string value) {
|
||||||
|
if ( string.IsNullOrEmpty(value) )
|
||||||
|
return;
|
||||||
_hash += value.GetHashCode();
|
_hash += value.GetHashCode();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -15,13 +15,13 @@ using PackageIndexReferenceImplementation.Services;
|
|||||||
|
|
||||||
namespace PackageIndexReferenceImplementation.Controllers {
|
namespace PackageIndexReferenceImplementation.Controllers {
|
||||||
[HandleError]
|
[HandleError]
|
||||||
public class ModulesController : Controller {
|
public class FeedController : Controller {
|
||||||
private readonly FeedStorage _feedStorage;
|
private readonly FeedStorage _feedStorage;
|
||||||
private readonly MediaStorage _mediaStorage;
|
private readonly MediaStorage _mediaStorage;
|
||||||
|
|
||||||
public IMembershipService MembershipService { get; set; }
|
public IMembershipService MembershipService { get; set; }
|
||||||
|
|
||||||
public ModulesController() {
|
public FeedController() {
|
||||||
_feedStorage = new FeedStorage();
|
_feedStorage = new FeedStorage();
|
||||||
_mediaStorage = new MediaStorage();
|
_mediaStorage = new MediaStorage();
|
||||||
if ( MembershipService == null ) { MembershipService = new AccountMembershipService(); }
|
if ( MembershipService == null ) { MembershipService = new AccountMembershipService(); }
|
@@ -72,7 +72,7 @@
|
|||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Compile Include="Controllers\AccountController.cs" />
|
<Compile Include="Controllers\AccountController.cs" />
|
||||||
<Compile Include="Controllers\ModulesController.cs" />
|
<Compile Include="Controllers\FeedController.cs" />
|
||||||
<Compile Include="Controllers\Artifacts\AtomFeedResult.cs" />
|
<Compile Include="Controllers\Artifacts\AtomFeedResult.cs" />
|
||||||
<Compile Include="Controllers\Artifacts\AtomItemResult.cs" />
|
<Compile Include="Controllers\Artifacts\AtomItemResult.cs" />
|
||||||
<Compile Include="Controllers\Artifacts\ContentTypeAttribute.cs" />
|
<Compile Include="Controllers\Artifacts\ContentTypeAttribute.cs" />
|
||||||
|
@@ -7,7 +7,7 @@
|
|||||||
<asp:Content ID="loginContent" ContentPlaceHolderID="MainContent" runat="server">
|
<asp:Content ID="loginContent" ContentPlaceHolderID="MainContent" runat="server">
|
||||||
<h2>Log On</h2>
|
<h2>Log On</h2>
|
||||||
<p>
|
<p>
|
||||||
Please enter your username and password. <%: Html.ActionLink("Register", "Register") %> if you don't have an account.
|
Please enter your username and password.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<% using (Html.BeginForm()) { %>
|
<% using (Html.BeginForm()) { %>
|
||||||
|
Reference in New Issue
Block a user