Coder Social home page Coder Social logo

kalikocms / kalikocms.core Goto Github PK

View Code? Open in Web Editor NEW
145.0 34.0 66.0 6.15 MB

Open source content management system (CMS) for the ASP.NET platform.

License: GNU Lesser General Public License v3.0

ASP 4.24% C# 42.59% JavaScript 36.13% CSS 15.93% Pascal 1.11%

kalikocms.core's Introduction

Kaliko CMS

Kaliko CMS is an open source content management system (CMS) for the ASP.NET platform that supports both ASP.NET MVC and traditional WebForms. It provides you with the possibilities to build your website the way you want using the tools you choose. Whether you prefer MVC over WebForms or SQL Server over SQLite, it gives you a great framework to build on.

The framework approach also doesn't set any boundaries on how you structure your website or content. It's also very easy to extend the framework with content types if the ones included in the core doesn't quite match the requirements.

You find a couple of articles on how to get started using Kaliko CMS here.

Demo project using ASP.NET MVC and SQLite: https://github.com/KalikoCMS/DemoSite.Mvc and the accompanying article: http://www.codeproject.com/Articles/1021598/Build-a-website-with-Kaliko-CMS-using-ASP-NET-MVC

Demo project using WebForms and SQLite: https://github.com/KalikoCMS/DemoSite.WebForms and the accompanying article: http://www.codeproject.com/Articles/845483/Build-a-website-with-Kaliko-CMS-using-WebForms

Sign up to the Kaliko CMS Developer Newsletter to get updates about the project: http://eepurl.com/dJzMY

Install via NuGet

The far easiest way to install Kaliko CMS is through NuGet:

Optionally install Kaliko CMS Identity-package to enable ASP.NET Identity based user authentication.

Optionally install Kaliko CMS Search-package to enable search functionality.

*) For other databases see supported databases

Requirements

Branching strategy

The master branch will always include the latest release while new development will be done in separate branches. All releases are also tagged.

Licenses

Kaliko CMS is licensed under GNU Lesser General Public License version 3 (LGPL). However, this project also contains other libraries with their individual licenses.

KalikoCMS.Core makes use of:

KalikoCMS.Data-providers makes use of:

KalikoCMS.Search makes use of:

KalikoCMS.Identity makes use of:

  • ASP.NET Identity provider for Telerik Data Access (Ms-PL)

Thanks to

Thanks to Alvaro Muñoz (@pwntester) and Alexandr Mirosh from Hewlett-Packard Enterprise Security for great help with identifying and solving vulnerability related to JSON deserialization.

This project has been developed using:

kalikocms.core's People

Contributors

fschultz avatar ponchopowers avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

kalikocms.core's Issues

Page preview option

Today there's no function to preview a page before publishing. Therefore this will be implemented for use with working copies (i.e. saved pages not yet published).

Values that contain markup are encoded during render

Pretty new to this and really liking it so far!

As the title says, I'm having to do @Html.Raw for Properties that have HTML markup. So straight out of the "Getting Started", in order to get things going:

  • @Html.Raw(Model.TopImage.ToHtml())
  • @Html.Raw(Model.MainBody.Value)

Currently only have the Nuget install (not source), so I guess this is an "fyi" for now....

BTW, really like the approach - "doesn't set boundaries" == awesome!

ByRef value type parameter cannot be null.

Hi,
I seem to get this error whenever I try to use html helper such as @html.Label("test") with any page that has a CMSPage type. If I just use a normal Controller and View the html helper works

Type

[PageType("ArticleLandingPage", "Article Page - Landing", PageTypeDescription = "Create an Article Landing Page", AllowedTypes = new[] { typeof(ArticleLandingPage), typeof(ArticlePage) }, PreviewImage = "Assets/Images/article-landing-page-type.png")]
    public class ArticleLandingPage : CmsPage
    {
        [Property("Heading")]
        public virtual StringProperty Heading { get; set; }

        [Property("Content")]
        public virtual HtmlProperty Content { get; set; }

        [Property("Excerpt")]
        public virtual TextProperty Excerpt { get; set; }

        [Property("Description")]
        public virtual StringProperty Description { get; set; }

        [Property("Keywords")]
        public virtual StringProperty Keywords { get; set; }

        [TagProperty("Categories", TagContext = "articlelandingcategories")]
        public virtual TagProperty Categories { get; set; }

        [TagProperty("Tags", TagContext = "articlelandingtags")]
        public virtual TagProperty Tags { get; set; }

    }
}

Controller

   public class ArticlesLandingPageController : PageController<ArticleLandingPage>
    {
        public override ActionResult Index(ArticleLandingPage currentPage)
        {            
            return View(currentPage);
        }
    }

View


@{
    Layout = null;
}

<!DOCTYPE html>

<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>Index</title>
</head>
<body>
<div>
    This is a test
    @Html.Label("test")
</div>
</body>
</html>

capture

Convert publishing date times to standard time

Currently publishing date times are entered in the clients local time zone but the server side logic that handles the publishing can run in a completely different one.

This must be fixed by saving the date time in a standardized way so that publishing never is dependent on server location och localization.

Relative Path for FileLogger

Hello,
You may wish to consider implementing relative paths on your FileLogger (log4net?) component. The entry in your web,config in the sample Webforms demo is set to C:\temp\cms-log.txt, and, after deploying it to a remote IIS server, I was unable to implement a relative path such as ~/temp or /temp.


Also, isnt "treshold" a typo? Shouldn't it be "Threshold"?
Thanks

Html Editor Language Character

Html editor does not properly save Turkish Language Characters 'ş','ğ' etc.
I think it is related with json serialization.

Debug Messages

Hello,

Is there any way to turn off the debug messages that are out put to the Debug window when run in Visual Studio?

Also, any further update on Release 1.0.0-beta?

Thanks

FindSimular never returns results

Hi,

I was wondering how the FindSimular works, I used the following, but the FindSumlar always returns 0 results. I tried the search function and it was able to find things. So I know the indexing is working but when I try FindSimular it doesn't. I'm using Kaliko CMS 1.0.1 but I noticed the Search version is 1.0.0

I even tried just having the title property and category but I still can't get ti to work correctly? It could be due to what content is on the page. Does there have to be a minimum length of words? If I had a title called "This is a test" and another page had "This is a test too" do you think those should be related?

    public IndexItem MakeIndexItem(CmsPage page)
    {
        // Get a strongly typed version
        var typedPage = page.ConvertToTypedPage<ArticlePage>();

        // Create a base index item
        var indexItem = typedPage.GetBaseIndexItem();

        indexItem.Title = typedPage.Heading.Value;
        indexItem.Summary = typedPage.Excerpt.Value;
        indexItem.Content = typedPage.Content.Value;
        indexItem.Tags = typedPage.Tags.ToString();
        indexItem.Category = "Article";

        return indexItem;
    }

FindSimular:
var searchResult = SearchManager.Instance.FindSimular(Model, 0, 5);

Related

    <ul class="list-unstyled related">

        <p>@searchResult.Hits.Count</p>

        @foreach (var searchHit in searchResult.Hits)
        {

        <li><a href="@searchHit.Path">@searchHit.Title</a></li>
        }
    </ul>

Categories Type similar to Tags

Hi I was wondering if it would be beneficial to have a categories property similar to tags.

I used this:
[Property("Categories")]
public virtual CollectionProperty Categories { get; set; }

But it doesn't have the same easiness of using tags where you can comma separate the list in the UI

Javascript issues

Greetings,

Great design. But there are Javascript issues with other browsers when using the administration pages to create a new page from one of the page types. It works fine in IE (11), but has problems in Chrome Version 40.0.2214.115 & Firefox (using Waterfox)

Attribute routing?

Hi I was wondering how to go about using attribute routing.
Basically I have tagged my articles and would like to have this route:

/tag/abc
/tag/xyz
Where abc and xyz are the tag names.

I tried [Route("Tags/{id}")] but it will only work if I do /tag/index/xyz, I would like to have it without the index if possible.

This does work
routes.MapRoute(
name: "TagsDefault",
url: "tags/{id}",
defaults: new { controller = "Tags", action = "Index", id = UrlParameter.Optional }
);

Also I am getting the list of articles by tags using the following query is this how you would go about it:
var model =
PageFactory.GetPages(pageType.PageTypeId)
.Select(x => x.ConvertToTypedPage())
.Where(x => x.Tags.Tags.Contains(id));

KalikoCMS Providers

Greetings,

Do you have any tips/instructions on developing custom providers for KalikoCMS? I noticed that you provided the source for a RaptorDB provider, but no instructions on how to plug it into the framework and the required datamodel.

Is this an approach that you have considered enabling others to do? Instead of RaptorDB, I wanted to ascertain how much effort it would be to create a custom provider for something like Microsoft Access, and have it auto-create the datamodel as it currently does with SQLLite

Thanks

SetupAdminAccount.aspx & OWIN customizations

Noticed this behaviour in both releases. If you make any changes to the default OWIN behaviour whilst setting up a new project, these changes are not reflected at runtime.

Example:
In the ApplicationUserManager Create method, make a change to manager.PasswordValidator by setting RequiredLength = 5, OWIN will still prompt the user to create a password of minimum of 6 characters

Page versioning

Implement support for versioning pages. This will allow 0..n archived version, 0..1 published version and 0..1 working copy.

If a page is published the previously published page will be archived and the working copy will be escalated to published. If a new copy of the page is saved it will become the new working copy (unless the user chooses to publish at the same time).

Encoding (or serialization)

On an editor, if the text or string provided contains a single quote, a JavaScript syntax error is hit (top.executeCallback) - re: "missing ) ".

e.g. hello's world

results in
<script> top.executeCallback('{"Value":"hello's world"}', 'hello&#39;s world'); top.closeModal(); </script>

Line 51 of EditCollectionPropertyDialog.aspx.cs is probably the place to look at...though it seems excerpt var "should" be the right var to use (?).

Adding rerouting method for MVC

Add a function that can be used to more easily reroute a MVC request from a page extender.

Currently the complete rerouting has to be implemented manually when dealing with page extenders, would be nice to get the basics and only need to implement the additional route values.

Limit which pagetypes that can be created under a certain page

Add a new property to the PageType attribute that specifies which pagetypes that can be created under a certain pagetype.

If not defined, all pagetypes are available.

If defined but empty, no pagetypes are available:
AllowedTypes = new Type[] {}

If defined and includes pagetypes, only those pagetypes will be available:
AllowedTypes = new [] { typeof(MyPageType), typeof(MyOtherPageType) }

User Management - Delete User/Role

Having a few issues with managing users. Attempts to delete a user resolves to:
http://localhost/Admin/Identity/Identity/DeleteUser.aspx?id=XXX
instead of
http://localhost/Admin/Identity/DeleteUser.aspx?id=XXX
The same exists for DeleteRole
http://localhost/Admin/Identity/Identity/DeleteRole.aspx?id=XXX
instead of
http://localhost/Admin/IdentityDeleteRole.aspx?id=XXX

Do you have plans for allowing the developer to implement their own identity management pages instead, or are they tied to the implemented functionality?

Improved admin UI

Clean up stylesheets and finish basic default theme. Add option in configuration to switch theme.

Install Error

Hello ,
I was testing the CMS with visual studio 2010 framework 4.0 , but when I try to install Kaliko CMS ASP NET Identity providers get an error "Could Not Install package " Microsoft.Owin 3.0.0 " , how can I fix it?
thanks

Kaliko CMS Express

In order to help kick start web development using this CMS a new pre-populated web project will be created.

It will include the most common page types and a theme-able implementation and can be used either by developers to get a base for new projects or by end-users using it for standard websites.

The project will include features such as:

  • Articles
  • Blog posts
  • News
  • Search

These will be implemented in a flexible and configurable manner.

SearchProviderBase - IndexPage()

Just synced latest code and I'm hitting an odd NullReferenceException on IndexPage(CmsPage page) method.

I can see that the page param is in fact null. I can't seem to track this down at the moment...

How to repro:

  • This exception is hit when creating a page.
  • It occurs regardless if the page implements IIndexable or not
  • Occurs on Publish and Save Working Copy

Now the "odd" part:

  • The page is in fact created and persisted in DB PageInstance table
  • It is however not visible in Dashboard
  • The only way to see in dashboard is to restart/recycle the application (browser refresh or login/out has no effect)
  • After the restart/reclycle, the Page is visible in Dashboard and is in "Unpublished" state
  • You can Publish at that point and all's well
  • This exception doesn't seem to affect the Indexing - you can go to Search Engine -> Reindex website and the pages reported in the dashboard as indexed (correct number of pages)

This doesn't manifest in an "older" site (Nuget only code base)....

I'll continue tinkering and see if I can get somewhere....

Select Page Type Dialog Ordering

Hi what is the ordering of the Create New Page dialog for page types, I thought it was alphabetical but it looks like it based on date time or PageTypeId?

Old URL redirect

Prevent broken links by storing old page URLs when pages are a) moved or b) manually given an new URL.

Currently incoming links from external sources as well as hard coded links (in for instance HTML fields) will break if the page URL is changed, this will prevent this and permanent redirect to the new URL.

Importing pages

Hi there,

Is there any API or ways to import pages into the system without using the UI? I was looking at your PageFactory class but I don't see a way of creating any pages. It would be handy to have a way of doing this so we can import articles / pages from existing systems.

Invalid GUID or Null Object issue (1.0.0-beta3)

Versions: 1.0.0-beta3, Search v.1.0.0-beta:

CMS Admin Add Page:

  1. If fresh install (no pages), you can't really add a new page....
    • if you don't select Root and try to add a new page:

      [FormatException: Unrecognized Guid format.] System.Guid.TryParseGuid(String g, GuidStyles flags, GuidResult& result) +12192041 System.Guid..ctor(String g) +105 KalikoCMS.Admin.Content.Dialogs.SelectPagetypeDialog.Page_Load(Object sender, EventArgs e) +110 System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +85 System.Web.UI.Control.OnLoad(EventArgs e) +79 System.Web.UI.Control.LoadRecursive() +130 System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +2832

    • if you select Root and try to add page

      [NullReferenceException: Object reference not set to an instance of an object.] KalikoCMS.Admin.Content.Dialogs.SelectPagetypeDialog.Page_Load(Object sender, EventArgs e) +250 System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +85 System.Web.UI.Control.OnLoad(EventArgs e) +79 System.Web.UI.Control.LoadRecursive() +130 System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +2832

  2. If you have existing pages:
    • You "have to" select an existing page and Add Page (making it a child of that page), then "move" (works great btw!) to be child of Root.
    • If you try to Add to Root, same issue as above NullReferenceException.

I will tinker some more and try to obtain more detail....

Add composite property type

Currently creating more advanced combined properties (mixing image, text etc in the same property) requires quite a lot of job today, mostly by copying from existing property type editors.

By adding a new property type this can be much simplified. The new property type will be abstract and adds logic to handle editing/loading/saving transparently to the custom property types that inherits from it.

This can also be used to group properties on a page for other purposes, such as validation.

The usage of this property type would look something like this:

    public class FeatureProperty : CompositeProperty {
        [ImageProperty("Top image", Width = 320)]
        public ImageProperty Image { get; set; }

        [Property("Header")]
        public TextProperty Header { get; set; }

        [Property("Main teaser body")]
        public HtmlProperty TeaserBody { get; set; }
    }

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.